系统颜色能够对当前使用的 color-scheme
值做出反应。light-dark()
函数向作者公开了相同的功能。
CSS 中的系统颜色
在 CSS 中,您可以使用来自多种颜色空间中的许多颜色。例如,您可以使用命名颜色、十六进制颜色、链接到特定颜色空间的颜色函数,以及更通用的 color()
函数。
例如,命名颜色 cornflowerblue
也可以表示为 #6495ED
、hsl(218.54deg 79.19% 66.08%)
或 color(display-p3 0.43 0.58 0.9)
。
除了这些各种名称和格式之外,CSS 还包括描述为系统颜色的颜色,这些颜色在 CSS Color Module Level 4 中指定。这些系统颜色是由浏览器定义的颜色,并用关键字表示。
例如,系统颜色 Canvas
(不要与 <canvas>
元素混淆)表示“应用程序内容或文档的背景”。它与 CanvasText
很好地搭配使用,也旨在与 CanvasText
结合使用,后者表示“应用程序内容或文档中的文本”。
在 CSS 中,您可以如下使用它们:
body {
color: CanvasText;
background-color: Canvas;
}
默认情况下,CanvasText
会产生接近 black
的颜色,而 Canvas
是一种接近 white
的颜色。实际实现取决于浏览器。例如,Chrome 中的 CanvasText
会产生 #121212
,而 Safari 则将其指定为稍浅的 #1e1e1e
。
这些系统颜色的一个隐藏的力量是,它们可以响应 color-scheme
属性的计算值。例如,当使用的 color-scheme
为 dark
时,CanvasText
和 Canvas
的值会翻转。
:root {
color-scheme: dark;
}
body {
color: CanvasText;
background-color: Canvas;
}
在以下演示中,您可以更改在 :root
上设置的 color-scheme
的值,并查看页面如何响应。
- 当设置为
light dark
时,表示该元素同时支持浅色和深色模式。使用哪个值的选择取决于prefers-color-scheme
媒体条件的值。 - 当设置为
light
时,表示该元素支持浅色方案。 - 当设置为
dark
时,表示该元素支持深色方案。
color-scheme
值的页面。更改后,当从浅色变为深色或反之亦然时,页面的颜色会发生变化,即使 body 元素上的声明保持不变。介绍 light-dark()
到目前为止,响应使用的 color-scheme
值是系统颜色专有的功能。感谢 CSS Color Module Level 5 中指定的 light-dark()
,您现在也拥有了相同的功能。
light-dark()
是一个接受两个参数的函数,这两个参数都必须是 <color>
。其中一个或两个都根据使用的颜色方案选择。
- 如果使用的颜色方案是
light
或未知,则返回第一个值的计算值。 - 如果使用的颜色方案是
dark
,则返回第二个颜色的计算值。
light-dark()
的结果是 <color>
。它可以在 CSS 中任何接受 <color>
的地方使用。例如,在 color
和 background-color
属性中,也可以在诸如 linear-gradient()
之类的函数中使用。
在以下示例中,在深色模式下使用的 background-color 是 #333
,在浅色模式(或未知模式)下是 #ccc
。
:root {
color-scheme: light dark;
}
body {
background-color: light-dark(#ccc, #333);
}
请注意,为了使 light-dark()
正常工作,您需要指定一个 color-scheme
。由于该属性是继承的,因此您通常在 :root
上设置它,但如果您愿意,也可以选择在特定元素上设置它。
实际应用
在以下示例中,一些自定义属性表示页面上的颜色。为了适应深色模式,这些自定义属性的值在 prefers-color-scheme
媒体条件中被不同的值覆盖。
:root {
--primary-color: #333;
--primary-background: #e4e4e4;
--highlight-color: hotpink;
}
@media (prefers-color-scheme: dark) {
:root {
--primary-color: #fafafa;
--primary-background: #121212;
--highlight-color: lime;
}
}
prefers-color-scheme
响应浅色或深色模式的页面。颜色值在 CSS 中使用媒体查询更改。
感谢 light-dark()
,此代码可以简化。由于 color-scheme
在 :root
上设置为 light dark
,因此当您将操作系统从浅色模式更改为深色模式以及反之亦然时,这些颜色的值会自动更改。
:root {
color-scheme: light dark;
--primary-color: light-dark(#333, #fafafa);
--primary-background: light-dark(#e4e4e4, #121212);
--highlight-color: light-dark(hotpink, lime);
}
prefers-color-scheme
响应浅色或深色模式的页面。颜色值使用
light-dark()
更改。作为额外的奖励,可以通过将 color-scheme
设置为 dark
或 light
,强制 DOM 的某个子树仅使用浅色或深色模式。在以下示例中,这应用于 :root
。
prefers-color-scheme
响应浅色或深色模式的页面。颜色值使用
light-dark()
更改。使用其中一个选项,您可以强制使用浅色或深色模式。这是通过操作
color-scheme
值来实现的。