我创建了一个非常简单的CSS,用于设置两个按钮的样式。
到第一个刚添加填充。
到第二个已设置-fx-background-color,但该值取自caspian.css,即它在设置之前应具有的值。
.first-style { -fx-padding: 20 5 1 5; }
.second-style { -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; }
此时我遇到一种奇怪的行为:焦点装饰停止工作,第二个按钮在聚焦时没有蓝色边框。
发生了什么?
答案 0 :(得分:2)
您需要在第二种样式中添加:focused
伪类以允许焦点环工作,否则只需在第二种样式类中重新指定按钮的背景颜色时覆盖它。 / p>
示例CSS:
.root { -fx-background-color: cornsilk; -fx-padding: 10; }
.first-style { -fx-padding: 20 5 1 5; }
.second-style { -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; }
.second-style:focused { -fx-background-color: -fx-focus-color, -fx-outer-border, -fx-inner-border, -fx-body-color; }
示例应用:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ButtonFocusCss extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) throws Exception {
VBox layout = new VBox(15);
Button b1 = new Button("B1");
b1.getStyleClass().add("first-style");
Button b2 = new Button("B2");
b2.getStyleClass().add("second-style");
layout.getChildren().addAll(b1, b2);
layout.getStylesheets().add(getClass().getResource("button.css").toExternalForm());
stage.setScene(new Scene(layout));
stage.show();
}
}
<强>更新强>
老实说,我无法解释为什么JavaFX CSS覆盖机制以这种方式工作,我在这里通过查看默认JavaFX 2.2 caspian.css得到了答案,并预测它如何工作。
JavaFX CSS的应用规则的最新解释在CSS参考指南部分CSS and the JavaFX Scene Graph中,尽管在这个示例中有一些细微之处,您需要转向一般的CSS规范来理解这样的事情。作为cascading order和specifity。