JavaFX CSS 中的 -fx-text-fill 和 -fx-text-inner-color 有什么区别?
What's the difference between -fx-text-fill and -fx-text-inner-color in JavaFX CSS?
来自 JavaFX CSS Reference Guide 我对 -fx-text-fill
属性 了解得足够多了。
在处理一个最近更新到 JavaFX 16 的更大的 JavaFX 项目时,我遇到了一些 CSS 代码,这些代码使用 -fx-text-inner-color
显然实现了完全相同的事情,即更改文本(在我的例子中)TextField 控件的颜色。
因为我找不到关于第二个的任何文档属性,所以我决定在这里问一下。
谁能解释一下这两个属性之间的区别,为什么我们可能需要这两个属性,以及什么时候更喜欢一个?
-fx-text-fill
是为具有 text
属性的控件定义的 CSS 属性(例如 Labeled
及其子类,以及 TextInputControl
及其子类)。
如问题中所述,属性 列在 JavaFX CSS Reference Guide 中。
-fx-text-inner-color
不是 属性,而是在默认样式表 modena.css. It is used as the value of the -fx-text-fill
property for controls which have a background color set to -fx-control-inner-background
中定义的查找颜色(本质上是 CSS 颜色变量),即“文本框、密码框、列表、树和表格”。
在根级别更改 -fx-text-inner-color
会影响所有文本框、密码框、列表、树和表格的文本颜色。
请注意,-fx-text-inner-color
的默认值设置为色阶,这取决于-fx-control-inner-background
的值。即,当 -fx-control-inner-background
较暗(小于 45% 强度)时,设置为 -fx-light-text-color
,当较亮(大于 60% 强度,默认为)时,设置为-fx-mid-text-color
,否则设置为-fx-dark-text-color
。它们的默认值分别是 white
、#333
和 black
。
这些默认设置的效果是获得始终与背景形成对比的文本填充;因此,如果您更改 -fx-control-inner-background
的值,文本颜色将自动调整。
实际上有两种不同的方法来定义应用程序的生产级样式:
为您在应用程序中使用的所有控件定义样式。在这种方法中,您将在每个控件上设置 properties(或者至少设置与默认值不同的属性)。这是更多的工作,但创建了一个“独立”样式,如果用户有一个带有新默认样式表的 JavaFX 实现,它在未来更有可能是健壮的。
点击默认样式表 modena.css
并更改 查找颜色 的值,所有内容都基于此。这要容易得多。只需更改 -fx-base
的值,您就可以走很长一段路,大多数其他查找的颜色都是从该值定义的。其他关键查找颜色是
-fx-background
,用于windows和窗格 的背景色
-fx-control-inner-background
,用于文本框、列表、表格和树的背景色
-fx-dark-text-color
、-fx-mid-text-color
和 -fx-light-text-color
,用于定义在 -fx-background
和 -fx-control-inner-background
上绘制的文本的颜色阶梯
-fx-accent
(选择)、-fx-default-button
、-fx-focus-color
和 -fx-faint-focus-color
尝试创建一个应用程序并使用
.root { -fx-base: black; }
作为样式表,没有任何其他样式设置。您应该会看到一个非常有效的“深色主题”。您可能想要更改一些其他颜色,尤其是选择和焦点颜色,但仅此更改就可以很好地工作。
请注意,如果您使用更改查找颜色的方法,而不是单独为所有控件设置属性,则您对新的默认样式表不可靠。您可以通过将您的用户代理样式表显式设置为 MODENA
:
来使其健壮
Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);
来自 JavaFX CSS Reference Guide 我对 -fx-text-fill
属性 了解得足够多了。
在处理一个最近更新到 JavaFX 16 的更大的 JavaFX 项目时,我遇到了一些 CSS 代码,这些代码使用 -fx-text-inner-color
显然实现了完全相同的事情,即更改文本(在我的例子中)TextField 控件的颜色。
因为我找不到关于第二个的任何文档属性,所以我决定在这里问一下。
谁能解释一下这两个属性之间的区别,为什么我们可能需要这两个属性,以及什么时候更喜欢一个?
-fx-text-fill
是为具有 text
属性的控件定义的 CSS 属性(例如 Labeled
及其子类,以及 TextInputControl
及其子类)。
如问题中所述,属性 列在 JavaFX CSS Reference Guide 中。
-fx-text-inner-color
不是 属性,而是在默认样式表 modena.css. It is used as the value of the -fx-text-fill
property for controls which have a background color set to -fx-control-inner-background
中定义的查找颜色(本质上是 CSS 颜色变量),即“文本框、密码框、列表、树和表格”。
在根级别更改 -fx-text-inner-color
会影响所有文本框、密码框、列表、树和表格的文本颜色。
请注意,-fx-text-inner-color
的默认值设置为色阶,这取决于-fx-control-inner-background
的值。即,当 -fx-control-inner-background
较暗(小于 45% 强度)时,设置为 -fx-light-text-color
,当较亮(大于 60% 强度,默认为)时,设置为-fx-mid-text-color
,否则设置为-fx-dark-text-color
。它们的默认值分别是 white
、#333
和 black
。
这些默认设置的效果是获得始终与背景形成对比的文本填充;因此,如果您更改 -fx-control-inner-background
的值,文本颜色将自动调整。
实际上有两种不同的方法来定义应用程序的生产级样式:
为您在应用程序中使用的所有控件定义样式。在这种方法中,您将在每个控件上设置 properties(或者至少设置与默认值不同的属性)。这是更多的工作,但创建了一个“独立”样式,如果用户有一个带有新默认样式表的 JavaFX 实现,它在未来更有可能是健壮的。
点击默认样式表
modena.css
并更改 查找颜色 的值,所有内容都基于此。这要容易得多。只需更改-fx-base
的值,您就可以走很长一段路,大多数其他查找的颜色都是从该值定义的。其他关键查找颜色是-fx-background
,用于windows和窗格 的背景色
-fx-control-inner-background
,用于文本框、列表、表格和树的背景色-fx-dark-text-color
、-fx-mid-text-color
和-fx-light-text-color
,用于定义在-fx-background
和-fx-control-inner-background
上绘制的文本的颜色阶梯
-fx-accent
(选择)、-fx-default-button
、-fx-focus-color
和-fx-faint-focus-color
尝试创建一个应用程序并使用
.root { -fx-base: black; }
作为样式表,没有任何其他样式设置。您应该会看到一个非常有效的“深色主题”。您可能想要更改一些其他颜色,尤其是选择和焦点颜色,但仅此更改就可以很好地工作。
请注意,如果您使用更改查找颜色的方法,而不是单独为所有控件设置属性,则您对新的默认样式表不可靠。您可以通过将您的用户代理样式表显式设置为
来使其健壮MODENA
:Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);