如何开发无障碍的前端Web 网页

Web 无障碍设计(Accessibility in Web design,也叫网站可及性 )是要让所创建的网站对所有用户都可用/可访问,不管用户的生理/身体能力如何、不管用户是以何种方式访问网站。

这里整理了一份Web 无障碍相关的内容,涵盖了目前常用的标准和标签写法,方便大家取阅。

让网页完全支持无障碍功能有一定成本,我们可以在让代码更规范,更语义化等方面去改变;比如给图片标签加上一个alt属性描述,这个举动只需要1秒钟的时间,带来的用户体验确是跨越性的,也许只有一个视力障碍的用户在访问我们的官网,我想他在访问我们页面-点击图片的时候,朗读出图片描述信息的时候,一定会很欣慰。

无障碍好处有哪些?(帮助残障人士,并使网站收益)

为什么不是所有网站都能无障碍访问?你可能也会问自己为什么存在 "无障碍" 的问题,为什么不是所有网站都能让所有用户无障碍访问?要进行无障碍设计有许多不同原因,其中包括残疾人用户的需求、不同的人访问和使用互联网的不同途径和方式。

帮助视障用户

视障用户包括色盲用户、完全失明用户(盲人)。如果图片不带有相关文字描述,则视障用户在理解图片方面会存在问题。如果图片没有文字描述,看不见图片的盲人用户就无法知道图片表达的是什么。色盲用户在识别设计元素(包括文字)方面也会存在问题,因为色盲用户所能识别的色彩不足以辨别所有的设计元素(包括背景色和页面颜色)。

所开发的网站,如果没有考虑到适应于屏幕发音阅读器(读屏软件, 如 JAWS)或 "非可视" 浏览器(或叫声音浏览器、读屏浏览器,如 MozBraille)。读屏浏览器是一个可以发音阅读出网站的浏览器,帮助有视觉障碍的用户访问网站。一个在可视浏览器(如 IE)上看起来良好的网站,在读屏浏览器下可能听起来非常糟糕。

帮助听障用户

听障用户在听觉上存在问题。用声音传达的信息无法被听障用户所理解,简单解决方法是提供另外途径的信息传达方式,而不仅仅是声音,例如用文字描述、用图片。

帮助残障用户(肢体伤残的用户)

如果你不是残障用户,你无法想象他们(残疾人)的网络体验。例如,你曾经试过不使用鼠标去访问网站吗?除非你很幸运的遇到一个无障碍访问良好的网站,否则你肯定觉得非常困难。残障用户经常无法使用鼠标,除非创建网站的导航和输入方式的需求中就考虑残障人士的需求,否则残障人士可能完全无法使用你的网站。

帮助认知和神经障碍用户

网站往往比较复杂,要想找到我们所想要的信息经常不太容易。如果网站设计的过于复杂、导航不一致、存在让人分心(抓狂)的重复性动画,情况会更加糟糕。这些设计元素会导致认知和神经有障碍的用户的使用问题,甚至会让这些用户完全无法使用网站。

残障人士之外(所有用户都能受益)

前面我们知道如果我们存在某方面残障,使用互联网是件困难的事情。然后,web 无障碍访问不仅仅帮助到残障人士,良好理解和遵循 Web 无障碍设计,可以让所有用户都受益、更好的服务用户。

  • 使用移动手机、Web-TV 的用户
  • 低带宽的用户
  • 在吵杂环境下使用网站的用户
  • 容易被 "屏幕眩光" 伤到眼睛的用户
  • 开车时的用户
  • 低文化水平的用户
  • 第二语言访问的用户(国外用户)
  • 不同学习方式和习惯的用户
  • 处理好 Web 无障碍访问问题也可以改善:

页面传输和网站更便于维护

  • 更优内容索引、内容搜索,提高搜索引擎的排名;

网站获得更好市场机会

让你的网站具有可及性还有其它原因。根据目前数据,在许多国家残疾人用户占到人口的 10%~20%,如果能吸收前面提到的残障人士成为你的网站的用户,可以提高你网站的市场占有率。

许多国家的老龄化人口都在增加,年龄的增大会带来更多的无障碍访问问题,包括视觉障碍、听觉障碍、记忆力下降等。如果你的网站能吸收老年人用户,也会大大提升你网站的市场占有率。

所以,无障碍访问是可以直接带来经济效益的。

无障碍 Web 标准

Web内容无障碍指南(WCAG)2.1概述-官方链接

摘要

WCAG 2.1提供了一系列的建议,目的是使Web内容对更广泛的用户群体更加易于访问。这包括视力、听力、运动能力、语言和认知能力受限的人士。遵循这些准则不仅可以提高网站的无障碍性,还能增强所有用户的体验。

背景

WCAG 2.1基于WCAG 2.0,并加入了新的成功标准以解决特定用户群体的需求。 这些准则是国际性的,旨在跨越不同的技术和平台。

适用范围

适用于台式机、笔记本、平板和移动设备上的Web内容。

主要原则

WCAG 2.1围绕四个核心原则构建,即:

可感知性:信息和用户界面组件必须以可感知的方式呈现。

  • 替代文本:为非文本内容提供文本替代,以便转换为大字体、盲文、语音等。
  • 时基媒体:为音频和视频内容提供替代,如字幕、音频描述和手语翻译。
  • 适应性:创建内容时,确保不同呈现方式下信息和结构不丢失。
  • 可辨别性:提高内容的可见性和听力清晰度,例如适当的颜色对比和文本间距。

可操作性:用户界面组件和导航必须可操作。

  • 键盘可访问:确保所有功能都可以通过键盘操作。
  • 充足的时间:为用户提供足够的时间来阅读和使用内容,避免突然的时限。
  • 癫痫和身体反应:避免设计可能引发癫痫或身体不适的内容。
  • 可导航性:提供帮助用户导航和定位的方法,如清晰的标题和链接目的。

可理解性:信息和用户界面操作必须是可理解的。

  • 可读性:使文本内容易于阅读和理解,包括语言和方言的使用。
  • 可预测性:让网页以可预见的方式呈现和操作,保持导航和标识的一致性。
  • 辅助输入:帮助用户避免和纠正错误,提供错误建议和预防机制。

鲁棒性:内容必须健壮,以被各种用户代理正确解释。

  • 兼容:使用标准编码技术,确保内容的兼容性和未来的可维护性。
  • 一致性:确保网站整体符合无障碍标准,提供一致性声明。

如何确保网站在不同浏览器和设备上都能提供良好的无障碍体验?

  1. 遵循WCAG准则:根据Web内容无障碍指南(WCAG),确保你的网站满足至少AA级标准。
  2. 使用语义化的HTML :使用适当的HTML标签来传达其含义,例如使用<header>, <nav>, <main>, <section>, <article>, <footer>等。
  3. 确保颜色对比度:确保文本和背景之间有足够的颜色对比,以满足视觉障碍用户的需求。
  4. 提供文本替代方案:为非文本内容(如图片、视频)提供替代文本(alt text)或字幕。
  5. 键盘可访问性:确保所有功能都可以通过键盘操作,避免使用仅限鼠标的交互。
  6. 避免自动播放媒体:不要让音频或视频内容自动播放,或者提供控制机制让用户可以暂停或停止。
  7. 提供足够的时间:为用户提供足够的时间来阅读和使用内容,避免突然的时限或自动提交表单。
  8. 确保导航可预测性:网站导航应保持一致,链接和按钮的行为应符合用户预期。
  9. 支持屏幕阅读器和其他辅助技术:使用适当的ARIA(Accessible Rich Internet Applications)属性来增强现有HTML的功能。
  10. 响应式设计:确保网站在不同大小的屏幕上都能正常显示和操作。
  11. 跨浏览器测试:在不同的浏览器(如Chrome、Firefox、Safari、Edge等)上测试网站的功能和布局。
  12. 跨设备测试:在各种设备上测试网站,包括桌面、平板和手机。
  13. 用户测试:邀请残障用户参与测试,收集他们的反馈并优化体验。
  14. 持续维护和更新:定期更新内容和代码,以适应新的Web标准和辅助技术。
  15. 提供反馈机制:允许用户报告无障碍问题,并确保有快速响应和修复的流程。
  16. 教育团队:确保开发团队了解无障碍最佳实践,并在设计和开发过程中考虑这些因素。
  17. 使用无障碍工具和插件:利用浏览器扩展和在线工具来检查和改善网站的无障碍性。
  18. 文档和指南:创建和维护无障碍开发和设计指南,确保所有团队成员遵循。

常用HTML标签的无障碍实践

根据WCAG 2.1快速参考指南,以下是一些常用HTML标签的无障碍写法、含义及示例:

<img> - 图像

  • 含义: 嵌入图片或图形内容。
  • 无障碍写法 : 使用alt属性提供图像的文本描述。

示例

html 复制代码
<img src="photo.jpg" alt="一位女士站在山顶上,欣赏日落">

<a> - 超链接

  • 含义: 定义一个超链接,用于从一个页面链接到另一个页面。
  • 无障碍写法 : 确保链接文本(或通过aria-label属性)清晰表达链接目的。

示例

html 复制代码
<a href="https://example.com" aria-label="访问示例网站的主页">主页</a>

<button> - 按钮

  • 含义: 定义一个可点击的按钮。
  • 无障碍写法 : 使用aria-pressed属性表示按钮的状态(如果适用)。

示例

html 复制代码
<button aria-pressed="false">切换</button>

<input> - 输入字段

  • 含义: 用于收集用户输入的表单字段。
  • 无障碍写法 : 使用aria-invalid属性指示输入错误。

示例

html 复制代码
<input type="text" aria-invalid="true" aria-describedby="error-message">
<span id="error-message">输入格式不正确。</span>

<textarea> - 文本区域

  • 含义: 定义一个多行的文本输入区域。
  • 无障碍写法: 确保文本区域大小可调整,以适应内容。

示例

html 复制代码
<textarea rows="4" cols="50" aria-describedby="text-help"></textarea>
<div id="text-help">请输入您的评论。</div>

<select> - 下拉菜单

  • 含义: 创建下拉选择菜单。
  • 无障碍写法 : 使用aria-labelledby属性引用下拉菜单的描述标签。

示例

html 复制代码
<label id="country-label">选择国家:</label>
<select aria-labelledby="country-label">
  <option value="china">中国</option>
  <option value="usa">美国</option>
</select>

<table> - 表格

  • 含义: 创建表格来展示数据。
  • 无障碍写法 : 使用caption元素为表格提供标题,使用th元素和scope属性定义表头。

示例

html 复制代码
<table>
  <caption>员工信息表</caption>
  <thead>
    <tr>
      <th scope="col">姓名</th>
      <th scope="col">职位</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>张三</td>
      <td>工程师</td>
    </tr>
  </tbody>
</table>

<header> - 页眉

  • 含义: 表示文档或文档区段的页眉。
  • 无障碍写法: 包含导航或概览文档结构的元素。

示例

html 复制代码
<header>
  <h1>网站标题</h1>
  <nav>
    <ul>
      <li><a href="#home">首页</a></li>
    </ul>
  </nav>
</header>

<footer> - 页脚

  • 含义: 表示文档或文档区段的页脚。
  • 无障碍写法: 包含版权信息、相关链接等。

示例

html 复制代码
<footer>
  <p>&copy; 2024 版权所有</p>
</footer>

<main> - 主要内容

  • 含义: 表示文档的主要内容区域。
  • 无障碍写法 : 作为文档结构的主体,不应包含在其他<main>元素内。

示例

html 复制代码
<main>
  <article>
    <h2>文章标题</h2>
    <p>这里是文章内容。</p>
  </article>
</main>

<article> - 文章

  • 含义: 表示独立的、自包含的网页内容。
  • 无障碍写法: 用于博客文章、新闻故事或论坛帖子等。

示例

html 复制代码
<article>
  <header>
    <h2>独立内容示例</h2>
  </header>
  <p>这里是独立内容的主体。</p>
</article>

注意事项

  • 所有标签都应该使用语义化的方式,以提高内容的可访问性。
  • ARIA属性可以增强无障碍性,但它们不能替代正确的HTML结构。
  • 确保所有交互元素都可以通过键盘访问,并且状态变化能够通过屏幕阅读器通知给用户。

以上示例提供了一些基本的无障碍写法,但请记得,无障碍设计是一个广泛且深入的领域,需要根据具体情况进行更细致的设计和实现。

相关推荐
崔庆才丨静觅5 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60616 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了6 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅6 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅6 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅7 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment7 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅7 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊7 小时前
jwt介绍
前端
爱敲代码的小鱼7 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax