为前端开发者准备的网页无障碍 (a11y) 全面指南,涵盖为全球用户创建包容性和可访问网络体验的原则、技术和最佳实践。
网页无障碍 (a11y):前端开发人员实用指南
网页无障碍(通常缩写为 a11y,其中 11 代表 'a' 和 'y' 之间的字母数量)是设计和开发网站及网络应用程序的一种实践,旨在让残障人士能够使用。这包括有视觉、听觉、运动、认知和语言障碍的个体。构建无障碍网站不仅仅是为了合规,更是为了给每个人创造包容和平等的数字体验,无论他们的能力或使用何种技术访问网络。这对于触及更广泛的受众也至关重要。例如,良好的颜色对比度有利于在明亮阳光下的用户,清晰的布局则有助于有认知障碍的用户或正在处理多任务的用户。
为什么网页无障碍如此重要?
优先考虑网页无障碍有几个令人信服的理由:
- 道德考量: 每个人都应享有平等访问在线信息和服务的权利。将残障人士排除在数字世界之外是歧视性的。
- 法律要求: 许多国家和地区都有强制要求网页无障碍的法律法规,例如美国的《美国残疾人法案》(ADA),加拿大的《安大略省残疾人无障碍法案》(AODA),以及欧盟的《欧洲无障碍法案》(EAA)。不遵守规定可能会导致法律诉讼。例如,在某些司法管辖区,不具备无障碍性的网站可能会被起诉。
- 改善用户体验: 无障碍最佳实践通常与通用可用性原则重叠。使网站无障碍可以改善所有用户的体验,无论他们是否有残疾。例如,为表单字段提供清晰的标签,既有利于有认知障碍的用户,也有利于网络连接缓慢、希望快速了解每个字段用途的用户。
- 更广泛的受众范围: 全球约有 15% 的人口患有某种形式的残疾。通过使您的网站无障碍,您可以将其开放给一个显著更大的受众群体。这可以转化为业务、参与度和影响力的增加。世界卫生组织估计,超过 10 亿人生活在某种形式的残疾中。
- SEO 优势: 像谷歌这样的搜索引擎会优先考虑结构良好、语义化和用户友好的网站。许多无障碍最佳实践,例如使用正确的标题结构和为图像提供替代文本,也可以改善您网站的搜索引擎优化 (SEO)。
- 提升品牌声誉: 展示对无障碍的承诺可以提升您的品牌声誉并与客户建立信任。消费者越来越倾向于选择具有社会责任感和包容性的品牌。
理解无障碍标准与指南
网页无障碍的主要标准是网页内容无障碍指南 (WCAG),由万维网联盟 (W3C) 制定。WCAG 提供了一套可测试的成功标准,可用于评估网页内容的可访问性。WCAG 是国际公认的,并经常在世界各地的无障碍法律法规中被引用。
WCAG 围绕四个原则组织,通常被称为 POUR:
- 可感知 (Perceivable): 信息和用户界面组件必须以用户可以感知的方式呈现。这意味着为非文本内容提供文本替代方案,为视频提供字幕,并确保足够的颜色对比度。
- 可操作 (Operable): 用户界面组件和导航必须是可操作的。这包括确保所有功能都可以通过键盘使用,为用户提供足够的时间阅读和使用内容,以及避免可能导致癫痫发作的内容。
- 可理解 (Understandable): 信息和用户界面的操作必须是可理解的。这意味着使用清晰简洁的语言,提供说明和反馈,并确保网站是可预测和一致的。
- 鲁棒性 (Robust): 内容必须足够鲁棒,以便能被包括辅助技术在内的各种用户代理可靠地解释。这包括使用有效的 HTML 和 ARIA 属性,并确保内容与不同的浏览器和设备兼容。
WCAG 有三个一致性级别:A、AA 和 AAA。A 级是无障碍性的最基本级别,而 AAA 级是最全面的。大多数组织的目标是达到 AA 级一致性,因为它在无障碍性和实用性之间提供了良好的平衡。许多法律法规要求达到 AA 级一致性。
前端开发人员的实用技巧
以下是前端开发人员可以用来提高其网站和 Web 应用程序可访问性的一些实用技巧:
1. 语义化 HTML
使用语义化 HTML 元素对于无障碍至关重要。语义化 HTML 为您的内容提供意义和结构,使辅助技术更容易理解和解释。不要对所有内容都使用通用的 <div>
和 <span>
元素,而应使用 HTML5 语义元素,例如:
<header>
:表示文档或区域的页眉。<nav>
:表示一个导航链接区域。<main>
:表示文档的主要内容。<article>
:表示文档、页面、应用程序或网站中一个独立的、自成一体的作品。<aside>
:表示与文档主要内容相关性不强的内容。<footer>
:表示文档或区域的页脚。<section>
:表示一个主题性的内容分组。
示例:
<header>
<h1>我的网站</h1>
<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
</header>
<main>
<article>
<h2>文章标题</h2>
<p>文章内容在此...</p>
</article>
</main>
<footer>
<p>© 2023 我的网站</p>
</footer>
使用正确的标题级别(<h1>
到 <h6>
)对于创建逻辑文档结构也至关重要。使用标题来组织您的内容,让用户更容易导航。<h1>
应用于页面的主标题,后续的标题应用于创建信息的层次结构。避免跳过标题级别(例如,从 <h2>
跳到 <h4>
),因为这可能会让屏幕阅读器用户感到困惑。
2. 图像的替代文本
所有图像都应有意义的替代文本(alt text),用以描述图像的内容和功能。屏幕阅读器使用替代文本向无法看到图像的用户传达图像的信息。如果图像纯粹是装饰性的,不传达任何重要信息,则 alt 属性应设置为空字符串(alt=""
)。
示例:
<img src="logo.png" alt="公司徽标">
<img src="decorative-pattern.png" alt="">
编写替代文本时,要做到描述性强且简洁。专注于传达图像提供的基本信息。避免使用“...的图像”或“...的图片”之类的短语,因为屏幕阅读器通常会宣告它是一个图像。
对于复杂的图像,如图表和图形,可以考虑在周围的文本中提供更详细的描述,或使用 <figure>
和 <figcaption>
元素。
3. 键盘可访问性
您网站上的所有交互元素都应能通过键盘访问。这对于无法使用鼠标或其他指针设备的用户至关重要。确保用户可以使用 Tab
键在您的网站中导航,并使用 Enter
或 Spacebar
键与元素进行交互。
注意页面上元素的焦点顺序。焦点顺序应遵循内容中逻辑和直观的路径。您可以使用 tabindex
属性来控制焦点顺序,但通常最好依赖 HTML 中元素的自然顺序。仅在需要纠正默认焦点顺序问题时才使用 tabindex
。
提供视觉焦点指示器,以向用户显示当前哪个元素获得了焦点。默认的浏览器焦点指示器可能不够醒目,因此可以考虑使用 CSS 添加自己的样式。确保焦点指示器与背景有足够的对比度。
示例:
/* CSS */
a:focus, button:focus {
outline: 2px solid blue;
outline-offset: 2px;
}
4. ARIA 属性
ARIA (Accessible Rich Internet Applications) 是一组可以添加到 HTML 元素中的属性,用以向辅助技术提供额外的语义信息。ARIA 属性可用于增强动态内容、复杂小部件和其他交互元素的可访问性。
一些常见的 ARIA 属性包括:
aria-label
:为元素提供文本标签。aria-describedby
:将元素与描述关联起来。aria-labelledby
:将元素与标签关联起来。aria-hidden
:将元素从辅助技术中隐藏。aria-live
:指示元素内容是动态更新的。role
:定义元素的作用(例如,按钮、复选框、对话框)。aria-expanded
:指示元素是展开还是折叠状态。aria-selected
:指示元素是否被选中。
示例:
<button aria-label="关闭对话框" onclick="closeDialog()">X</button>
<div role="dialog" aria-labelledby="dialog-title">
<h2 id="dialog-title">我的对话框</h2>
<p>对话框内容在此...</p>
</div>
使用 ARIA 属性时,遵循 ARIA 的使用规则非常重要:
- 规则 1: 如果您可以使用已内置所需语义和行为的原生 HTML 元素或属性,就不要重新利用一个元素并添加 ARIA 角色、状态或属性来使其可访问。
- 规则 2: 不要改变原生 HTML 语义,除非您真的必须这样做。
- 规则 3: 所有交互式 ARIA 控件必须能通过键盘使用。
- 规则 4: 不要在可聚焦的元素上使用
role="presentation"
或aria-hidden="true"
。 - 规则 5: 所有具有 ARIA 角色的元素必须拥有所有必需的属性。
5. 颜色对比度
确保文本与其背景之间有足够的颜色对比度。颜色对比度不足会使有低视力或色盲的用户难以阅读文本。
WCAG 要求普通文本的对比度至少为 4.5:1,大号文本(18pt 或 14pt 粗体)的对比度至少为 3:1。您可以使用颜色对比度检查器来验证您的网站是否符合这些要求。有许多免费的在线工具可用,例如 WebAIM Contrast Checker。
示例:
/* CSS */
body {
color: #333; /* 深灰色文本 */
background-color: #fff; /* 白色背景 */
}
(此示例的对比度为 7:1,符合 WCAG 要求。)
避免仅使用颜色来传达信息。色盲用户可能无法区分不同的颜色。应使用额外的提示,如文本标签或图标,来强化颜色的含义。
6. 表单与标签
正确标记表单元素对于无障碍至关重要。使用 <label>
元素将文本标签与每个表单输入关联起来。<label>
元素的 for
属性应与相应输入元素的 id
属性相匹配。
示例:
<label for="name">姓名:</label>
<input type="text" id="name" name="name">
对于复杂的表单,可以考虑使用 <fieldset>
和 <legend>
元素来对相关的表单控件进行分组。这可以帮助用户理解每组控件的用途。
当用户在填写表单时出错,应提供清晰简洁的错误消息。错误消息应显示在相应的表单字段附近,并提供如何纠正错误的指导。
使用 required
属性来指示哪些表单字段是必填的。这可以帮助用户避免意外提交不完整的表单。
7. 多媒体无障碍
确保视频和音频录音等多媒体内容对残障用户是可访问的。为视频提供字幕,为音频录音提供文字记录。字幕应准确转录视频中的口语内容,包括任何重要的音效或背景噪音。
对于直播视频,可以考虑使用实时字幕服务。这些服务可以实时提供字幕,让有听力障碍的用户能够跟上内容。许多视频会议平台都提供内置的实时字幕功能。
为视频提供音频描述。音频描述通过旁白叙述视频的视觉内容,描述屏幕上发生的事情。音频描述对于盲人或低视力用户至关重要。
确保多媒体控件,如播放、暂停和音量控制,是可以通过键盘访问的。
8. 动态内容与更新
当您网站上的内容动态更新时,通知用户这些变化非常重要。这对于使用屏幕阅读器的用户尤其重要,因为他们可能不知道内容已经改变。
使用 ARIA live regions 向屏幕阅读器宣告动态更新。ARIA live regions 是页面上被指定接收更新的区域。当 live region 的内容发生变化时,屏幕阅读器会向用户宣告这些变化。使用 aria-live
属性来定义一个 live region。aria-atomic
和 aria-relevant
属性可用于微调屏幕阅读器宣告变化的方式。
示例:
<div aria-live="polite">
<p id="status-message">加载中...</p>
</div>
<script>
// 数据加载后更新状态消息
function updateStatus(message) {
document.getElementById("status-message").textContent = message;
}
</script>
在这个例子中,aria-live="polite"
属性指示屏幕阅读器应该宣告对 <div>
元素内容的更改,但不应中断用户的当前任务。updateStatus()
函数更新 <p>
元素的内容,这将触发屏幕阅读器宣告新的状态消息。
9. 无障碍测试
定期对您的网站进行无障碍测试,以识别并修复任何问题。您可以使用多种工具和技术来进行无障碍测试。
- 自动化无障碍检查器: 使用自动化无障碍检查器扫描您的网站,查找常见的无障碍错误。一些流行的工具包括 WAVE、A Checker 和 Google Lighthouse。这些工具可以识别诸如缺少替代文本、颜色对比度低和标题结构不当等问题。然而,自动化工具只能检测到一部分无障碍问题。
- 手动测试: 使用键盘和屏幕阅读器手动测试您的网站。这将帮助您识别自动化工具无法检测到的问题,例如焦点顺序问题和导航不清晰。一些流行的屏幕阅读器包括 NVDA(免费开源)、JAWS(商业软件)和 VoiceOver(内置于 macOS 和 iOS)。
- 用户测试: 让残障用户参与您的测试过程。从不同类型残疾的用户那里获取反馈,以确保您的网站对每个人都是可访问的。用户测试可以为您的网站在现实世界中的可访问性提供宝贵的见解。
浏览器之外的无障碍
虽然本指南主要关注浏览器环境下的网页无障碍,但重要的是要记住,无障碍性超越了网络。在其他数字领域也应考虑无障碍性,例如:
- 移动应用: 在为 iOS 和 Android 开发移动应用程序时,应用类似的无障碍原则。使用操作系统提供的原生无障碍功能。
- 桌面应用: 确保桌面应用程序可通过键盘导航,提供足够的对比度,并与屏幕阅读器兼容。
- 文档(PDF、Word 等): 通过使用正确的标题结构、为图像添加替代文本以及确保足够的对比度来创建无障碍文档。
- 电子邮件: 通过使用语义化 HTML、为图像提供替代文本以及使用清晰简洁的语言来设计无障碍电子邮件。
结论
网页无障碍是前端开发的一个重要方面。通过遵循本指南中概述的原则和技术,您可以为所有用户创造包容和可访问的网络体验,无论他们的能力如何。请记住,无障碍是一个持续的过程。定期测试您的网站并收集残障用户的反馈,以确保它随着时间的推移保持可访问性。通过优先考虑无障碍,您可以让网络成为一个对每个人都更具包容性和公平性的地方。
通过拥抱无障碍,您不仅是在遵守法规,更是在为每个人构建一个更好的网络,扩大您的影响力,并在全球范围内增强您的品牌声誉。