如何开发无障碍的前端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结构。
  • 确保所有交互元素都可以通过键盘访问,并且状态变化能够通过屏幕阅读器通知给用户。

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

相关推荐
编程零零七1 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦3 小时前
JavaScript substring() 方法
前端
无心使然云中漫步4 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者4 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_4 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋5 小时前
AJAX 入门 day1
前端·javascript·ajax
2401_858120535 小时前
深入理解MATLAB中的事件处理机制
前端·javascript·matlab
阿树梢5 小时前
【Vue】VueRouter路由
前端·javascript·vue.js
随笔写7 小时前
vue使用关于speak-tss插件的详细介绍
前端·javascript·vue.js
史努比.7 小时前
redis群集三种模式:主从复制、哨兵、集群
前端·bootstrap·html