4

我有一个这样的样式表:

*
{
    -fx-font-size: 15px;
}

.title
{
    -fx-font-size: 20px;
}

我以为既然*比 更通用.title,那么-fx-font-size定义的 in.title会优先于它,但我错了。无论我将它更改为什么字体大小.title,该标题标签仍然呈现在15px. 当我删除*块时,标题标签将正确反映.title.

我的方法有什么问题吗?我只是想设置一个“全局”的外观和感觉,同时让特定节点在该节点需要更定制的外观时灵活地调整它。

编辑

似乎这个问题只对与字体相关的 CSS 属性可见。我已经尝试-fx-font-size在我的示例中更改为-fx-border-color,并且它似乎按照正常的 CSS 标准工作。

字体属性似乎有些奇怪。

4

2 回答 2

3

您为每个节点分配字体大小。

对于Labels(和类似元素),虽然文本不是由Node自身显示,而是由后代节点显示。通常,该节点将从 继承该-fx-font-size属性Label,但由于您为每个单个节点分配该属性,因此它是为该后代本身分配的,因此不使用来自父节点的值。

要解决此问题,请为具有 class 的节点的后代分配新大小title

* {
    -fx-font-size: 15px;
}

.title * {
    -fx-font-size: 20px;
}
于 2016-12-02T08:38:22.883 回答
2

您可以使用!important

.title{
    -fx-font-size: 20px !important;
}

如果您只有一个带有 ID 的元素,甚至更好:

#title{
   -fx-font-size: 20px !important;
}

来自https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html上的段落:

场景、父场景和子场景样式表


CSS 样式可以来自样式表或内联样式。样式表从 Scene 对象的 stylesheets 变量中指定的 URL 加载。如果场景图包含控件,则加载默认的用户代理样式表。内联样式通过 Node setStyle API 指定。内联样式类似于 HTML 元素的 style="..." 属性。从场景样式表加载的样式优先于用户代理样式表中的规则。内联样式优先于其他地方的样式。样式规则的优先顺序可以在样式声明中使用“!important”进行修改。


节点样式的优先级

JavaFX 运行时使用以下优先级规则来设置节点的可视属性。使用具有较高优先级且具有属性值的源:

• 内联样式(最高优先级)

•父样式表

•场景样式表

•使用JavaFX API 在代码中设置的值

•用户代理样式表(最低优先级)

添加到节点父节点的样式表的优先级高于添加到场景中的样式表。这使开发人员能够为场景图的不同分支自定义样式。

于 2016-12-02T03:11:35.203 回答