Skip to content

V.3 Web 可访问性 (A11y):为所有用户提供包容性设计

目的:确保所有用户,包括残障人士,都能有效地访问和使用 Web 内容。

  • WCAG 指南 (2.1/2.2):Web 内容可访问性指南提供了全球公认的 Web 可访问性标准。WCAG 2.2 在 2023 年 10 月增加了新的标准。
  • 关键原则:确保所有功能都可通过键盘操作,焦点可见且有意义,内容可被辅助技术理解。
  • 屏幕阅读器:将数字文本朗读出来的软件(例如,NVDAJAWSVoiceOver),对视障用户至关重要。常见问题包括非描述性链接、图像缺少 alt 文本和标题结构不佳。
  • 键盘导航:所有交互元素必须仅使用键盘操作;焦点顺序应逻辑清晰,焦点应始终可见。
  • 颜色对比度:确保文本(普通文本 4.5:1,大文本 3:1)和非文本元素有足够的对比度,以适应弱视或色盲用户。不要仅仅依靠颜色来传达信息。

可访问性既是法律法规的要求,也是重要的道德责任,而不仅仅是一个功能。遵守 WCAG 指南 直接扩大了用户范围,并改善了所有用户的可用性,包括非残障用户(例如,良好的键盘导航对所有用户都有益)。对语义化 HTML 的强调 是 A11y 的基础步骤,展示了因果关系。

表格:WCAG 2.2 焦点关键成功标准

成功标准等级做法重要性
焦点不被遮挡(最小)AA确保键盘焦点元素至少部分可见键盘用户需要看到焦点所在
焦点不被遮挡(增强)AAA确保键盘焦点元素完全可见键盘用户需要清晰地看到焦点所在
焦点外观AAA使用足够大小和对比度的焦点指示器许多人难以感知细微视觉变化,需要清晰的指示器

这个表格为可访问性的关键方面:键盘焦点,提供了具体、可操作的指导。它帮助开发者理解包容性设计的具体要求,这直接影响了相当一部分用户的可用性。

V.3.1 ARIA 属性的使用

WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) 是一套技术规范,通过添加额外的 HTML 属性来增强 HTML 语义,从而改善残障人士使用辅助技术(如屏幕阅读器)访问 Web 应用时的体验。ARIA 属性不会改变元素的视觉表现,但会改变辅助技术对元素的解释方式。

ARIA 的核心作用包括:定义角色 (role),描述元素是什么或做什么,例如 role="button"role="navigation"role="search"。尽管 HTML5 引入了许多语义化标签(如<nav>, <header>, <aside>),但 ARIA 角色可以为非语义化元素提供语义,或在复杂组件中提供更精细的语义。定义状态 (state),描述元素的当前状态,例如 aria-pressed="true/false"(按钮是否被按下)、aria-checked="true/false"(复选框是否被选中)。定义属性 (property),描述元素的特性或与其他元素的关系,例如 aria-required="true"(表单输入是否必填)、aria-labelledby="ID"(指定元素的标签由哪个元素的文本内容提供)。

在具体场景与代码示例中,当使用 <div><span> 等非语义化元素构建自定义按钮时,需要添加 role="button"tabindex="0" 使其可聚焦,并使用 aria-pressed 等状态属性来表示其状态。通过 JavaScript 监听点击事件,并切换 aria-pressed 的状态。对于复杂表单元素的关联,当某个输入框的标签由多个元素组成,或标签文本不在 <label for> 的直接关联范围内时,可以使用 aria-labelledby 将这个输入框与提供标签文本的元素关联起来。aria-describedby 用于提供额外描述信息,例如输入框的提示或错误信息。对于动态内容区域的通知,如聊天消息或通知中心,使用 aria-live 属性告知屏幕阅读器该区域的内容会动态变化。需要注意的是,应避免在已有语义的 HTML 元素上冗余地添加相同的 ARIA 角色,例如 <button role="button"> 是不推荐的。

V.3.2 辅助技术测试方法

仅仅添加 ARIA 属性是不够的,必须通过实际测试来验证其效果。使用屏幕阅读器进行测试是关键步骤。常见的屏幕阅读器包括:Windows 上的免费开源 NVDA (NonVisual Desktop Access) 和流行的商业软件 JAWS (Job Access With Speech);macOS 和 iOS 内置的 VoiceOver;Android 设备内置的 TalkBack。

测试步骤通常包括:仅使用键盘(Tab 键、Enter 键、空格键等)遍历页面所有可交互元素,确保所有功能都可通过键盘访问。启动屏幕阅读器,使用其提供的导航快捷键(如 Tab、Shift+Tab、方向键)按顺序浏览页面内容,听取其朗读的内容。检查屏幕阅读器是否正确朗读了元素的角色、状态、名称和值。例如,按钮是否被朗读为“按钮”,复选框是否朗读其选中状态。尝试使用屏幕阅读器提供的交互命令(如激活按钮、输入文本、选择下拉菜单项),验证功能是否正常。对于动态更新的区域,验证屏幕阅读器是否及时、准确地朗读了变更。最后,尝试在不同浏览器、不同设备上进行测试,并模拟视力障碍、运动障碍等不同用户场景。

其他测试工具和方法包括:浏览器内置工具,如 Chrome Lighthouse、Firefox Accessibility Inspector,它们提供自动化审计和建议。自动化测试库,如 jest-domReact Testing Library,可以在单元测试和集成测试中检查 DOM 的可访问性属性。由于自动化工具无法发现所有可访问性问题,仍需要有经验的开发者进行人工审查。最后,邀请残障用户参与测试,获取真实反馈,这是最直接有效的方法。

可访问性是产品质量和企业社会责任的体现。ARIA 属性和屏幕阅读器测试帮助残障人士使用 Web 应用。这不仅仅是技术规范的遵守,更是产品质量的延伸和企业社会责任的体现。一个可访问的网站能够触达更广泛的用户群体,提升用户满意度和品牌形象。在许多国家,可访问性已成为法律要求,不遵守可能面临法律风险。这意味着专业级前端工程师需要将可访问性视为与性能、安全性同等重要的核心开发原则。它要求开发者从设计阶段就融入包容性思维,并掌握相关的技术和测试方法,从而构建出真正面向所有人的产品,这超越了纯粹的技术范畴,上升到人文关怀和商业价值的高度。

语义化 HTML 是可访问性的基石,ARIA 是其补充和增强。ARIA 属性可以为非语义化元素提供语义,或增强复杂组件的语义。这强调了“尽可能使用原生 HTML 语义元素”的原则是可访问性的第一步。只有当原生 HTML 无法表达所需语义时(例如自定义复杂组件),才应使用 ARIA 进行补充和增强。滥用 ARIA 或在已有语义的元素上重复添加 ARIA,反而可能造成混淆或冗余。这揭示了前端开发者在构建 UI 时,需要对 HTML 的语义有深刻的理解。专业级前端工程师不应仅仅关注视觉呈现,更要关注底层 DOM 的语义结构,确保辅助技术能够正确解析和传达信息。这种对“语义优先”的坚持,是构建健壮、可维护且可访问的 Web 应用的基础。

基于 CC BY-NC-SA 4.0 许可发布