可访问性也是工程

很多人把可访问性当成「给残障人士的补丁」:功能做完了,才想起来要加几个 aria 属性、调一调对比度。但在真实产品里,可访问性的受益者远比想象中多——色弱的人看不清低对比度文字,手部不便的人只能用键盘操作,视力下降的老年人需要放大字号,这些都不是小众场景。

把可访问性当工程来做,意味着它不再是上线前的补救,而是从结构、样式、交互到测试的一整套约束。它和性能、安全一样,属于产品的基本质量属性:不达标,功能再全也不算完成。

可访问性不是少数人的需求,而是产品的基本质量属性。
常见误解
  • 误解可访问性只是加几个 aria 属性。
  • 误解没有视障用户,所以不需要做。
  • 误解自动化工具扫一遍就达标了。
  • 正解结构、样式、交互、测试缺一不可。
软件可访问性配图:蓝色渐变背景中央发光人形轮廓立于圆形平台,周围多个半透明数据面板经发光连线相连,左侧键盘按键抽象图形,右侧带霓虹光环的放大镜,底部渐变进度条,扁平科技插画
可访问性贯穿结构、样式、交互与测试四个层面。

无障碍的四个原则:POUR

做无障碍先记住四个字母:POUR。任何内容要能被无障碍访问,必须满足可感知、可操作、可理解、健壮四个原则,这也是 WCAG 的四大支柱。

原则含义常见检查点
可感知信息能用某种感官获取图片有替代文本、视频有字幕
可操作界面能用键盘等操作所有功能可键盘到达、可操作
可理解信息与操作能被看懂文案清楚、导航一致、错误可说明
健壮能被辅助技术可靠解析语义正确、标准合规、兼容性好

这四个原则是检查清单的起点:任何一个功能,都可以问一句「它满足 POUR 吗」。回答不出来,说明这块还没做到位。

语义化 HTML:让结构自带含义

屏幕阅读器读网页,靠的不是视觉,而是代码里的语义。一个用 div 堆出来的按钮,和一个真正的 button 元素,对辅助技术来说完全是两回事。所以第一原则是:能用原生元素,就不要自造。

// 差的写法:div 冒充按钮
<div class="btn" onclick="submit()">提交</div>

// 好的写法:原生 button
<button type="submit">提交</button>

// 语义化标题与列表
<h1>订单管理</h1>
<ul>
  <li>待付款</li>
  <li>待发货</li>
</ul>

只有原生元素确实表达不了时,才用 ARIA 补足:例如自定义的折叠面板、弹窗、标签页。ARIA 的作用是给没有语义的自定义组件补语义,而不是给原生元素加戏。

ARIA 使用守则
  • 规则优先用原生元素,ARIA 是补充不是替代。
  • 规则能不用就不用:多余的 aria 比没有更糟。
  • 规则role、状态、标签要配套完整。