无障碍颜色对比度:为设计师解读的 WCAG 指南
无障碍颜色对比度:为设计师解读的 WCAG 指南
颜色对比度是 Web 无障碍性最重要的方面之一。它直接关系到用户能否阅读你的内容、浏览你的界面并完成任务。然而,对比度失效仍然是 Web 上最常见的无障碍问题之一——通常是因为设计师选择了在自己屏幕上看起来不错的颜色,却没有验证对比度比例。
本指南解释了你需要了解的关于 WCAG 颜色对比度要求的一切、如何满足这些要求,以及如何在不牺牲视觉质量的情况下设计无障碍界面。
什么是颜色对比度比例?
颜色对比度是对两种颜色感知亮度差异的度量——通常是前景(文字)和背景。对比度以比例表示,范围从 1:1(颜色相同,文字不可见)到 21:1(白色背景上的黑色文字,这是可能的最大值)。
对比度比例使用相对亮度计算,相对亮度考虑到了人眼如何感知不同波长的光。公式为:
Contrast Ratio = (L1 + 0.05) / (L2 + 0.05)
其中 L1 是较亮颜色的相对亮度,L2 是较暗颜色的相对亮度。人眼对绿光比红光或蓝光更敏感,因此亮度计算会对不同通道进行加权。
你不需要手动计算这个。 每个对比度检查工具,包括我们的颜色转换器,都能即时完成。
WCAG 对比度要求
Web 内容无障碍指南(WCAG)定义了三个合规级别:A、AA 和 AAA。颜色对比度要求适用于 AA 和 AAA 级别。
WCAG AA 级别(推荐的最低标准)
AA 是大多数网站的最低标准,在许多司法管辖区是法律要求(包括《欧洲无障碍法案》以及美国、加拿大和澳大利亚的无障碍法规)。
| 文字类别 | 最低比例 | 白底合规灰色示例 |
|---------------|--------------|-------------------------------------|
| 常规文字(18px 以下 / 14px 粗体以下) | 4.5:1 | 白底 #767676 |
| 大号文字(18px+ 粗体或 24px+ 常规) | 3:1 | 白底 #9A9A9A |
| UI 组件(边框、图标、表单字段) | 3:1 | 组件边框、焦点指示器 |
| 非装饰性图形 | 3:1 | 图表、信息图、图标 |
WCAG AAA 级别(增强)
AAA 是更高的标准,提供更好的可读性,特别是对于低视力或有对比度敏感问题的用户。
| 文字类别 | 最低比例 | 白底合规灰色示例 |
|---------------|--------------|-------------------------------------|
| 常规文字 | 7:1 | 白底 #595959 |
| 大号文字 | 4.5:1 | 白底 #777777 |
大多数法规不要求 AAA 合规,但推荐为服务老年人或视力受损用户的网站使用。
这些要求涵盖什么
WCAG 对比度要求适用于:
- 文字 — 所有正文、标题、标签、说明文字和链接文字
- 图片中的文字 — 作为图片一部分的文字(装饰性文字除外)
- UI 组件 — 按钮、表单字段、滑块、切换开关及其边框
- 图标 — 传达信息的基本图标(非装饰性的)
- 焦点指示器 — 键盘焦点轮廓与相邻背景的对比度必须达到 3:1
这些要求不涵盖什么
- 徽标 — 作为品牌徽标或公司名称一部分的文字
- 装饰元素 — 纯装饰性的、没有功能用途的图片
- 非活动 UI — 禁用的按钮或表单控件(不过它们仍必须是可感知的)
- 感官文字 — 作为背景图片一部分的文字,且该文字并非必需
常见的对比度失效及其修复方法
1. 浅灰色文字
白色背景上的浅灰色文字是迄今为止最常见的对比度失效。白底 #CCCCCC 这样的灰色对比度比例只有 1.6:1——远低于 4.5:1 的最低标准。
修复方法: 加深你的灰色文字。对于白色背景上的正文,目标至少为 #595959(AAA 合规)。即使是 #767676(14px 文字的 AA 最低标准)也比大多数"微妙的"灰色选择明显更深。
2. 品牌色用作正文
品牌色用作文字时往往太浅。白底中蓝色 #3366CC 的比例约为 3.5:1——低于 4.5:1 的标准。
修复方法: 将品牌色保留给标题和点缀。使用接近黑色(#1A1A1A 到 #333333)作为正文。检查任何彩色文字是否达到该比例。
3. 仅用颜色区分链接
仅通过颜色与正文区分的链接不符合 WCAG 成功标准 1.4.1(颜色的使用)。色盲用户可能感知不到这种差异。
修复方法: 始终为链接提供非颜色的指示器。常见方法:
- 链接加下划线(最稳妥的解决方案)
- 添加图标(箭头或外部链接符号)
- 为行内链接使用粗体字重
- 提供背景高亮
4. 背景图片上的文字
放在照片或渐变上的文字很少在整个图片上都有足够的对比度。
修复方法:
- 在图片和文字之间添加半透明覆盖层
- 使用文字阴影实现微妙的轮廓效果
- 将文字放在纯色盒状覆盖层中
- 确保可能出现在文字后面的图片的任何部分都达到最低比例
5. 低对比度的占位符文字
白底 #BDBDBD(1.9:1)这样的表单占位符很常见,但不符合对比度要求。
修复方法: 将占位符加深到至少 #757575(4.6:1)。更好的做法是使用标签而不是占位符——标签始终可见,用户开始输入时也不会消失。
测试颜色对比度
自动化工具
- 浏览器 DevTools — Chrome 和 Firefox DevTools 内置对比度检查功能。检查一个元素,在"样式"或"无障碍"面板中查看对比度比例。
- 在线对比度检查器 — 输入两种颜色即可获得 AA 和 AAA 的即时通过/失败状态。
- 设计工具插件 — Stark、A11y 和 Contrast 可用于 Figma、Sketch 和 Adobe XD。这些工具直接在设计文件中检查对比度。
- Lighthouse — Google 的 Lighthouse 审计会自动报告对比度失效。
手动测试
自动化工具只能检查文字对比度。要进行完整的无障碍审查:
- 关闭显示器 — 你能区分所有界面元素吗?
- 使用灰度滤镜 — 没有颜色,信息还能正确传达吗?
- 使用色盲模拟器测试 — 像 Colorblindly(Chrome 扩展)这样的工具可以展示你的网站在各类色觉缺陷用户眼中的样子。
- 在直射阳光下测试 — 高环境光会降低感知到的对比度。
为色盲进行设计
大约每 12 名男性中有 1 人(8%)和每 200 名女性中有 1 人(0.5%)患有某种形式的色觉缺陷。最常见的类型是:
- 绿色盲(绿色弱视,男性中占 6%)— 难以区分红色和绿色
- 红色盲(红色弱视,男性中占 2%)— 红色看起来更深,与绿色混淆
- 蓝色盲(蓝色弱视,罕见)— 难以区分蓝色和黄色
设计策略
-
切勿只依赖颜色 — 任何通过颜色传达的信息(错误状态、状态指示器、图表类别)也必须通过文字、图标、图案或位置传达。
-
避免有问题的组合 — 红/绿、蓝/紫、绿/棕和绿/蓝是最常被混淆的颜色对。
-
使用图案和纹理 — 在图表中,除了颜色之外,还要使用虚线、斜线填充和不同的形状。
-
直接添加标签 — 在数据可视化中,直接标注数据点,而不是依赖颜色编码的图例。
-
使用模拟器测试 — 每个设计在发布前都应通过绿色盲和红色盲模拟器进行测试。
构建无障碍颜色系统
第 1 步:选择无障碍的基础颜色
从天然具有良好对比度的颜色开始。深蓝色、深绿色和浓郁红色在恰当搭配时都可以成为无障碍的基础颜色。
第 2 步:生成合规的梯度
创建一个明度梯度,使每一步与较浅和较深的相邻色都保持足够的对比度。OKLCH 非常适合这个用途,因为它的明度通道在感知上是均匀的:
--text-primary: oklch(10% 0.01 0); /* 接近黑色,白底对比度约 19:1 */
--text-secondary: oklch(35% 0.02 0); /* 深灰色,白底对比度约 9:1 */
--text-muted: oklch(45% 0.02 0); /* 中灰色,白底对比度约 5.5:1 */
--text-disabled: oklch(60% 0.02 0); /* 浅灰色,白底对比度约 3:1 */
第 3 步:验证每一种组合
设计系统中每一对前景-背景组合都必须经过验证:
- 表面上的主要文字 — 最低 4.5:1(推荐 7:1)
- 表面上的次要文字 — 最低 4.5:1
- 表面上的弱化文字 — 最低 3:1(仅用于非必需文字)
- 交互元素 — 状态最低 3:1
- 焦点指示器 — 最低 3:1
给开发者的实用清单
- [ ] 所有正文的对比度比例达到或超过 4.5:1
- [ ] 所有大号文字的对比度比例达到或超过 3:1
- [ ] 链接有非颜色的指示器(下划线、图标或字重变化)
- [ ] 表单输入有可见的边框或背景(不仅仅是占位符文字)
- [ ] 焦点指示器与相邻背景的对比度达到 3:1
- [ ] 错误状态将颜色与文字或图标结合使用
- [ ] 图表和图形除了颜色之外还使用图案或直接标签
- [ ] 占位符文字达到 4.5:1 的最低标准
- [ ] 禁用元素在视觉上可区分但仍可感知
- [ ] 设计已使用色盲模拟器进行测试
结论
无障碍颜色对比度不是可选项——它是包容性 Web 设计的基本要求。满足 WCAG AA 标准可以让视力受损的用户访问你的内容,为每个人提高可读性,并且往往会带来更干净、更有目的性的设计。从在流程中加入对比度检查开始,将颜色作为其他视觉指示器的补充而非替代,并始终通过无障碍的视角测试你的设计。
使用我们内置对比度检查功能的免费在线颜色转换器来对照 WCAG AA 和 AAA 标准验证你的颜色组合。