【问题标题】:Setting attributes both in FXML and in CSS在 FXML 和 CSS 中设置属性
【发布时间】:2016-04-17 10:55:22
【问题描述】:

如果我尝试在 FXML 和 CSS 中的类定义中设置相同的属性,我希望 FXML 中设置的属性被认为比 CSS 中的属性更具体。

例如,如果我有一个控件,例如

<Label styleClass="myLabel" prefHeight="40.0">

同时,还有一个 CSS 定义,例如

Label.myLabel {
    -fx-pref-height: 100px;
}

我希望标签的高度为 40 像素。相反,它有 100 像素。 有没有办法让 FXML 中的属性优先?

【问题讨论】:

  • 在 HTML 中,浏览器只是将表示属性映射到 CSS 规则,其特异性低于 * 规则。这允许浏览器单独使用 CSS 实现所有布局,同时始终允许作者使用 CSS 覆盖表示属性。另一方面,不可能强制表现属性覆盖 CSS 规则。取决于 CSS 在 JavaFX 中的实现方式,FXML 可能会也可能不会。
  • @BoltClock 如此映射到“浏览器域”,这确实是想要的行为吗?所以它在 FXML 中可能是一样的。谢谢你的来信!
  • 我会说它们介于浏览器和作者域之间 - 比任何浏览器默认设置都更具体,但比作者 CSS 更具体(包括外部链接、

标签: css javafx java-8 fxml


【解决方案1】:

在(到目前为止)没有合格答案的情况下,我只能猜测:

虽然可以预期 FXML 属性具有与内联样式定义大致相同的特性,但它们没有任何关系。

原因在于评估顺序:FXML 属性的评估时间早于 CSS 定义,并且完全独立于 CSS 定义。这就是为什么 CSS 定义会完全覆盖属性定义,使它们过时。


现在不止是猜测:Here我刚刚发现优先顺序是

  1. 来自Application.setUserAgentStylesheet(java.lang.String) 中用户代理样式表的样式
  2. 从代码中设置的值,例如调用Node.setOpacity(double)
  3. Scene.getStylesheets()Parent.getStylesheets() 中的作者样式表中的样式
  4. 来自Node.setStyle(java.lang.String)的风格

假设在 FXML 中预先设置一个值相当于从代码中设置一个值。

【讨论】:

    猜你喜欢
    • 2012-11-09
    • 2019-12-25
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多