颜色对比
确保文本和交互元素对背景有足够对比供低视力用户。
为什么
颜色对比是文本和背景间亮度差,决定文本对 22 亿低视力人口是否可读。WCAG 1.4.3 要求正常文本对比比 4.5:1、大文本 3:1(AA 级、法律最低)。设计师监视器上优雅的浅灰白按钮对白内障用户不可见,"我监视器上好"的 2:1 比在手机阳光下不可读。对比是最易查的 a11y 问题(是数字)和最易修的(深文本或浅背景),却是最常见违规因设计师在校准监视 器上为美观优化非用户读文本的真实世界条件。
何时使用
每个文本元素、每个交互元素的边框/填充、每个有意义图标。设计、CI(自动)和发布前查。
如何做
1. 用对比工具查每文本/背景对 - 浏览器 DevTools: 查元素 → Color → 点对比比 - axe-core: CI 自动检查(抓大多违规) - WebAIM Contrast Checker: 贴 hex 值快速查 - Stark 或 Contrast(Figma/Sketch 插件): 设计工具中查 2. 理解 WCAG 阈值 - 正常文本(< 18pt 或 < 14pt 粗): 4.5:1 最低(AA)、7:1(AAA) - 大文本(>= 18pt 或 >= 14pt 粗): 3:1 最低(AA)、4.5:1(AAA) - UI 组件(按钮、输入、图标): 对背景 3:1 - 禁用元素: 豁免(但确保看起来禁用非仅低对比) 3. 修低对比对 - 深文本色(最常见修——#666 → #333) - 浅背景(白而非浅灰) - 增文本大小(从 4.5:1 移到 3:1 阈值) - 加边框或阴影分元素和背景 4. 查非文本元素 - 图标按钮: 图标对背景须 3:1 对比 - 表单字段边框: 边框须 3:1 对比 - 图表和数据可视化: 每数据系列须可区分(非仅靠颜色) - 链接: 与非链接文本可区分(非仅靠颜色——下划线或粗细) 5. 真实世界条件测 - 亮阳光下看页(或增屏幕亮度模拟) - 高对比模式看页(Windows: Alt+Shift+PrintScreen) - 色盲模拟器看页(Stark、Coblis)——不仅靠颜色
示例
// DevTools 中查对比
// 1. 查元素
// 2. Styles 面板点颜色色板
// 3. DevTools 显对比比和 AA、AAA 过/不过
// CSS: 修低对比文本
// 前: #999 on #fff = 2.85:1(不过 AA)
.muted-text { color: #999; }
// 后: #666 on #fff = 5.74:1(过 AA)
.muted-text { color: #666; }
// 或: #767676 on #fff = 4.54:1(刚过 AA——GitHub 灰)
.muted-text { color: #767676; }
// 链接: 不仅靠颜色
// 坏: 链接仅不同色,色盲用户不可区分
a { color: #0066cc; } /* 蓝,无下划线 */
// 好: 链接有下划线(或其他非颜色指示)
a { color: #0066cc; text-decoration: underline; }
// 图表: 不仅靠颜色区分系列
// 坏: 红绿线(红绿色盲不可区分)
<line stroke="red" />
<line stroke="green" />
// 好: 不同色 + 不同模式(实、虚)
<line stroke="red" stroke-dasharray="0" />
<line stroke="green" stroke-dasharray="4" />
// 或直接每线加标签
// CI: axe-core 自动查对比
test("无对比违规", async ({ page }) => {
const results = await new AxeBuilder({ page })
.withTags(["wcag2aa"])
.analyze();
const contrastIssues = results.violations.filter(
v => v.id === "color-contrast"
);
expect(contrastIssues).toEqual([]);
});常见问题
- ⚠用设计师选的灰(#999)做静音文本因"看起来对"——2.85:1 比不过 WCAG AA,但团队不查因校准监视器上看起来好。
- ⚠仅靠颜色区分链接和正文——8% 红绿色盲男不能分蓝链接和黑文本,链接对他们不可见。
- ⚠用红绿表错误和成功——最常见仅色编码,色盲用户最常见无障碍障碍(两者都见同棕)。
- ⚠设计工具默认白背景查对比,但应用有暗模式或彩色背景同文本色不过——对比须每主题查。
最佳实践
- ✓CI 中跑 axe-core 自动抓对比违规——查每文本/背景对违规坏构建,防最常见 a11y 问题发。
- ✓所有文本用 4.5:1 对比比(非仅 WCAG 最低)——额外余量考虑屏幕眩光、老化显示和用户读文本的真实世界条件。
- ✓永不仅靠颜色传意——颜色配文本标签、图标、模式或下划线,使不能区分颜色的用户保留意义。
- ✓每主题(亮、暗、高对比)查对比——亮模式过的文本色暗模式可不过,每主题须跑检查。