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

时间:2016-12-02 01:37:10

标签: java css javafx javafx-8 javafx-css

我有一个这样的样式表:

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

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

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

我的方法有什么问题吗?我只是想设置一个“全局”的外观和感觉,同时为特定节点提供灵活性,以便在该节点需要更加自定义的外观时进行调整。

修改

似乎此问题仅对字体相关的CSS属性可见。我尝试将示例中的-fx-border-color更改为$ python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/mnt/somesocket')" ,它似乎按照正常的CSS标准运行。

似乎字体属性有些奇怪。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分: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样式可以来自样式表或内联样式。样式表   从在stylesheets变量中指定的URL加载   场景对象。如果场景图包含Control,则为默认用户   代理样式表已加载。内联样式通过节点指定   setStyle API。内联样式类似于style =“...”属性   一个HTML元素。从Scene的样式表加载的样式   用户代理样式表中的规则优先级。内联样式   优先于其他地方的风格。优先权   样式规则的顺序可以使用样式中的“!important”进行修改   声明。

节点样式的优先级

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

  

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

     

•父样式表

     

•场景样式表

     

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

     

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

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