将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
网络访问( WCAG 2 AA). 使接口通过构建符合 WCAG 2 级别 AA是一项面向实际任务的技能,主要用于访问设计系统, 而不是在之后对其进行审计;A 颜色、 文本样式或 o. 组件为 e。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
通过在设计系统中内建可访问性,而非事后审计,使界面符合 WCAG 2 AA 级标准。一个颜色、文本样式或组件,若在进入系统时已满足 AA 级要求,则其将自动适配所有使用它的页面;反之,若不满足,则会在所有使用它的页面上同时成为可访问性缺陷。
合规目标:WCAG 2.2 AA 级(快速参考指南)。
修复一个不合规的 Token,即可修复所有依赖它的组件;而修复一个不合规的页面,仅解决该页面的问题。请自上而下推进工作。
切勿凭肉眼估算对比度。阈值要求(依据 WCAG 2.2)如下:
| 渲染内容 | 最低对比度 | 对应成功标准 |
|---|---|---|
| 常规文本(字号 < 24px,或加粗文本 < 18.66px) | 4.5:1 | 1.4.3 |
| 大号文本(字号 ≥ 24px,或加粗文本 ≥ 18.66px) | 3:1 | 1.4.3 |
| 具有语义的非文本元素(图标、图表标记、输入框边框、焦点指示器) | 3:1 | 1.4.11 |
| 禁用控件、纯装饰性元素、Logo | 豁免 | — |
运行内置的对比度校验脚本(无外部依赖,Node ≥14):
# 临时校验单对:fg,bg,minimum,label node scripts/check-contrast.mjs --pair "#0f766e,#ffffff,4.5,link on white" # 从 JSON 配置文件批量校验整个调色板(格式详见脚本头部注释) node scripts/check-contrast.mjs contrast-pairs.json
将其集成至构建流程中。 仅运行一次的对比度检查属于审计行为;而集成进 npm run build 或 CI 流程、并在失败时以非零退出码终止构建的检查,则构成一项强制保障。请为每个主题(theme)中所有以文本或具语义图形形式渲染的 Token 对,全部加入校验配置。
以下三种模式可覆盖绝大多数实际调色板失效场景:
分离填充角色与文本角色。 鲜艳的品牌色(如青绿色、橙色、中蓝色)通常可作为 深色文字的背景填充 通过对比度检测,但作为 浅色背景上的文字 时往往失败——有时差距达两倍。因此应分别定义两类 Token,并禁止组件跨角色混用:
--color-primary: #14b8a6; /* 用于填充、边框、焦点环 —— 绝不用于浅色背景上的文字 */ --color-primary-text: #0f766e; /* 同一色相,但足够深以满足文本对比度(≥4.5:1) */
于是,实心按钮可根据主题动态选择文字颜色:亮色填充配深色文字,或深色填充配浅色文字——具体采用哪一组,由脚本验证决定,而非主观审美偏好。
按主题调节语义色。 在近黑色背景(如 #f59e0b 琥珀色、#ef4444 红色)下可读性良好的 success/warning/error 色值,在白色背景上可能失效——例如琥珀色在白底上对比度仅约 2.2:1。因此应为 --color-success/--color-warning/--color-error 分别配置深色主题与浅色主题的取值,而非共用同一套值:深色主题保留明亮色阶,浅色主题则采用更暗的色阶(例如 #b45309、#dc2626)。
弱化文本存在明确亮度下限。 占位符(placeholder)、提示(hint)和说明文字(caption)仍属文本范畴,必须满足 4.5:1 对比度。诸如 #9ca3af 这类中灰在白底上对比度约为 2.5:1,是全网最常出现的可访问性违规项。白底上满足 AA 级的最浅灰色约为 #767676;请将您的“弱化”Token 设定为此亮度值或更低。
rem/em)定义字体大小、行高及容纳文本的容器尺寸——浏览器缩放与文字大小调整必须支持放大至 200%,且不丢失内容(成功标准 SC 1.4.4)。html { font-size: 62.5% } 等技巧强行锁定像素尺寸,从而覆盖用户设置的字体大小偏好。:focus-visible 样式 —— 至少 2px 宽的轮廓线,且与周围表面保持 ≥3:1 的对比度(成功标准 SC 2.4.7、2.4.13)。禁用 outline: none 时,必须提供功能等效的视觉焦点指示。prefers-reduced-motion 媒体查询 —— 将非必要动画置于该媒体查询条件之下启用。请针对每个组件或页面逐项核查;详细说明与修复方案参见 references/wcag-checklist.md:
alt 文本需准确描述该图片在此处的 功能或作用;纯装饰性图片应设为 alt=""(1.1.1);标题严格按逻辑层级递进,不得为样式目的跳级(1.3.1)、、 —— 禁止用样式化的 模拟(4.1.2)
- 每个表单控件均有明确关联的标签;错误信息需以文本形式呈现,不可仅依赖颜色(3.3.1、3.3.2)
- 完整键盘导航走查:可抵达(reach)、可操作(operate)、可离开(leave)每一项;Tab 键顺序符合逻辑;页面级导航区域需提供“跳过链接”(skip link)(2.1.1、2.1.2、2.4.1)
- 当前页面或状态需明确标识(如
aria-current="page"、aria-expanded 等)
- 页面需声明
lang 属性,并设置具备描述性的 (3.1.1、2.4.2)
诚实的边界
- 自动化检测工具(本脚本、axe、Lighthouse 等)仅能捕获约三分之一至一半的 WCAG 不合规项——主要是机械性、可量化的缺陷。真实的合规性仍需人工完成键盘导航走查,并借助屏幕阅读器(VoiceOver/NVDA)进行端到端验证。在上述两项均完成前,请表述为“Token 层已通过 AA 级验证”,而非“本产品已具备可访问性”。
- 设计系统仅能保障 视觉层 的可访问性:对比度、焦点可见性、可缩放字体、目标尺寸等。内容语义层面——包括 alt 文本、标题层级、表单标签、键盘导航流——均由各具体产品实现并负责验证。
- 对比度比率适用于 实际渲染效果 中的颜色——透明度(opacity)、渐变(gradients)以及图文叠加(text over images)等场景,均需在校验时评估其最差情况(worst point),而非平均值。