设计令牌颜色模块 2025.10

最终社区组报告

本版本:
https://www.w3.org/community/reports/design-tokens/2025.10/
最新发布版本:
https://www.designtokens.org/TR/2025.10/color/
编辑:
Ayesha Mazrana (Mazumdar)
Kathleen McMahon
Adekunle Oduye
Matthew Ström-Awn
反馈:
GitHub design-tokens/community-group (拉取请求, 新建议, 开放议题)

摘要

本文档描述了设计令牌颜色值和不透明度的技术规范。

本文档状态

本规范由 Design Tokens 社区组发布。它不是 W3C 标准,也没有列入 W3C 标准进程。 请注意,根据 W3C 社区最终规范协议 (FSA) ,还适用其他条件。 了解更多关于 W3C 社区及业务组的信息。

本节描述了本文件在发布时的状态。其他文档可能会取代本文件。W3C 社区组报告的当前列表及本报告的最新修订版可在 W3C 社区组报告索引页面找到: https://www.w3.org/community/reports/

本文档由 DTCG 以 候选推荐(Candidate Recommendation) 的形式发布,符合 W3C 流程中定义的标准。对本草案的贡献受 社区贡献者许可协议(CLA)的约束,具体要求见 W3C 社区组流程

虽然这不是 W3C 推荐标准,但该分类旨在明确:经过充分的共识建设后,本规范面向实现使用。

本规范被视为稳定。后续更新将通过更新的规范发布。

关于本规范的讨论建议优先使用 GitHub Issues

1. 符合性

本规范中标记为非规范性的部分,以及所有编写指南、图示、示例和注释,均为非规范性内容。除此以外的所有内容均为规范性内容。

本文档中的关键词 MAYMUSTMUST NOT 的解释方式与 BCP 14 [RFC2119] [RFC8174] 一致,并且仅当这些词以全大写形式,如此处所示,出现时才应用上述解释方式。

2. 引言

2.1 颜色令牌

颜色令牌可用于表示不同色彩空间下的颜色。在令牌中表示的颜色可以通过转换工具被转换为其它色彩空间。

一般来说,本模块参考了CSS Color Module Level 4中关于概念和术语的定义。CSS Color Module Level 4 是 W3C 工作草案,尚未最终定稿,内容可能会变更,也可能不是所有浏览器或平台都支持。

编辑者注: 为什么选用 CSS Color Module Level 4?

3. 颜色术语

本节概述了规范中所用术语,并说明其与颜色科学色度学的关系。

色彩空间

色彩空间是一套对颜色进行特定组织的体系,有助于在物理或数字环境中实现颜色的再现。它定义了可以表示和操作的颜色范围。

颜色模型

颜色模型是在特定色彩空间内对颜色的数学表达。它定义了如何以数值方式(通常为分量)来表示颜色。

色域

色域表示在某一特定色彩空间中能够表示的所有颜色的完整范围。它界定了该空间可实现的色彩再现极限。

分量

分量指在特定色彩空间中定义颜色的单一数值。例如,在 RGB 色彩空间中,分量为红、绿、蓝。

色相

色相是指颜色的属性,使其能被归类为红色、绿色、蓝色等。在许多色彩空间中,色相以色轮上的角度表示。不同色彩空间可能会将颜色定位在色轮的不同位置。

饱和度

饱和度是指颜色相对于自身亮度的鲜艳程度。它描述了颜色中灰色的多少。完全饱和的颜色无灰色,去饱和的颜色则更多偏向灰色。饱和度与色度明度密切相关,尤其是在 HSL 或 HSV 等模型中。颜色可以高度饱和,但根据其明度,视觉上也可能很亮或很暗。

明度

明度是颜色的感知亮度,描述了颜色看起来有多亮或多暗。

色度

色度指的是颜色相对于同样受光照明的白色的鲜艳程度。它衡量了颜色的纯度或强度。在 CIE LCH 颜色模型(明度、色度、色相)中,色度与明度无关,用以描述颜色在色轴方向上离中性灰的距离。

Alpha

Alpha 是表示颜色透明度的一个分量。它定义了颜色的不透明或透明程度,最小值(通常为 0)表示完全透明,最大值(通常为 1)表示完全不透明。

4. 颜色类型

表示一种颜色。

4.1 格式

对于颜色令牌,$type 属性 MUST 必须设置为字符串 color

接着可以使用 $value 属性来指定颜色的详细信息,$value 对象包含以下属性:

4.1.1 none 关键字

在某些色彩空间中指定颜色时,数值 0 可能存在歧义。例如,在 HSL 色彩空间中,色相0 的颜色是红色;尽管单个颜色如 hsl(0, 0, 50) 并不会呈现为红色,但在与其他颜色进行插值时,它可能被视为完全去饱和的红色。因此,在某些色彩空间中,使用 0 并不足以表示某一分量没有取值。

CSS Color Module Level 4 引入了 none 关键字,用于表示某个分量缺失或不适用。例如,在 HSL 色彩空间中,none 可用于表示该颜色没有角度值;其色相值为 none 的颜色 MAY 可能与色相角度为 0 的颜色呈现不同效果,或在插值时产生不同结果。

4.1.1.1 使用 none 关键字

none 关键字 MAY 可以在 components 数组中使用,以表示某个分量不适用或未指定。

与下例(将色相指定为 0)进行对比:

虽然两个示例都会呈现为白色,但第一个示例更明确地表明色相不适用。这在颜色插值或颜色混合时很重要,使用分量为 0none 的颜色可能会得到不同结果。

4.2 支持的色彩空间

以下值可用于 colorSpace 属性。components 数组会随色彩空间而变化。

编辑者注: 表达范围的语法
色彩空间 取值
sRGB "srgb" Red [0 - 1]
Green [0 - 1]
Blue [0 - 1]
sRGB 线性 "srgb-linear" Red [0 - 1]
Green [0 - 1]
Blue [0 - 1]
HSL "hsl" Hue [0 - 360)
Saturation [0 - 100]
Lightness [0 - 100]
HWB "hwb" Hue [0 - 360)
Whiteness [0 - 100]
Blackness [0 - 100]
CIELAB "lab" Lightness [0 - 100]
A [-Infinity - Infinity]*
B [-Infinity - Infinity]*
LCH "lch" Lightness [0 - 100]
Chroma [0 - Infinity]**
Hue [0 - 360)
OKLAB "oklab" Lightness [0 - 1]
A [-Infinity - Infinity]
B [-Infinity - Infinity]
OKLCH "oklch" Lightness [0 - 1]
Chroma [0 - Infinity]
Hue [0 - 360)
Display P3 "display-p3" Red [0 - 1]
Green [0 - 1]
Blue [0 - 1]
A98 RGB "a98-rgb" Red [0 - 1]
Green [0 - 1]
Blue [0 - 1]
ProPhoto RGB "prophoto-rgb" Red [0 - 1]
Green [0 - 1]
Blue [0 - 1]
Rec 2020 "rec2020" Red [0 - 1]
Green [0 - 1]
Blue [0 - 1]
XYZ-D65 "xyz-d65" X [0 - 1]
Y [0 - 1]
Z [0 - 1]
XYZ-D50 "xyz-d50" X [0 - 1]
Y [0 - 1]
Z [0 - 1]
* 在 CIELAB 中,A 和 B 理论上不受限,但实际不超过 -160 到 160
** 在 LCH 中,C 理论上不受限,但实际不超过 230
在 OKLAB 中,A 和 B 理论上不受限,但实际不超过 -0.5 到 0.5
在 OKLCH 中,Chroma 理论上不受限,但实际不超过 0.5
编辑者注: 示例中的精度
编辑者注: 示例中的可选值
编辑者注: 与 CSS Color Module 4 的一致性

4.2.1 sRGB

在 CSS Color Module 4 之前,sRGB 是所有 CSS 颜色的标准色彩空间。它是 web 上使用最广泛的色彩空间,也是大多数设计工具的默认色彩空间。

4.2.1.1 分量

[Red, Green, Blue]

  • Red:介于 01 之间的数字,表示颜色的红色分量。
  • Green:介于 01 之间的数字,表示颜色的绿色分量。
  • Blue:介于 01 之间的数字,表示颜色的蓝色分量。

关于 sRGB 色彩空间的更多信息,参见多媒体系统与设备——颜色测量与管理——第 2-1 部分:颜色管理——默认 RGB 色彩空间——sRGB

4.2.2 sRGB 线性

sRGB 线性是 sRGB 的线性化版本。一些设计工具使用它来表示线性色彩空间中的颜色。

4.2.2.1 分量

[Red, Green, Blue]

  • Red:介于 01 之间的数字,表示颜色的红色分量。
  • Green:介于 01 之间的数字,表示颜色的绿色分量。
  • Blue:介于 01 之间的数字,表示颜色的蓝色分量。

关于 sRGB 线性色彩空间的更多信息,参见多媒体系统与设备——颜色测量与管理——第 2-1 部分:颜色管理——默认 RGB 色彩空间——sRGB

4.2.3 HSL

HSL 是一种颜色模型,它是 sRGB 的极坐标变换,最早在 CSS Color Level 3 中得到支持。

4.2.3.1 分量

[Hue, Saturation, Lightness]

  • Hue:从 0 到(不包含)360 的数字,表示颜色在色轮上的色相角度。
  • Saturation:介于 0100 之间的数字,表示颜色饱和度的百分比。
  • Lightness:介于 0100 之间的数字,表示明度的百分比。

关于 HSL 色彩空间的更多信息,参见HSL: light vs saturation

4.2.4 HWB

另一种颜色模型,也是 sRGB 的极坐标变换。

4.2.4.1 分量

[Hue, Whiteness, Blackness]

  • Hue:从 0 到(不包含)360 的数字,表示颜色在色轮上的角度。
  • Whiteness:介于 0100 之间的数字,表示颜色中的白色百分比。
  • Blackness:介于 0100 之间的数字,表示颜色中的黑色百分比。

关于 HWB 色彩空间的更多信息,参见HWB — A More Intuitive Hue-Based Color Model

4.2.5 CIELAB

CIELAB 是一种旨在感知上均匀的色彩空间。

4.2.5.1 分量

[L, A, B]

  • L:介于 0100 之间的数字,表示颜色的明度百分比。
  • A:有符号数字,表示颜色的绿-红轴。
  • B:有符号数字,表示颜色的蓝-黄轴。

A 和 B 理论上不受限,但实际不超过 -160 到 160。

关于 CIELAB 色彩空间的更多信息,参见ISO/CIE 11664-4:2019(E): Colorimetry — 第 4 部分:CIE 1976 L*a*b* 颜色空间

4.2.6 LCH

LCH 是 CIELAB 的柱坐标表示。

4.2.6.1 分量

[L, C, Hue]

  • L:介于 0100 之间的数字,表示颜色的明度百分比。
  • C:表示颜色色度的数字。
  • Hue:从 0 到(不包含)360 的数字,表示颜色在色轮上的角度。

C 的最小值为 0,表示中性颜色(灰色),其最大值理论上不受限,但实际不超过 230。

关于 LCH 色彩空间的更多信息,参见CSS Color Module Level 4 中的 CIELAB 与 LCH 章节

4.2.7 OKLAB

OKLAB 是一种感知上均匀的色彩空间,设计上比 CIELAB 更准确。

4.2.7.1 分量

[L, A, B]

  • L:介于 01 之间的数字,表示颜色的明度。
  • A:有符号数字,表示颜色的绿-红轴。
  • B:有符号数字,表示颜色的蓝-黄轴。

与 CIELAB 类似,A 和 B 理论上不受限,但实际不超过 -0.5 到 0.5。

关于 OKLAB 色彩空间的更多信息,参见OKLAB: A Perceptually Uniform Color Space

4.2.8 OKLCH

OKLCH 是 OKLAB 的柱坐标颜色模型

4.2.8.1 分量

[L, Chroma, Hue]

  • L:介于 01 之间的数字,表示颜色的明度。
  • Chroma:表示颜色色度的数字。
  • Hue:从 0 到(不包含)360 的数字,表示颜色在色轮上的角度。

与 LCH 类似,Chroma 的最小值为 0,表示中性颜色(灰色),其最大值理论上不受限,但实际不超过 0.5。

关于 OKLCH 色彩空间的更多信息,参见OKLAB: A Perceptually Uniform Color Space

4.2.9 Display P3

Display P3 是一种色彩空间,用于具备宽色的显示设备。它基于数字影院中使用的 P3 色彩空间。

4.2.9.1 分量

[Red, Green, Blue]

  • Red:介于 01 之间的数字,表示颜色的红色分量。
  • Green:介于 01 之间的数字,表示颜色的绿色分量。
  • Blue:介于 01 之间的数字,表示颜色的蓝色分量。

关于 Display P3 色彩空间的更多信息,参见Display P3 的定义

4.2.10 A98 RGB

A98 RGB 是一种用于宽色域显示设备的色彩空间,基于 Adobe RGB 色彩空间。

4.2.10.1 分量

[Red, Green, Blue]

  • Red:介于 01 之间的数字,表示颜色的红色分量。
  • Green:介于 01 之间的数字,表示颜色的绿色分量。
  • Blue:介于 01 之间的数字,表示颜色的蓝色分量。

要了解更多 A98 色彩空间的信息,参见维基百科上的 Adobe RGB 色彩空间条目

4.2.11 ProPhoto RGB

ProPhoto RGB 是一种用于宽色域显示设备的色彩空间,基于 ProPhoto RGB 色彩空间。

4.2.11.1 分量

[Red, Green, Blue]

  • Red:介于 01 之间的数字,表示颜色的红色分量。
  • Green:介于 01 之间的数字,表示颜色的绿色分量。
  • Blue:介于 01 之间的数字,表示颜色的蓝色分量。

关于 ProPhoto RGB 色彩空间的更多信息,参见Design and Optimization of the ProPhoto RGB Color Encodings

4.2.12 Rec 2020

Rec 2020 是一种用于宽色域显示设备的色彩空间,基于 Rec 2020 色彩空间。

4.2.12.1 分量

[Red, Green, Blue]

  • Red:介于 01 之间的数字,表示颜色的红色分量。
  • Green:介于 01 之间的数字,表示颜色的绿色分量。
  • Blue:介于 01 之间的数字,表示颜色的蓝色分量。

关于 Rec 2020 色彩空间的更多信息,参见Recommendation ITU-R BT.2020-2:超高清电视系统的参数值(用于制作与国际节目交换)

4.2.13 XYZ-D65

XYZ-D65 是一种能够表示人眼可感知全部颜色的色彩空间。它是一个基础色彩空间——所有其它色彩空间都可以转换到 XYZ 或从 XYZ 转换而来。它基于 CIE 1931 色彩空间,并使用 D65 光源。XYZ 在设计工具中并不常用,但在颜色转换中非常有用。

4.2.13.1 分量

[X, Y, Z]

  • X:介于 01 之间的数字,表示颜色的 X 分量。
  • Y:介于 01 之间的数字,表示颜色的 Y 分量。
  • Z:介于 01 之间的数字,表示颜色的 Z 分量。

关于 XYZ-D65 色彩空间的更多信息,参见Colorimetry(第四版),CIE 015:2018

4.2.14 XYZ-D50

XYZ-D50 与 XYZ-D65 类似,但使用 D50 光源。

4.2.14.1 分量

[X, Y, Z]

  • X:介于 01 之间的数字,表示颜色的 X 分量。
  • Y:介于 01 之间的数字,表示颜色的 Y 分量。
  • Z:介于 01 之间的数字,表示颜色的 Z 分量。

关于 XYZ-D50 色彩空间的更多信息,参见Colorimetry(第四版),CIE 015:2018

4.3 未来色彩空间支持

本规范的未来版本可能会根据设计工具的采用与支持情况,添加对额外色彩空间的支持。

5. 色域映射

本节为非规范性内容。

色域映射是将颜色从一种 颜色空间 转换到另一种的过程。

当源颜色空间的色域比目标颜色空间大时,需要进行色域映射。这种情况会在将颜色从宽色域颜色空间(例如 Display-P3)转换为较小色域的颜色空间(例如 sRGB)时发生。色域映射确保颜色在目标颜色空间中被准确表示,即使某些颜色不能被精确表示。

在进行颜色转换时,翻译工具 MAY 可根据用例使用最适合的色域映射算法。例如,如果目标是保留颜色的外观,可以使用感知(perceptual)色域映射算法。如果目标是保留精确的颜色值,可以使用饱和度(saturation)或相对色度(relative colorimetric)色域映射算法。

令牌的作者应当注意,色域映射算法的选择会显著影响目标颜色空间中颜色的外观。如果需要在颜色空间之间转换颜色,重要的是验证翻译工具的输出,以确保颜色被准确且一致地表示。

6. 插值

本节为非规范性内容。

在许多情况下,颜色可以通过插值或混合来创建新颜色。例如,在创建渐变时,颜色通常在两个或多个关键颜色之间进行插值。

插值可以在不同的 颜色空间 中进行,所选颜色空间会影响结果颜色的外观。翻译工具 MAY 可根据颜色空间和所需效果使用不同的插值方法。作者应注意在不同颜色空间中插值的含义,并验证插值得到的颜色以确保它们满足设计需求。

7. 令牌命名

本节为非规范性内容。

7.1 分类

本规范中将继续参考的设计令牌有3个主要类别。

7.1.1 基础

基础令牌是最低级别的令牌。

7.1.2 别名

设计令牌的值 MAY 可以是对另一个令牌的 引用。相同的值 MAY 可以有多个名称或别名。

7.1.3 组件

组件特定的令牌在组件级别提供设计决策,并有助于在令牌架构中实现关注点分离。

7.2 命名策略

在设计令牌命名方面有许多选择,尤其是颜色类型令牌。我们识别出两种最常见的实现方式:描述性(descriptive)和数字式(numerical)

7.2.1 基础令牌

对于 基础令牌,以下是它们在每个版本中可能的表示方式:

7.2.1.1 描述性

描述性名称通常更具情感性和人性化,因为它们通常与人们接触的具象事物相关,例如草或西瓜。

优点 缺点
对某些人更易识别,且可用于区分品牌颜色与产品颜色 更难判断颜色的尺度(例如:哪些更浅或更暗?它们如何配对?)
非英语使用者可能不易识别名称。对于跨语言团队,这可能不是一个好选择
7.2.1.2 数字式
7.2.1.2.1 有序刻度

数字令牌通常遵循某种刻度,以帮助区分颜色的进展。例如,在使用有序刻度时,color.blue.500 可能是基础颜色,其中最浅的颜色值为 color.blue.100,最暗的值可能是 color.blue.900,这些值之间按100的增量排列。我们建议不要使用连续编号(例如:1、2、3、4),以便在将来需要在两个现有颜色之间插入新的颜色时具有可扩展性。

数字令牌名称也可以在需要时提供更高的细化。例如,在创建中性调色板令牌(例如灰色)时,最浅的值可能以25为增量递增,而随后以100为增量。

7.2.1.2.2 有界刻度

数字令牌也可以通过 有界刻度 来命名。这些令牌使用基于实际颜色的区分值,例如在 HSL 中使用亮度值来区分色调的深浅。

7.2.1.2.3 计算机生成的刻度

令牌名称 MAY 也可以由工具生成,用户指定基础名称,工具会根据基础值的变化附加刻度编号。

优点 缺点
便于在不同令牌之间建立映射以进行颜色对比。例如,所有 100-400 的令牌可与 500-900 的令牌配对,以创建可访问的颜色组合。 不易记忆,令牌之间的差异不太明显
如果使用有界刻度,令牌名称可以指示底层值的一些信息

7.2.2 别名令牌

对于 别名令牌,我们建议通过在名称中优先使用类别 + 属性来对具有相似用途的令牌进行分组。例如,所有背景颜色别名令牌通常会以 color.background.XXX 开头。

我们建议避免使用缩写。例如,使用 “background” 而不是 “bg”,以提高可读性。

下面是别名令牌可能的表示方式:

颜色别名令牌也可以按概念分组,例如:

7.2.3 组件令牌

组件特定的名称应以所支持的组件开头,并与组件代码相邻放置。它们通常引用别名令牌,有助于在保持关注点分离的同时在组件之间使用一致的样式。

A. 问题汇总

本规范未列出任何问题。

B. 参考文献

B.1 规范性引用

[CIELAB]
ISO/CIE 11664-4:2019(E):色度学—第4部分:CIE 1976 L*a*b* 色彩空间。 国际标准化组织(ISO)、国际照明委员会(CIE)。2019年。已发布。URL: http://cie.co.at/publications/colorimetry-part-4-cie-1976-lab-colour-space-1
[COLORIMETRY]
色度学 第四版 CIE 015:2018。 CIE。2018年。URL: http://www.cie.co.at/publications/colorimetry-4th-edition
[css-color-4]
CSS颜色模块4级。Chris Lilley;Tab Atkins Jr.;Lea Verou。W3C。2025年4月24日。CRD。URL: https://www.w3.org/TR/css-color-4/
[hsl]
HSL:亮度与饱和度。Steven Pemberton。2009年11月19日。URL: http://www.cwi.nl/~steven/css/hsl.html
[Rec.2020]
ITU-R BT.2020-2建议:超高清电视系统制作与国际节目交换参数值 。ITU。2015年10月。URL: http://www.itu.int/rec/R-REC-BT.2020/en
[RFC2119]
RFC中用于指示要求等级的关键词。S. Bradner。IETF。1997年3月。最佳当前实践。URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119关键词中大小写歧义。B. Leiba。IETF。2017年5月。最佳当前实践。URL: https://www.rfc-editor.org/rfc/rfc8174
[srgb]
多媒体系统及设备 - 颜色测量与管理 - 第2-1部分:色彩管理 - 默认RGB颜色空间 - sRGB。IEC。URL: https://webstore.iec.ch/publication/6169