W3C

CSS 颜色模块级别 3

W3C 推荐

关于此文档的更多细节
此版本
https://w3org.cn/TR/2022/REC-css-color-3-20220118/
最新版本
https://w3org.cn/TR/css-color-3/
上一版本
历史
https://w3org.cn/standards/history/css-color-3
编辑草案
https://drafts.csswg.org/css-color-3/
实现报告
https://test.csswg.org/harness/results/css-color-3_dev/grouped/
反馈
GitHub 问题 是讨论本规范的首选方式。提交问题时,请在标题中加入 “css-color-3”,最好采用如下格式:“[css-color-3] …评论摘要…”。所有问题和评论均已归档,并且还有历史归档
编辑
Tantek Çelik (Mozilla Corporation,此前在 Microsoft Corporation) <>
Chris Lilley (W3C) <https://svgees.us/>
L. David Baron (W3C 受邀专家) <>
其他作者
Steven Pemberton (CWI) <>
Brad Pettit (Microsoft Corporation) <>
测试套件
http://test.csswg.org/suites/css3-color/nightly-unstable/
勘误表
https://w3org.cn/Style/2022/REC-css-color-3-20220118-errata.html

摘要

CSS(层叠样式表)是一种用于描述 HTML 与 XML 文档在屏幕、纸张、语音等介质上的渲染方式的语言。它使用与颜色相关的属性和值来为文档中的文本、背景、边框以及元素的其他部分着色。本规范描述了前景颜色和组透明度的颜色值与属性。这包括 CSS2 级别中的属性和值以及新加入的值。

本文档状态

本节描述了本文档在发布时的状态。当前 W3C 出版物的列表以及本技术报告的最新修订版可在 W3C 技术报告索引(https://w3org.cn/TR/)中找到。

本文档由 CSS 工作组推荐稿 形式发布,采用 Recommendation 轨道。

W3C 推荐稿是一份在广泛共识基础上形成的规范,已获 W3C 与其成员的认可,并且工作组成员承诺为实现提供免版税授权

W3C 建议将本规范广泛部署为 Web 标准。

本文档由一个遵循 W3C 专利政策 的小组制定。W3C 维护一份公开专利披露列表,列出与本小组交付物相关的任何专利披露;该页面还提供了披露专利的指导。任何对其认为包含必要专利声明的专利有实际了解的个人,必须依据W3C 专利政策第 6 节进行披露。

本文档受 2021 年 11 月 2 日 W3C 过程文档 约束。

另有一份 实现报告 显示,测试套件 中的每个测试至少被两个独立实现通过。但大多数测试现已为 CSS Color 4 更新(参见 实现报告)。

本文档的完整更改列表已提供。


1. 简介

本节是非规范性的。

CSS 超出第 2 级的部分由若干模块组成,划分为可增量开发的子规范,以便实现逐步演进。本规范即为其中之一。

本模块描述了允许作者指定元素前景颜色及不透明度的 CSS 属性。模块还详细阐述了 CSS 的 <color> 值类型。

它不仅定义了已存在于 CSS1CSS2 中的颜色相关属性和值,还定义了全新的属性和值。

本规范是以下推荐稿与工作草案相关部分的合并结果,并加入了一些新特性。

2. 依赖关系

附加术语在 定义 部分([CSS21])中给出。文档源码与代码片段示例采用 XML [XML10] 或 HTML [HTML401] 语法。

3. 颜色属性

3.1. 前景颜色:‘color’ 属性

名称 color
<color> | inherit
初始值 取决于用户代理
应用于 所有元素
可继承
百分比 不适用
计算值
  • 基础颜色关键字、RGB 十六进制值以及扩展颜色关键字的计算值均为对应的数值 RGB 三元组,例如 六位十六进制值或 rgb(...) 函数值,其 α 值为 1。
  • 关键字 ‘transparent’ 的计算值为全部为零的 RGBA 四元组,例如 rgba(0,0,0,0)
  • 对于其他所有值,计算值即为指定值本身。

此属性描述元素文本内容的前景颜色。此外,它还可为接受颜色值的*其他*属性提供间接值(currentColorcolor’ 属性本身上设置了关键字 ‘currentColor’,则视为 ‘color: inherit’。

有多种方式可以指定青柠绿

示例

em { color: lime }               /* color keyword */
em { color: rgb(0,255,0) }       /* RGB range 0-255   */
<color>(颜色)
颜色单位定义在下文

3.2. 透明度:‘opacity’ 属性

不透明度可以视为一种后期处理操作。概念上,当元素(及其子元素)渲染到离屏 RGBA 图像后,不透明度设置指定如何将该离屏渲染合成到当前复合渲染中。详情请参见简易 α 合成

名称 opacity
<alphavalue> | inherit
初始值 1
应用于 所有元素
可继承
百分比 不适用
计算值 等同于在将 <alphavalue> 裁剪到 [0.0,1.0] 区间后的指定值。
<alphavalue>
语法上为 <number>。统一的不透明度设置会应用于整个对象。任何超出 0.0(完全透明)至 1.0(完全不透明)范围的值都会被限制在该范围内。如果对象有子元素,则效果相当于使用掩码将子元素与当前背景按照每个像素的掩码值 <alphavalue> 进行混合。对于 SVG,“有子元素”相当于是容器元素 [SVG11]

由于不透明度小于 1 的元素是从单一离屏图像合成的,内容无法在其内部的各个片段之间按 z 顺序层叠。出于同样原因,任何不透明度小于 1 的元素必须创建新的层叠上下文。如果该元素未定位,则它与层级 0 的定位元素在同一层内绘制,属于其父层叠上下文。如果该元素已定位,则‘z-index’属性的行为如 [CSS21] 所述,只是当使用值为 ‘auto’ 时,该元素的行为等同于 ‘0’。更多关于层叠上下文的信息,请参见 第 9.9 节附录 E[CSS21])。本段规则不适用于 SVG 元素,因为 SVG 有其独立的渲染模型[SVG11] 第 3 章)。

4. 颜色单位

<color> 可以是关键字或数值说明。

4.1. 基础颜色关键字

基础颜色关键字列表为:aqua、black、blue、fuchsia、gray、green、lime、maroon、navy、olive、purple、red、silver、teal、white、yellow。这些颜色名称在ASCII 不区分大小写

颜色名称与 sRGB
命名Numeric(数值)颜色名称十六进制 rgb十进制
black (黑色) #000000 0,0,0
silver (银色) #C0C0C0192,192,192
gray (灰色) #808080 128,128,128
white (白色) #FFFFFF255,255,255
maroon (栗色) #800000 128,0,0
red (红色) #FF0000255,0,0
purple (紫色) #800080 128,0,128
fuchsia (紫红色) #FF00FF255,0,255
green (绿色) #008000 0,128,0
lime (酸橙色) #00FF000,255,0
olive (橄榄色) #808000 128,128,0
yellow (黄色) #FFFF00255,255,0
navy (海军蓝) #000080 0,0,128
blue (蓝色) #0000FF0,0,255
teal (水鸭色) #008080 0,128,128
aqua (浅绿色) #00FFFF0,255,255

示例

body {color: black; background: white }
h1 { color: maroon }
h2 { color: olive }

4.2. 数值颜色值

4.2.1. RGB 颜色值

使用 RGB 颜色模型 来表示数值颜色。下面的示例均对应同一种颜色。

示例

em { color: #f00 }              /* #rgb */
em { color: #ff0000 }           /* #rrggbb */
em { color: rgb(255,0,0) }
em { color: rgb(100%, 0%, 0%) }

十六进制表示法的 RGB 值以 ‘#’ 开头,紧跟三位或六位十六进制字符。三位十六进制记法(#rgb)通过复制每位而非填零转为六位形式(#rrggbb)。例如,#fb0 扩展为 #ffbb00。这样可用简写(#fff)表示白色(#ffffff),且不受显示器颜色深度限制。

功能记法的 RGB 值形式为 ‘rgb(’ 后跟逗号分隔的三个数值(整数或百分比),再以 ‘)’ 结束。整数 255 对应 100%(亦即十六进制的 F 或 FF):rgb(255,255,255) = rgb(100%,100%,100%) = #FFF。数值周围可出现空白字符。

所有 RGB 颜色均使用 sRGB 色彩空间(参见 [SRGB])。用户代理在呈现这些颜色时的精度可能不同,但使用 sRGB 可提供一个明确且客观可测的颜色定义,可对应国际标准(参见 [COLORIMETRY])。

超出设备色域的值应在已知色域时进行裁剪或映射:红、绿、蓝分量必须调整至设备支持的范围。用户代理可执行更高质量的跨色域映射。本规范未定义精确的裁剪行为。对于典型的 CRT 显示器(色域等同于 sRGB),以下四条规则等价。

示例

em { color: rgb(255,0,0) }       /* integer range 0 - 255 */
em { color: rgb(300,0,0) }       /* clipped to rgb(255,0,0) */
em { color: rgb(255,-10,0) }     /* clipped to rgb(255,0,0) */
em { color: rgb(110%, 0%, 0%) }  /* clipped to rgb(100%,0%,0%) */

其他设备(如打印机)拥有不同于 sRGB 的色域;有些超出 0..255 sRGB 范围的颜色在设备色域内是可表示的,而有些落在 0..255 sRGB 范围内的颜色却超出设备色域,需要被映射。

4.2.2. RGBA 颜色值

在本规范中,RGB 颜色模型被扩展为包含“alpha”,以便指定颜色的不透明度。详情请参见简易 α 合成。以下示例均表示同一种颜色:

示例

em { color: rgb(255,0,0) }      /* integer range 0 - 255 */
em { color: rgba(255,0,0,1)     /* the same, with explicit opacity of 1 */
em { color: rgb(100%,0%,0%) }   /* float range 0.0% - 100.0% */
em { color: rgba(100%,0%,0%,1) } /* the same, with explicit opacity of 1 */

与 RGB 值不同,RGBA 值不提供十六进制记法。

功能记法的 RGBA 值形式为 ‘rgba(’ 后跟逗号分隔的三个数值(整数或百分比),随后是 <alphavalue>,最后以 ‘)’ 结束。整数 255 对应 100%,如 rgba(255,255,255,0.8) = rgba(100%,100%,100%,0.8)。数值周围可出现空白字符。

实现必须根据 RGB 颜色值的色域规则,对 RGBA 颜色值的红、绿、蓝分量进行设备色域裁剪。

下面的示例展示了 rgba() 记法能够实现的效果。

示例

p { color: rgba(0,0,255,0.5) }        /* semi-transparent solid blue */
p { color: rgba(100%, 50%, 0%, 0.1) } /* very transparent solid orange */

注意。 若用户代理不支持 RGBA 值,应按照 CSS 前向兼容解析规则([CSS21],第 4 章)将其视为未识别值。RGBA 值**不能**仅被当作忽略透明度的 RGB 值处理。

4.2.3. transparent’ 颜色关键字

CSS1 为 background-color 属性引入了 ‘transparent’ 值。CSS2 亦允许 border-color 接受该值。Open eBook™ Publication Structure 1.0.1 [OEB101] 将 ‘color’ 属性扩展为同样接受 ‘transparent’ 关键字。CSS3 将颜色值进一步扩展为包括 ‘transparent’,从而可在所有接受 <color> 值的属性中使用,简化了这些属性在 CSS3 中的定义。

transparent
完全透明。此关键字可视为 transparent black(rgba(0,0,0,0))的简写,其计算值即为 rgba(0,0,0,0)。

4.2.4. HSL 颜色值

CSS3 新增了数值 色相-饱和度-亮度(HSL) 颜色,以补充数值 RGB 颜色。已观察到 RGB 颜色存在以下局限:

还有多种其他配色方案。HSL 的优势在于对亮度与暗度对称(而 HSV 则不然),且 HSL 与 RGB 的相互转换非常简单。

HSL 颜色编码为三元组(色相、饱和度、亮度)。色相以色环角度表示(即彩虹在圆形中的位置),通常以度数计量,单位在 CSS 中默认为度,语法上只写 <number>。约定 red=0=360,其余颜色均沿圆环均匀分布,如 green=120、blue=240 等。作为角度,它会自动环绕,例如 -120=240,480=120。实现可将任意角度 x 归一化到 [0,360) 区间的方式之一是计算 (((x mod 360) + 360) mod 360)。饱和度与亮度以百分比表示。100% 表示完全饱和,0% 为灰色。亮度 0% 为黑,100% 为白,50% 为“普通”。

例如:

示例

* { color: hsl(0, 100%, 50%) }   /* red */
* { color: hsl(120, 100%, 50%) } /* lime */
* { color: hsl(120, 100%, 25%) } /* dark green */
* { color: hsl(120, 100%, 75%) } /* light green */
* { color: hsl(120, 75%, 75%) }  /* pastel green, and so on */

HSL 相较于 RGB 更直观:可以先猜测想要的颜色,再微调。也更易于创建一组匹配的颜色(保持相同 hue,调节亮度/暗度与饱和度)。

如果饱和度小于 0%,实现必须将其裁剪至 0%。如果结果仍超出设备色域,实现必须裁剪至设备色域。裁剪应尽可能保留色相,否则行为未定义。(换言之,此裁剪不同于在 HSL→RGB 转换后对 RGB 颜色进行的裁剪规则。)

将 HSL 颜色转换为 sRGB 的数学过程相对直接。以下是 JavaScript 实现示例,返回一个包含红、绿、蓝三个通道数值的数组,数值已归一化到 [0,1] 区间。

    function hslToRgb (hue, sat, light) {
      hue = hue % 360;

      if (hue < 0) {
          hue += 360;
      }

      sat /= 100;
      light /= 100;

      function f(n) {
          let k = (n + hue/30) % 12;
          let a = sat * Math.min(light, 1 - light);
          return light - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));
      }

      return [f(0), f(8), f(4)];
  }
  
4.2.4.1. HSL 示例

下表每列对应一种色相。我们从色环中挑选了 12 种等间距颜色(每 30°)——红、黄、绿、青、蓝、品红及其之间的过渡色(最后一列为品红与红之间的颜色)。

在每张表中,X 轴代表饱和度,Y 轴代表亮度。

0° 红色
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
30° 红黄(即橙色)
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
60° 黄色
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
90° 黄绿
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
120° 绿色
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
150° 绿青
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
180° 青色
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
210° 青蓝
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
240° 蓝色
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
270° 蓝品红
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
300° 品红
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
330° 品红红
100%80%60%40%20%0%
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%

4.2.5. HSLA 颜色值

正如 ‘rgb()’ 函数拥有 ‘rgba()’ 的 alpha 形式,‘hsl()’ 函数也拥有 ‘hsla()’ 的 alpha 形式。 详细请参见简易 α 合成。以下示例均表示同一种颜色。

示例

em { color: hsl(120, 100%, 50%) }     /* green */
em { color: hsla(120, 100%, 50%, 1) } /* the same, with explicit opacity of 1 */

HSLA 颜色值的功能记法为 ‘hsla(’ 后跟度数表示的色相、以百分比表示的饱和度与亮度,以及 <alphavalue>,最后以 ‘)’ 结束。数值周围可出现空白字符。

实现必须根据 HSL 颜色值的色域规则,对 HSLA 颜色值的色相、饱和度和亮度分量进行设备色域裁剪。

以下示例展示了 hsla() 记法能实现的效果。

示例

p { color: hsla(240, 100%, 50%, 0.5) } /* semi-transparent solid blue */
p { color: hsla(30, 100%, 50%, 0.1) }  /* very transparent solid orange */

4.3. 扩展颜色关键字

下表列出了 X11 颜色 [X11COLORS],在主流浏览器中均受支持,并加入了 SVG 1.0 的 gray/grey 变体。得到的列表与 SVG 1.0 颜色关键字名称 完全相同。本规范将其定义扩展至超出 SVG 的范围。左侧的两列示例分别展示使用命名颜色值与对应数值颜色值设置表格单元格背景的效果。

命名Numeric(数值)颜色名称十六进制 rgb十进制
aliceblue (艾利斯兰) #f0f8ff240,248,255
antiquewhite (古董白) #faebd7250,235,215
aqua (浅绿色) #00ffff0,255,255
aquamarine (碧蓝色) #7fffd4127,255,212
azure (天蓝色) #f0ffff240,255,255
beige (米色) #f5f5dc245,245,220
bisque (橘黄色) #ffe4c4255,228,196
black (黑色) #000000 0,0,0
blanchedalmond (杏仁白) #ffebcd255,235,205
blue (蓝色) #0000ff0,0,255
blueviolet (紫罗兰色) #8a2be2138,43,226
brown (棕色) #a52a2a165,42,42
burlywood (实木色) #deb887222,184,135
cadetblue (军服蓝) #5f9ea095,158,160
chartreuse (黄绿色) #7fff00127,255,0
chocolate (巧克力色) #d2691e210,105,30
coral (珊瑚色) #ff7f50255,127,80
cornflowerblue (矢车菊蓝) #6495ed100,149,237
cornsilk (米绸色) #fff8dc255,248,220
crimson (绯红色) #dc143c220,20,60
cyan (青色) #00ffff0,255,255
darkblue (暗蓝色) #00008b0,0,139
darkcyan (暗青色) #008b8b0,139,139
darkgoldenrod (暗金菊黄) #b8860b184,134,11
darkgray (暗灰色) #a9a9a9169,169,169
darkgreen (暗绿色) #006400 0,100,0
darkgrey (暗灰色) #a9a9a9169,169,169
darkkhaki (暗黄褐色) #bdb76b189,183,107
darkmagenta (暗洋红色) #8b008b139,0,139
darkolivegreen (暗橄榄绿) #556b2f85,107,47
darkorange (深橙色) #ff8c00255,140,0
darkorchid (暗紫色) #9932cc153,50,204
darkred (暗红色) #8b0000139,0,0
darksalmon (暗肉色) #e9967a233,150,122
darkseagreen (暗海绿色) #8fbc8f143,188,143
darkslateblue (暗石蓝色) #483d8b72,61,139
darkslategray (暗石灰色) #2f4f4f47,79,79
darkslategrey (暗石灰色) #2f4f4f47,79,79
darkturquoise (暗青绿色) #00ced10,206,209
darkviolet (暗紫罗兰色) #9400d3148,0,211
deeppink (深粉红色) #ff1493255,20,147
deepskyblue (深天蓝色) #00bfff0,191,255
dimgray (昏灰色) #696969 105,105,105
dimgrey (昏灰色) #696969 105,105,105
dodgerblue (闪兰色) #1e90ff30,144,255
firebrick (耐火砖色) #b22222178,34,34
floralwhite (花白色) #fffaf0255,250,240
forestgreen (森林绿) #228b2234,139,34
fuchsia (紫红色) #ff00ff255,0,255
gainsboro (淡灰色) #dcdcdc220,220,220
ghostwhite (幽灵白) #f8f8ff248,248,255
gold (金色) #ffd700255,215,0
goldenrod (金菊色) #daa520218,165,32
gray (灰色) #808080 128,128,128
green (绿色) #008000 0,128,0
greenyellow (黄绿色) #adff2f173,255,47
grey (灰色) #808080 128,128,128
honeydew (蜜瓜色) #f0fff0240,255,240
hotpink (亮粉红色) #ff69b4255,105,180
indianred (印度红) #cd5c5c205,92,92
indigo (靛蓝色) #4b008275,0,130
ivory (象牙色) #fffff0255,255,240
khaki (黄褐色) #f0e68c240,230,140
lavender (淡紫色) #e6e6fa230,230,250
lavenderblush (淡紫红) #fff0f5255,240,245
lawngreen (草地绿) #7cfc00124,252,0
lemonchiffon (柠檬绸色) #fffacd255,250,205
lightblue (亮蓝色) #add8e6173,216,230
lightcoral (亮珊瑚色) #f08080240,128,128
lightcyan (亮青色) #e0ffff224,255,255
lightgoldenrodyellow (亮金菊黄) #fafad2250,250,210
lightgray (亮灰色) #d3d3d3211,211,211
lightgreen (亮绿色) #90ee90144,238,144
lightgrey (亮灰色) #d3d3d3211,211,211
lightpink (亮粉红色) #ffb6c1255,182,193
lightsalmon (亮肉色) #ffa07a255,160,122
lightseagreen (亮海绿色) #20b2aa32,178,170
lightskyblue (亮天蓝色) #87cefa135,206,250
lightslategray (亮石灰色) #778899 119,136,153
lightslategrey (亮石灰色) #778899 119,136,153
lightsteelblue (亮钢兰色) #b0c4de176,196,222
lightyellow (亮黄色) #ffffe0255,255,224
lime (酸橙色) #00ff000,255,0
limegreen (橙绿色) #32cd3250,205,50
linen (亚麻色) #faf0e6250,240,230
magenta (洋红色) #ff00ff255,0,255
maroon (栗色) #800000 128,0,0
mediumaquamarine (中碧蓝色) #66cdaa102,205,170
mediumblue (中蓝色) #0000cd0,0,205
mediumorchid (中粉紫色) #ba55d3186,85,211
mediumpurple (中紫色) #9370db147,112,219
mediumseagreen (中海绿色) #3cb37160,179,113
mediumslateblue (中暗蓝色) #7b68ee123,104,238
mediumspringgreen (中春绿色) #00fa9a0,250,154
mediumturquoise (中海湖蓝) #48d1cc72,209,204
mediumvioletred (中紫罗兰红) #c71585199,21,133
midnightblue (午夜蓝) #191970 25,25,112
mintcream (薄荷色) #f5fffa245,255,250
mistyrose (浅玫瑰色) #ffe4e1255,228,225
moccasin (鹿皮色) #ffe4b5255,228,181
navajowhite (纳瓦白) #ffdead255,222,173
navy (海军蓝) #000080 0,0,128
oldlace (老花色) #fdf5e6253,245,230
olive (橄榄色) #808000 128,128,0
olivedrab (草绿色) #6b8e23107,142,35
orange (橙色) #ffa500255,165,0
orangered (橙红色) #ff4500255,69,0
orchid (粉紫色) #da70d6218,112,214
palegoldenrod (苍麒麟色) #eee8aa238,232,170
palegreen (苍绿色) #98fb98152,251,152
paleturquoise (苍松石色) #afeeee175,238,238
palevioletred (苍紫罗兰红) #db7093219,112,147
papayawhip (番木色) #ffefd5255,239,213
peachpuff (桃色) #ffdab9255,218,185
peru (秘鲁色) #cd853f205,133,63
pink (粉红色) #ffc0cb255,192,203
plum (杨梅色) #dda0dd221,160,221
powderblue (粉蓝色) #b0e0e6176,224,230
purple (紫色) #800080 128,0,128
red (红色) #ff0000255,0,0
rosybrown (褐玫瑰红) #bc8f8f188,143,143
royalblue (宝蓝色) #4169e165,105,225
saddlebrown (重褐色) #8b4513139,69,19
salmon (鲜肉色) #fa8072250,128,114
sandybrown (沙褐色) #f4a460244,164,96
seagreen (海绿色) #2e8b5746,139,87
seashell (海贝色) #fff5ee255,245,238
sienna (赭色) #a0522d160,82,45
silver (银色) #c0c0c0192,192,192
skyblue (天蓝色) #87ceeb135,206,235
slateblue (石蓝色) #6a5acd106,90,205
slategray (灰石色) #708090 112,128,144
slategrey (灰石色) #708090 112,128,144
snow (雪白色) #fffafa255,250,250
springgreen (春绿色) #00ff7f0,255,127
steelblue (钢兰色) #4682b470,130,180
tan #d2b48c210,180,140
teal (水鸭色) #008080 0,128,128
thistle (蓟色) #d8bfd8216,191,216
tomato (番茄红) #ff6347255,99,71
turquoise (青绿色) #40e0d064,224,208
violet (紫罗兰色) #ee82ee238,130,238
wheat (浅黄色) #f5deb3245,222,179
white (白色) #ffffff255,255,255
whitesmoke (烟白色) #f5f5f5245,245,245
yellow (黄色) #ffff00255,255,0
yellowgreen (黄绿色) #9acd32154,205,50

4.4. currentColor’ 颜色关键字

CSS1 与 CSS2 将 border-color’ 属性的初始值 定义为 “color’ 属性的值”,但没有相应的关键字。SVG 注意到这一缺失,SVG 1.0 为 ‘fill’、‘stroke’、‘stop-color’、‘flood-color’、‘lighting-color’ 属性引入了 ‘currentColor’ 值。CSS3 将颜色值进一步扩展为包括 ‘currentColor’ 关键字,以便在所有接受 <color> 值的属性中使用,这简化了这些属性在 CSS3 中的定义。

currentColor
color’ 属性的值。‘currentColor’ 关键字的已用值即为 ‘color’ 属性的计算值。如果在 ‘color’ 属性本身上使用 ‘currentColor’,则视为 ‘color: inherit’。

4.5. CSS 系统颜色

4.5.1. CSS2 系统颜色

已废弃。 除可将颜色关键字值分配给文本、背景等之外,CSS2 还允许作者以与用户图形环境集成的方式指定颜色。

对于没有对应值的系统,指定值应映射到最近的系统颜色或默认颜色。请注意,某些 CSS 配置文件可能根本不支持系统颜色。

以下列出颜色相关 CSS 值的附加取值及其一般含义。任意颜色属性均可采用下列名称之一。虽然这些名称在 ASCII 范围内不区分大小写,但建议使用下表所示的混合大小写,以提升可读性。

ActiveBorder
活动窗口边框。
ActiveCaption
活动窗口标题栏。
AppWorkspace
多文档界面的背景颜色。
Background
桌面背景。
ButtonFace
3D 元素因单层外围边框产生的面背景颜色。
ButtonHighlight
3D 元素因单层外围边框产生、面向光源的边框颜色。
ButtonShadow
3D 元素因单层外围边框产生、背离光源的边框颜色。
ButtonText
按钮上的文本。
CaptionText
标题栏、大小框和滚动条箭头框中的文本。
GrayText
灰色(已禁用)文本。如果当前显示驱动不支持纯灰色,则此颜色设为 #000。
Highlight
控件中选定的项目。
HighlightText
控件中选定项目的文本。
InactiveBorder
非活动窗口边框。
InactiveCaption
非活动窗口标题栏。
InactiveCaptionText
非活动标题栏中的文本颜色。
InfoBackground
工具提示控件的背景颜色。
InfoText
工具提示控件的文本颜色。
Menu
菜单背景。
MenuText
菜单中的文本。
Scrollbar
滚动条灰色区域。
ThreeDDarkShadow
因两层同心外围边框产生的 3D 元素,背离光源的两条边框中较暗(通常为外侧)那条的颜色。
ThreeDFace
因两层同心外围边框产生的 3D 元素的面背景颜色。
ThreeDHighlight
因两层同心外围边框产生的 3D 元素,面向光源的两条边框中较亮(通常为外侧)那条的颜色。
ThreeDLightShadow
因两层同心外围边框产生的 3D 元素,面向光源的两条边框中较暗(通常为内侧)那条的颜色。
ThreeDShadow
因两层同心外围边框产生的 3D 元素,背离光源的两条边框中较亮(通常为内侧)那条的颜色。
Window
窗口背景。
WindowFrame
窗口框架。
WindowText
窗口中的文本。

已废弃的示例

例如,要将段落的前景色和背景色设置为用户窗口的前景色和背景色,可写成如下:

p { color: WindowText; background-color: Window }

4.6. 使用颜色的注意事项

虽然颜色可以为文档增添大量信息并提升可读性,但在文档中使用颜色时请参考 W3C 《网页内容可访问性指南》[WCAG20]

5. 简易 α 合成

绘制时,实现必须依据 SVG 11 第 14.2 节 简易 alpha 合成[SVG11])中的规则来处理 alpha。(如果该节中提到的 ‘color-interpolation’ 或 ‘color-rendering’ 属性未实现或不适用,实现应视为它们保持初始值。)

6. (X)HTML 示例样式表

本附录为信息性而非规范性内容。实现可以将此样式表用作 HTML4、XHTML1、XHTML1.1、XHTML Basic 以及其他 XHTML 系列文档的默认样式之一。

html {
	color: black;
	background: white;
}


/* traditional desktop user agent colors for hyperlinks */
:link    { color: blue; }
:visited { color: purple; }

/* default focus outline */
:focus {
	outline: 1px dotted;  /* or 1px dotted invert */
}

7. 配置文件

每个使用 CSS3 Color 的规范必须定义其允许和排除的 CSS3 Color 子集,并说明该子集所有组件的局部含义。

非规范性示例

CSS3 Color 配置文件
规范HTML4
接受基础颜色关键字
RGB 六位十六进制颜色值
排除项color’ 属性
opacity’ 属性
RGB 三位十六进制颜色值和 RGB 功能记法颜色值
RGBA 颜色值
HSL 与 HSLA 颜色值
扩展颜色关键字
currentColor’ 颜色值
CSS2 UI 颜色
transparent’ 颜色值
额外约束无。
CSS3 Color 配置文件
规范CSS 第 1 级
接受color’ 属性
基础颜色关键字
RGB 颜色值
排除项opacity’ 属性
RGBA 颜色值
HSL 与 HSLA 颜色值
扩展颜色关键字
currentColor’ 颜色值
CSS2 UI 颜色
transparent’ 颜色值
额外约束无。
CSS3 Color 配置文件
规范CSS 第 2 级
接受color’ 属性
基础颜色关键字
RGB 颜色值
CSS2 UI 颜色
transparent’ 颜色值
排除项opacity’ 属性
RGBA 颜色值
HSL 与 HSLA 颜色值
扩展颜色关键字
currentColor’ 颜色值
额外约束transparent’ 颜色值对 ‘color’ 属性无效。
orange’ 颜色值(属于扩展颜色关键字)在 CSS 第 2 级修订 1 中被接受。
CSS3 Color 配置文件
规范SVG 1.0 与 1.1
接受color’ 属性
opacity’ 属性
基础颜色关键字
RGB 颜色值
CSS2 UI 颜色
扩展颜色关键字
currentColor’ 颜色值
排除项RGBA 颜色值
HSL 与 HSLA 颜色值
transparent’ 颜色值
额外约束currentColor’ 颜色值对 ‘color’ 属性无效。

8. 测试套件

已开发出一套 CSS Color 模块测试套件,后续可能会补充更多测试。该套件旨在让用户代理验证其对本规范的基本符合性。该套件并非穷尽,也未覆盖所有可能的数值颜色值。测试可在 https://test.csswg.org/harness/suite/css-color-3_dev/ 获取。

9. 未来特性

本节是非规范性的。

由于当时实现兴趣不足,‘@color-profile’ at‑rule(用于指定 ICC 配置文件)、控制这些配置文件渲染意图的机制以及使用这些配置文件的方式(‘color-profile’ 属性)等与颜色管理相关的若干特性已从 CSS Color 3 中移除。

相关特性在 CSS Color 4 与 5 中继续发展;参见 ‘color()’ 函数、‘@color-profile’ at‑rule,以及 ‘rendering-intent’ 描述符。

10. 致谢

感谢 Brad Pettit 编写颜色配置文件并实现它。感谢 Steven Pemberton 撰写 HSL 颜色的介绍。特别感谢 Marc Attinasi、Bert Bos、Joe Clark、fantasai、Patrick Garies、Tony Graham、Ian Hickson、Susan Lesch、Alex LeDonne、Cameron McCormack、Krzysztof Maczyński、Chris Moschini、Chris Murphy、Christoph Päper、David Perrell、Jacob Refstrup、Dave Singer、Jonathan Stanley、Andrew Thompson、Russ Weakley、Etan Wexler、David Woolley、Boris Zbarsky、Steve Zilles、XSL 工作组的 XSL FO 子组,以及所有 www‑style 社区的其他成员。并感谢 Chris Lilley 担任常驻 CSS Color 专家。

11. 更改记录

自 2021 年 8 月 5 日推荐版以来的更改

已进行以下编辑更正

自 2018 年 6 月 19 日推荐版以来的更改

自 2017 年 12 月 5 日候选推荐版以来的更改

自 2011 年 6 月 7 日推荐版以来的更改

本文件与 2011 年 6 月 7 日推荐版的区别在于包含以下更改

有关早期草稿的更改,请参阅之前推荐版的更改以及其中链接的以前版本。

先前对评论的处理

12. 参考文献

12.1. 规范性参考

[COLORIMETRY]
《色度学》第三版。 CIE 15:2004. ISBN 978-3-901906-33-6
[CSS21]
Bert Bos 等。 层叠样式表 2 级修订版 1(CSS 2.1)规范。 2011 年 6 月 7 日。W3C 推荐。URL: https://w3org.cn/TR/2011/REC-CSS2-20110607
[SRGB]
多媒体系统和设备 - 色彩测量与管理 - 第 2‑1 部分:色彩管理 - 默认 RGB 色彩空间 - sRGB。 IEC 61966-2-1 (1999‑10) ISBN: 2-8318-4989-6 - ICS codes: 33.160.60, 37.080 - TC 100 - 51 pp. 经过 Amendment A1:2003 修订。URL: https://webstore.iec.ch/publication/6168
[SVG11]
Erik Dahlström; et al. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 16 August 2011. W3C Recommendation. URL: https://w3org.cn/TR/2011/REC-SVG11-20110816/

12.2. 信息性参考

[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS 基础用户界面模块 第 3 级(CSS3 UI)。 2018 年 6 月 21 日。W3C 推荐。URL: https://w3org.cn/TR/2018/REC-css-ui-3-20180621/
[CSS2]
Bert Bos 等。 层叠样式表,第 2 级(CSS2)规范。 2011 年 6 月 7 日。W3C 推荐。URL: https://w3org.cn/TR/2011/REC-CSS2-20110607
[HTML401]
Dave Raggett; Arnaud Le Hors; Ian Jacobs. HTML 4.01 Specification. 24 December 1999. W3C Recommendation. URL: https://w3org.cn/TR/1999/REC-html401-19991224
[OEB101]
Open eBook(商标)出版结构 1.0.1。 Open eBook Forum(商标)。2001 年 7 月 2 日。URL: https://www.loc.gov/preservation/digital/formats/fdd/fdd000054.shtml
[SVG10]
Jon Ferraiolo. 可伸缩矢量图形(SVG) 1.0 规范。 2001 年 9 月 4 日。W3C 推荐。URL: https://w3org.cn/TR/2001/REC-SVG-20010904
[WCAG20]
Ben Caldwell 等。 网页内容可访问性指南(WCAG) 2.0。 2008 年 12 月 11 日。W3C 推荐。URL: https://w3org.cn/TR/2008/REC-WCAG20-20081211/
[X11COLORS]
Wikipedia X11 颜色名称。 URL: https://en.wikipedia.org/wiki/X11_color_names
[XML10]
C. M. Sperberg‑McQueen 等。 可扩展标记语言(XML) 1.0(第五版)。 2008 年 11 月 26 日。W3C 推荐。URL: https://w3org.cn/TR/2008/REC-xml-20081126/

索引

属性索引

属性 初始值 应用于 继承 百分比
color <color> | inherit 取决于用户代理 不适用
opacity <alphavalue> | inherit 1 不适用