【问题标题】:JavaFX: Multiple selectors modifying the same propertyJavaFX:修改相同属性的多个选择器
【发布时间】:2016-12-02 01:37:09
【问题描述】:

我有一个这样的样式表:

*
{
    -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 标准工作。

字体属性似乎有些奇怪。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案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 样式可以来自样式表或内联样式。样式表 从样式表变量中指定的 URL 加载 场景对象。如果场景图包含控件,则默认用户 代理样式表已加载。内联样式通过节点指定 设置样式 API。内联样式类似于 style="..." 属性 一个 HTML 元素。从场景的样式表中加载的样式采用 优先于用户代理样式表中的规则。内联样式 优先于源自其他地方的样式。优先级 样式规则的顺序可以在样式中使用“!important”进行修改 声明。


      节点样式的优先级

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

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

      •父样式表

      •场景样式表

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

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

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

      【讨论】:

      • @Jai Strange ...它应该可以工作...您是否使用 Java 代码在任何地方添加了内联 css?
      • @Jai 编辑了带有重要注释的代码。如果您使用了内联样式,您可能会遇到问题。
      猜你喜欢
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多