无障碍设计
无障碍设计
这篇笔记还在编辑中,内容可能会继续补充、调整或重写。
无障碍是功能契约
无障碍不是发布前的视觉检查,而是确保不同视觉、听觉、运动和认知条件,以及只使用键盘、语音或辅助技术的用户都能完成任务。组件库应把这些行为定义为公共 API 的一部分。
优先使用语义 HTML
原生 <button> 自带焦点、键盘激活、禁用和角色语义。使用 div 加点击事件后,需要重新实现这些行为,且很容易遗漏。ARIA 用来补充缺失语义,不能修复错误的交互模型。
每个控件都需要可访问名称。图标按钮不能只依赖视觉图标;输入控件需要真实标签;状态信息需要在合适时机被辅助技术感知。
键盘与焦点
- Tab 顺序应与视觉和阅读顺序一致
- 不应使用正数
tabindex人工重排页面 - 模态框打开后把焦点移入,关闭后返回触发元素
- 自定义复合组件按照对应 WAI-ARIA Pattern 实现方向键和选择行为
- 焦点样式在所有主题和状态下清晰可见
- 路由切换和异步更新需要有明确的焦点策略
视觉与动态内容
颜色对比、缩放、文本间距和响应式布局应满足内容仍可读、控件仍可操作。错误、成功、加载和进度不能只靠颜色或动画表达;对动态通知使用合适的 live region,避免过度打断用户。
尊重 prefers-reduced-motion,并允许暂停会闪烁、自动播放或持续移动的内容。
自动化与人工测试
Lint、axe 和浏览器无障碍树能发现缺少名称、无效 ARIA 和部分对比问题,但无法判断焦点是否符合任务流程、提示是否易懂、读屏顺序是否合理。至少结合:
- 语义和规则自动检查
- 全流程键盘测试
- 浏览器缩放和高对比度检查
- 至少一种主流读屏软件的关键路径测试
组件验收矩阵
每个交互组件至少覆盖默认、悬停、聚焦、按下、禁用、加载、错误和只读状态,并在亮色、暗色、缩放和键盘场景验证。
验收标准
- 关键流程只使用键盘即可完成
- 控件名称、角色、状态和值可被辅助技术读取
- 模态框、菜单和路由切换具有正确焦点管理
- 200% 缩放时没有关键内容或操作丢失
- 自动化检查进入 CI,同时保留人工测试记录
- 组件文档说明无障碍行为和使用者责任