---
URL: "/zh-CN/blog/2024-08/accessibility_design.html"
LLMS_URL: "/zh-CN/blog/2024-08/accessibility_design.md"
lastUpdated: true
commentabled: true
recommended: true
title: "如何开发无障碍的前端Web 网页"
description: "如何开发无障碍的前端Web 网页"
date:

pageClass: "blog-page-class"
---

---
lastUpdated: true
commentabled: true
recommended: true
title: 如何开发无障碍的前端Web 网页
description: 如何开发无障碍的前端Web 网页
date: 2024-08-26 11:18:00
pageClass: blog-page-class
---

# 如何开发无障碍的前端Web 网页 #

Web 无障碍设计（Accessibility in Web design，也叫网站可及性 ）是要让所创建的网站对所有用户都可用/可访问，不管用户的生理/身体能力如何、不管用户是以何种方式访问网站。

这里整理了一份Web 无障碍相关的内容，涵盖了目前常用的标准和标签写法，方便大家取阅。

让网页完全支持无障碍功能有一定成本，我们可以在让代码更规范，更语义化等方面去改变；`比如给图片标签加上一个alt属性描述`，这个举动只需要1秒钟的时间，带来的用户体验确是跨越性的，也许只有一个视力障碍的用户在访问我们的官网，我想他在访问我们页面-点击图片的时候，朗读出图片描述信息的时候，一定会很欣慰。

## 无障碍好处有哪些？（帮助残障人士，并使网站收益） ##

为什么不是所有网站都能无障碍访问？你可能也会问自己为什么存在 “无障碍” 的问题，为什么不是所有网站都能让所有用户无障碍访问？要进行无障碍设计有许多不同原因，其中包括残疾人用户的需求、不同的人访问和使用互联网的不同途径和方式。

### 帮助视障用户 ###

视障用户包括色盲用户、完全失明用户（盲人）。如果图片不带有相关文字描述，则视障用户在理解图片方面会存在问题。如果图片没有文字描述，看不见图片的盲人用户就无法知道图片表达的是什么。色盲用户在识别设计元素（包括文字）方面也会存在问题，因为色盲用户所能识别的色彩不足以辨别所有的设计元素（包括背景色和页面颜色）。

所开发的网站，如果没有考虑到适应于屏幕发音阅读器（读屏软件, 如 JAWS）或 “非可视” 浏览器（或叫声音浏览器、读屏浏览器，如 MozBraille）。读屏浏览器是一个可以发音阅读出网站的浏览器，帮助有视觉障碍的用户访问网站。一个在可视浏览器（如 IE）上看起来良好的网站，在读屏浏览器下可能听起来非常糟糕。

### 帮助听障用户 ###

听障用户在听觉上存在问题。用声音传达的信息无法被听障用户所理解，简单解决方法是提供另外途径的信息传达方式，而不仅仅是声音，例如用文字描述、用图片。

### 帮助残障用户（肢体伤残的用户） ###

如果你不是残障用户，你无法想象他们（残疾人）的网络体验。例如，你曾经试过不使用鼠标去访问网站吗？除非你很幸运的遇到一个无障碍访问良好的网站，否则你肯定觉得非常困难。残障用户经常无法使用鼠标，除非创建网站的导航和输入方式的需求中就考虑残障人士的需求，否则残障人士可能完全无法使用你的网站。

### 帮助认知和神经障碍用户 ###

网站往往比较复杂，要想找到我们所想要的信息经常不太容易。如果网站设计的过于复杂、导航不一致、存在让人分心（抓狂）的重复性动画，情况会更加糟糕。这些设计元素会导致认知和神经有障碍的用户的使用问题，甚至会让这些用户完全无法使用网站。

### 残障人士之外（所有用户都能受益） ###

前面我们知道如果我们存在某方面残障，使用互联网是件困难的事情。然后，web 无障碍访问不仅仅帮助到残障人士，良好理解和遵循 Web 无障碍设计，可以让所有用户都受益、更好的服务用户。

- 使用移动手机、Web-TV 的用户
- 低带宽的用户
- 在吵杂环境下使用网站的用户
- 容易被 “屏幕眩光” 伤到眼睛的用户
- 开车时的用户
- 低文化水平的用户
- 第二语言访问的用户（国外用户）
- 不同学习方式和习惯的用户
- 处理好 Web 无障碍访问问题也可以改善：

### 页面传输和网站更便于维护 ###

更优内容索引、内容搜索，提高搜索引擎的排名；

### 网站获得更好市场机会 ###

让你的网站具有可及性还有其它原因。根据目前数据，在许多国家残疾人用户占到人口的 10%~20%，如果能吸收前面提到的残障人士成为你的网站的用户，可以提高你网站的市场占有率。

许多国家的老龄化人口都在增加，年龄的增大会带来更多的无障碍访问问题，包括视觉障碍、听觉障碍、记忆力下降等。如果你的网站能吸收老年人用户，也会大大提升你网站的市场占有率。

所以，无障碍访问是可以直接带来经济效益的。

## 无障碍 Web 标准 ##

[Web内容无障碍指南（WCAG）2.1概述-官方链接](https://www.w3.org/Translations/WCAG21-zh/#text-alternatives)

### 摘要 ###

WCAG 2.1提供了一系列的建议，目的是使Web内容对更广泛的用户群体更加易于访问。这包括视力、听力、运动能力、语言和认知能力受限的人士。遵循这些准则不仅可以提高网站的无障碍性，还能增强所有用户的体验。

### 背景 ###

WCAG 2.1基于WCAG 2.0，并加入了新的成功标准以解决特定用户群体的需求。
这些准则是国际性的，旨在跨越不同的技术和平台。

### 适用范围 ###

适用于台式机、笔记本、平板和移动设备上的Web内容。

### 主要原则 ###

WCAG 2.1围绕四个核心原则构建，即：

- **可感知性**：信息和用户界面组件必须以可感知的方式呈现。
  - 替代文本：为非文本内容提供文本替代，以便转换为大字体、盲文、语音等。
  - 时基媒体：为音频和视频内容提供替代，如字幕、音频描述和手语翻译。
  - 适应性：创建内容时，确保不同呈现方式下信息和结构不丢失。
  - 可辨别性：提高内容的可见性和听力清晰度，例如适当的颜色对比和文本间距。

- **可操作性**：用户界面组件和导航必须可操作。
  - 键盘可访问：确保所有功能都可以通过键盘操作。
  - 充足的时间：为用户提供足够的时间来阅读和使用内容，避免突然的时限。
  - 癫痫和身体反应：避免设计可能引发癫痫或身体不适的内容。
  - 可导航性：提供帮助用户导航和定位的方法，如清晰的标题和链接目的。

- **可理解性**：信息和用户界面操作必须是可理解的。
  - 可读性：使文本内容易于阅读和理解，包括语言和方言的使用。
  - 可预测性：让网页以可预见的方式呈现和操作，保持导航和标识的一致性。
  - 辅助输入：帮助用户避免和纠正错误，提供错误建议和预防机制。

- **鲁棒性**：内容必须健壮，以被各种用户代理正确解释。
  - 兼容：使用标准编码技术，确保内容的兼容性和未来的可维护性。
  - 一致性：确保网站整体符合无障碍标准，提供一致性声明。

### 如何确保网站在不同浏览器和设备上都能提供良好的无障碍体验？ ###

- **遵循WCAG准则**：根据Web内容无障碍指南（WCAG），确保你的网站满足至少AA级标准。
- **使用语义化的HTML**：使用适当的HTML标签来传达其含义，例如使用`<header>`, `<nav>`, `<main>`, `<section>`, `<article>`, `<footer>`等。
- **确保颜色对比度**：确保文本和背景之间有足够的颜色对比，以满足视觉障碍用户的需求。
- **提供文本替代方案**：为非文本内容（如图片、视频）提供替代文本（示例图）或字幕。
- **键盘可访问性**：确保所有功能都可以通过键盘操作，避免使用仅限鼠标的交互。
避免自动播放媒体：不要让音频或视频内容自动播放，或者提供控制机制让用户可以暂停或停止。
- **提供足够的时间**：为用户提供足够的时间来阅读和使用内容，避免突然的时限或自动提交表单。
- **确保导航可预测性**：网站导航应保持一致，链接和按钮的行为应符合用户预期。
- **支持屏幕阅读器和其他辅助技术**：使用适当的ARIA（Accessible Rich Internet Applications）属性来增强现有HTML的功能。
- **响应式设计**：确保网站在不同大小的屏幕上都能正常显示和操作。
- **跨浏览器测试**：在不同的浏览器（如Chrome、Firefox、Safari、Edge等）上测试网站的功能和布局。
- **跨设备测试**：在各种设备上测试网站，包括桌面、平板和手机。
- **用户测试**：邀请残障用户参与测试，收集他们的反馈并优化体验。
- **持续维护和更新**：定期更新内容和代码，以适应新的Web标准和辅助技术。
- **提供反馈机制**：允许用户报告无障碍问题，并确保有快速响应和修复的流程。
- **教育团队**：确保开发团队了解无障碍最佳实践，并在设计和开发过程中考虑这些因素。
- **使用无障碍工具和插件**：利用浏览器扩展和在线工具来检查和改善网站的无障碍性。
- **文档和指南**：创建和维护无障碍开发和设计指南，确保所有团队成员遵循。

## 常用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结构。
- 确保所有交互元素都可以通过键盘访问，并且状态变化能够通过屏幕阅读器通知给用户。


> 以上示例提供了一些基本的无障碍写法，但请记得，无障碍设计是一个广泛且深入的领域，需要根据具体情况进行更细致的设计和实现。
