JavaFX:多个选择器修改相同 属性

JavaFX: Multiple selectors modifying the same property

我有一个这样的样式表:

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

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

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

中定义的大小

我的做法有什么问题吗?我只是想设置一个“全局”外观,同时让特定节点可以灵活地在该节点需要更自定义的外观时进行调整。

编辑

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

字体属性好像有点奇怪。

您可以使用 !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 段落:

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


CSS styles can come from style sheets or inline styles. Style sheets are loaded from the URLs specified in the stylesheets variable of the Scene object. If the scene graph contains a Control, a default user agent style sheet is loaded. Inline styles are specified via the Node setStyle API. Inline styles are analogous to the style="..." attribute of an HTML element. Styles loaded from a Scene's style sheets take precedence over rules from the user agent style sheet. Inline styles take precedence over styles originating elsewhere. The precedence order of style rules can be modified using "!important" in a style declaration.


节点样式的优先级

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

• Inline style (the highest priority)

•Parent style sheets

•Scene style sheets

•Values set in the code using JavaFX API

•User agent style sheets (the lowest priority)

添加到节点父节点的样式 sheet 比添加到场景的样式 sheet 具有更高的优先级。这使开发人员可以为场景图的不同分支自定义样式。

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

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

要解决此问题,请为具有 class title:

的节点的后代分配新的大小
* {
    -fx-font-size: 15px;
}

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