2

J avaFX C SS R eference G uide中,明确表示

JavaFX 级联样式表 (CSS) 基于 W3C CSS 版本 2.1 [1]并在版本 3 [2]的当前工作中添加了一些内容。

在 JCRG 中,他们经常直接链接到 W3C 的 CSS 参考指南,当他们谈论选择器时就是这种情况。

在 JCRG 中,他们提到了类型选择器类选择器ID 选择器——他们甚至说它们不支持结构伪类——但没有提到属性选择器

如果 JavaFX 支持它们,它们是如何工作的?JavaFX 认为属性是什么?我认为 CSS 引擎可能会查看 FXML 中的属性,但并非所有场景图都源自 FXML。

4

1 回答 1

2

FXML 属性只是在相应对象上设置属性。本身没有“属性选择器”,但是当且仅当设置了某些属性时,某些节点才会设置伪类(这些属性记录在您链接的参考指南中)。所以底线是没有属性选择器的直接等价物,除非它们直接映射到伪类。

当然,请注意,如果您需要支持基于属性的 CSS,您始终可以观察属性并设置/取消设置自定义伪类。因此,总是可以将属性选择器重铸为伪类。

因此,例如,假设您想要对具有"alignment=CENTER_RIGHT"属性的文本字段进行不同的样式设置。你可以做

TextField textField = new TextField();
PseudoClass rightAligned = PseudoClass.getPseudoClass("right-aligned");
textField.alignmentProperty().addListener((obs, oldAlignment, newAlignment) -> 
    textField.pseudoClassStateChanged(rightAligned, newAlignment == Pos.CENTER_RIGHT));

然后在你的CSS中你只需要

.text-field:right-aligned {
    /* style rules */
}
于 2018-03-01T16:49:26.557 回答