← 返回博客

前端可访问性(Accessibility)工程实践:从合规到体验

可访问性(a11y)不是"为了满足标准",而是"让更多用户能用你的产品"。本文从语义 HTML、ARIA 标签、键盘导航、颜色对比度、屏幕阅读器支持五个维度,给出前端可访问性的工程实践方法——适合正在或准备提升产品可访问性的前端开发者。

先说结论:可访问性不是”附加功能”,是”基础功能”

很多团队把可访问性当作”上线前的合规检查”——用工具扫一遍,把报错修掉就完事了。但真正的可访问性不是”没有报错”,而是”让所有用户都能顺畅地使用你的产品”。


1. 语义 HTML

为什么语义 HTML 重要

屏幕阅读器(如 NVDA、VoiceOver、TalkBack)通过 HTML 标签的语义来判断页面结构。用了正确的语义标签,屏幕阅读器才能正确地朗读页面内容。

常用语义标签

<!-- 不对 -->
<div class="nav">...</div>
<div class="main">...</div>
<div class="footer">...</div>

<!-- 正确 -->
<nav>...</nav>
<main>...</main>
<footer>...</footer>

其他重要的语义标签:<article><aside><section><header><button>(不要用 <div> 模拟按钮)。


2. ARIA 标签

什么时候用

只有原生 HTML 元素无法表达语义时才用 ARIA。比如:

<!-- 自定义复选框:原生 checkbox 不够用 -->
<div role="checkbox" aria-checked="false" tabindex="0"
     @click="toggle" @keydown.enter="toggle">
  同意条款
</div>

原则

  • 不要滥用 ARIA——优先使用原生 HTML 元素
  • 不要在原生元素上重复 ARIA 语义(<button> 不需要 role="button"
  • 使用前检查:有没有原生 HTML 元素可以替代?

3. 键盘导航

焦点管理

// 弹窗打开时,将焦点移到弹窗内
function openModal(modal) {
  modal.style.display = 'block';
  modal.querySelector('.close-button').focus();
}

// 弹窗关闭时,将焦点移回触发按钮
function closeModal(triggerButton) {
  modal.style.display = 'none';
  triggerButton.focus();
}

Tab 顺序

<!-- 使用 tabindex 控制焦点顺序,但不要用正数(会破坏自然顺序) -->
<!-- tabindex="-1":元素可以通过 JS 聚焦,但不能通过 Tab 键聚焦 -->
<!-- tabindex="0":元素按文档顺序聚焦 -->

4. 颜色对比度

检查工具

  • WebAIM Contrast Checker
  • Chrome DevTools 的 Accessibility 面板
  • axe DevTools 浏览器扩展

本站实践

本站的配色方案经过对比度测试,所有文本都满足 WCAG 2.1 AA 标准(普通文本 ≥ 4.5:1,大文本 ≥ 3:1)。


5. 屏幕阅读器支持

<!-- 提供图片的替代文本 -->
<img src="logo.webp" alt="AI Enable Harness 官网 Logo" />

<!-- 用 aria-label 提供额外描述 -->
<button aria-label="关闭弹窗">×</button>

<!-- 用 aria-live 区域播报动态内容 -->
<div aria-live="polite">
  加载完成,共 10 条结果
</div>

总结

维度核心原则常见错误
语义 HTML使用正确的标签表达结构全部用 div
ARIA原生元素不够用时才用滥用 ARIA
键盘导航所有功能都能用键盘操作只支持鼠标
颜色对比度文本 ≥ 4.5:1设计稿好看但看不清
屏幕阅读器提供替代文本和描述图片没有 alt 属性

可访问性做得好不好,不看”工具检查零报错”,而看”视障用户能不能顺畅地完成核心操作”。 一个可访问性好的产品,对所有用户都更好——更好的语义 HTML 也意味着更好的 SEO 和 GEO。

需要前端可访问性优化或前端开发服务?联系我们,说清你的产品类型与用户群体,24 小时内回可行性。

常见问题

可访问性会影响 SEO 吗?

会。搜索引擎爬虫和屏幕阅读器有相似之处——它们都依赖语义 HTML 来理解页面结构。使用了正确的语义标签(nav、main、article、aside)的页面,搜索引擎能更好地理解内容层级,AI 爬虫也能更准确地抓取。语义 HTML 是可访问性和 SEO/GEO 的共同基础。

ARIA 标签有什么用?

ARIA(Accessible Rich Internet Applications)标签用于在语义 HTML 不够用的时候,为屏幕阅读器提供额外的信息。比如一个自定义的复选框,没有原生 checkbox 的语义,需要用 role="checkbox" 和 aria-checked 告诉屏幕阅读器"这是一个复选框,它的状态是已选中"。原则:优先用原生 HTML 元素,只有原生元素不够用时才用 ARIA。

颜色对比度最低要求是多少?

WCAG 2.1 AA 标准要求:普通文本的对比度不低于 4.5:1,大文本(18px 以上或 14px 加粗以上)不低于 3:1。可以用 WebAIM 的对比度检查工具验证。如果对比度不达标,视障用户可能看不清文字。本站的配色方案经过对比度测试,所有文本都满足 AA 标准。

键盘导航要注意什么?

核心原则:所有鼠标能操作的功能,键盘也必须能操作。常见的键盘导航问题:① 下拉菜单用鼠标点能打开,用 Tab 键聚焦后按 Enter 没反应;② 弹窗打开后,焦点没有移到弹窗内,键盘操作还在页面背景上;③ 焦点顺序和视觉顺序不一致,用户 Tab 跳转时感觉混乱。

本文来自 AI Enable Harness 一线交付实践。需要同类系统或优化服务?

📡 本文同步发布平台: CSDN 知乎

订阅博客更新

新文章发布后第一时间邮件通知。不定期发送,不推销。

订阅 →