我有一个这样的样式表:
*
{
-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标准运行。
似乎字体属性有些奇怪。
答案 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在代码中设置的值
•用户代理样式表(最低优先级)
添加到节点父节点的样式表的优先级高于添加到场景的样式表。这使开发人员可以为场景图的不同分支设置自定义样式。