← 返回蜂巢洞察

如何利用WCAG 2.2标准打造更加易于访问的网站

一个网站可能看起来很专业,使用鼠标操作时也能运行得非常顺畅,但对某些用户来说,使用它仍然会遇到困难。 有时,某个表单会仅通过颜色来提示用户出现了问题;固定的页眉可能会完全覆盖当前处于键盘焦点位置的元素;登录表单可能会阻止用户从密码管理工具中复制密码并粘贴到表单中;而某个自定义按钮,用鼠标点击时可以正常使用,但当人们使用键盘操作时却毫无反应。 这些其实都是开发过程中做出的决策,并非只有在进行无障碍性审核时才会出现的问题。 《Web内容无障碍性指南》为识别和消除这些障碍提供了统一的标准。WCAG 2.2是最新的WCAG 2建议标准,世界万维网联盟也建议开发人员和各类组织在可能的情况下使用WCAG

一个网站可能看起来很专业,使用鼠标操作时也能运行得非常顺畅,但对某些用户来说,使用它仍然会遇到困难。

有时,某个表单会仅通过颜色来提示用户出现了问题;固定的页眉可能会完全覆盖当前处于键盘焦点位置的元素;登录表单可能会阻止用户从密码管理工具中复制密码并粘贴到表单中;而某个自定义按钮,用鼠标点击时可以正常使用,但当人们使用键盘操作时却毫无反应。

这些其实都是开发过程中做出的决策,并非只有在进行无障碍性审核时才会出现的问题。

《Web内容无障碍性指南》为识别和消除这些障碍提供了统一的标准。WCAG 2.2是最新的WCAG 2建议标准,世界万维网联盟也建议开发人员和各类组织在可能的情况下使用WCAG 2.2。

本文重点探讨了WCAG 2.2中A级和AA级要求,这些要求往往会对前端开发产生直接影响。文章旨在说明无障碍性要求是如何与前端开发决策相互关联的。

目录

什么是WCAG 2.2?

WCAG代表网页内容无障碍指南。W3C制定了这一标准,旨在说明如何让残障人士能够更便捷地访问网页内容。

WCAG 2.2将其各项要求分为原则、指导方针和可测试的成功标准。这些成功标准与具体的技术实现无关,这一点非常重要,因为WCAG并不是专门为HTML、React、WordPress或任何其他技术而制定的。

请看以下这种层次结构:

原则:可操作性

    指导方针2.1:支持键盘操作

        成功标准2.1.1:键盘可用性

原则为人们提供了总体上的无障碍目标,指导方针进一步明确了这一目标的具体内容,而成功标准则提供了可供测试的具体要求。

W3C还发布了其他资源,例如了解WCAG 2.2如何满足WCAG 2.2的要求以及WCAG 2.2的实施技巧。这些资源对成功标准进行了说明,并提供了实现方法、示例以及常见的错误案例。它们属于参考性资料,并不属于WCAG的强制性要求。

W3C提供的某项实施技巧可以展示一种满足特定成功标准的方法,但WCAG通常并不要求必须使用这种具体的技术手段;只要能够满足相应的成功标准,其他实现方式也同样有效。

WCAG合规性的判定机制

WCAG定义了三个合规性等级:A级、AA级AAA级

这些等级是层层递进的。一个网页如果只满足了AA级的标准,是无法宣称自己达到AA级合规性的;它必须同时满足所有A级和AA级的成功标准。AAA级同样涵盖了A级、AA级和AAA级的各项要求。

这种区分非常重要,因为有时人们在讨论无障碍问题时,会将WCAG简化为一系列单独的检查项目。

你可能会修复菜单中的键盘操作功能、为图片添加替代文本、解决对比度问题等等,这些确实都是有益的无障碍改进措施,但它们并不能自动使整个网站达到“WCAG AA级合规”标准。

WCAG合规性是针对整个网页而言的。如果某个流程需要多个页面来完成,比如结账流程,那么该流程中的所有页面都必须符合所宣称的合规等级要求。

因此,本文中的示例只是展示了如何满足某些特定的无障碍要求,并不能代表整个应用程序达到了WCAG合规标准。

WCAG的四项原则是如何发挥作用的

WCAG将其指导方针归纳为四个原则,人们通常用缩写POUR来记忆这些原则:可感知性、可操作性、可理解性和稳健性。

可感知性意味着用户必须能够理解您所提供的信息。文本说明、字幕、适当的对比度以及可调整的布局设计,都属于这一原则的范畴。

可操作性指的是人们如何与界面进行交互。键盘操作、焦点行为、导航功能、指针交互以及响应时间等方面都属于这一范畴。

易理解性关注的是用户是否能够理解界面显示的信息及其运行方式。格式化的提示信息、有用的错误提示、可预测的界面设计以及便捷的身份验证机制都是实现这一目标的关键因素。

稳定性则涉及浏览器及辅助技术是否能够正确解析页面内容。语义化HTML、可访问的标签名称、角色属性、值以及状态等信息,对于确保界面的稳定性至关重要。

虽然这些分类很有用,但实际在处理无障碍设计问题时,HTML、CSS和JavaScript这三者之间的界限往往并不存在严格的划分。例如,一个自定义的下拉列表可能需要在标记中添加语义化信息,在CSS中设置可见的焦点样式,并通过JavaScript来实现正确的键盘交互功能。

因此,将无障碍设计融入到开发流程之中,而不是将其作为开发后期单独进行的任务,才能取得最佳效果。

如何开始使用语义化HTML

在开始编写任何与ARIA相关的代码之前,选择正确的HTML元素是实现无障碍设计的最重要的步骤之一。

<div onclick="submitForm()">>提交按钮</div>

对于鼠标用户来说,他们或许可以点击这个元素,但普通的div标签并不会自动表现出按钮的功能。

<button type="submit">>提交按钮<>/button>

而原生的button标签能够向浏览器明确说明自身的功能,并提供预期的键盘交互行为。

这一点与W3C的成功标准4.1.2:名称、角色、值有关,该标准要求用户界面组件能够以编程方式暴露自身的名称和功能等信息。W3C指出,当开发者按照规范使用这些标准控件时,它们本身就已经提供了大部分所需的信息。

实际应用中,一个简单的原则就是:除非确实有必要,否则不要重新设计浏览器原有的交互行为。

语义化HTML如何呈现页面结构

语义化HTML还能帮助清晰地表达页面各部分之间的关系。

<div class="top"> ... </div> <div class="navigation"> ... </div>> <div class="content"> <div class="title">>账户设置</div>> ... </div>

虽然这些类可以用来创建所需的视觉布局,但它们并不一定能以编程方式准确反映页面的实际结构。

<>header> ... <>/header> <>nav aria-label="主导航"> ... <>/nav>> <main id="main-content">>

账户设置

... </main>

这种写法才能更清晰地表达页面的结构关系。

成功标准1.3.1:信息与关联关系要求,那些通过视觉方式呈现的结构与关联关系,也应当能够通过编程方式获取,或者以文本形式提供。使用语义标记技术就可以实现这一目标,而无需开发者额外添加辅助功能属性来重新构建这些信息。

这并不意味着使用

相关文章

技术实践

如何使用针对用户的OAuth访问机制来构建人工智能代理程序【完整手册】

当你的AI代理同时为多个人提供服务时,每一次工具调用都必须明确:该代理究竟是在代表哪位用户行事。让我们通过构建一个能够与Slack和GitHub连接的AI代理来学习如何解决这个问题。 当使用Slack时,系统会使用 해당用户的 workspace;而在GitHub上创建问题时,也会以该用户的身份在其有权访问的仓库中操作。虽然代理可能会犯错,但它绝对不能使用错误用户的权限来进行操作。 解决这个问题的方法分为两个部分,而这两个部分都在本教程的前半部分进行了讲解: 每位用户都需要单独授权。 Alice为自己授权Slack,Bob也为自己授权Slack。 代理传递的是标识符,而不是令牌。 像 alic

阅读全文
技术实践

如何让你的副业项目被人们注意到,并吸引到愿意付费使用的用户

2022年,我在业余时间开发了一个小型微服务产品,最终以几千美元的价格将其卖了出去。如今,有了人工智能工具的帮助,开发这样的产品可能会更加容易。 但真正发生巨大变化的是获取关注的成本,而不是开发软件本身的成本。 我认为,在2026年,产品的分发渠道将比开发本身更为重要。在这篇文章中,我会与大家分享我在产品开发过程中所学到的经验,并试图劝阻大家在开始下一个项目之前,先不要急着直接投入编码工作。 读完这份指南后,你应该能够掌握一些实用的方法和思路,这些方法可以帮助你将自己那些充满热情的项目推向市场。 需要明确的是,这篇文章主要是针对那些正在开发数字产品的人,尤其是软件产品。不过,这些概念同样适用于

阅读全文
技术实践

如何使用 Shadcn UI 在 React 中构建可扩展的客户身份验证及入职流程

任何具有合规性要求的B2B SaaS产品(比如涉及银行业务、贷款服务、工资发放或加密货币相关的应用)在开发初期都会遇到同样的问题:在允许企业使用你的平台之前,你必须先核实他们的身份。 这意味着需要收集企业的类型信息、审核他们的注册文件,并向用户展示他们的验证进度,但整个流程不能让人感觉像是在填写繁琐的海关表格一样。 本文详细介绍了如何利用Shadcn UI构建一个功能完备的三步客户身份验证流程:包括用于显示操作进度的步骤提示组件、用于选择账户类型的单选组、用于上传文件的区域,以及用于显示验证状态的警告提示。你会看到实际的代码实现,而不仅仅是简化后的示例代码,同时也会了解到每个设计决策背后的理由

阅读全文
技术实践

Flutter前端系统设计:在人工智能时代,如何像资深工程师一样思考

系统设计长期以来一直被视为后端领域的问题。 如果你问一群Flutter工程师“系统设计到底意味着什么”,他们中的大多数人会提到服务器架构:负载均衡器、数据库以及微服务。 但如果你让他们设计一个分布式缓存系统或画出一个消息队列的示意图,他们会犹豫不决。而当你要求他们为社交Feed应用开发Flutter客户端时,他们就会立刻打开新文件开始编写组件代码。 这种差距确实存在,不过正在迅速缩小。 随着Flutter应用程序变得越来越复杂——它们具备了实时功能、离线支持、多平台兼容性,同时还包含需要维护的人工智能生成代码——在编写任何一个组件之前所做出的架构决策,其重要性已经与后端架构相当了。 在那些以产

阅读全文