SuperAPI AI 工具集

accessibility-audit

测试与质量

查看项目

更新于 10-16 09:17

技能介绍

用途

Accessibility Audit 用于审查 UI 与标记的可访问性,并给出与 WCAG 对齐的具体修复建议,使所有用户都能感知、操作和理解界面。

何时启用

  • 用户要求“accessibility”“a11y”“WCAG”或“screen reader support”
  • 发布新页面或组件之前
  • 审查表单、模态框或交互式 UI
  • 设计或 UI 变更影响交互或内容之后

工作流程

  1. 定义范围——要审查的页面、组件或流程(例如登录表单、报表表格、模态对话框)。
  2. 检查每个领域——语义 HTML、键盘、标签与名称、颜色与对比度、动态内容、动效。使用下方检查清单。
  3. 记录发现——位置(组件/文件或元素类型)、WCAG 准则或原则、问题、影响、建议修复。严重程度:critical / major / minor。
  4. 建议修复——尽可能给出代码片段或属性修改。在原生 HTML 和正确 ARIA 足够时,优先使用它们而非自定义组件。
  5. 建议后续——建议使用自动化工具(如 axe、Lighthouse)和手动测试(仅键盘、屏幕阅读器)以获得更广覆盖。不要声称单次审查即可实现完整 WCAG 合规。

重点领域与检查清单

1. 语义 HTML 与结构

  • 每页一个 <h1>;标题层级按顺序(不跳过 2 → 4)。
  • 地标:适当使用 <main>、<nav>、<aside>、<footer>。
  • 列表使用 <ul>/<ol>/<li>;表格使用 <th>、scope,如适用使用 caption。
  • 按钮是 <button> 或 <input type="submit">;链接是 <a href="...">。不要在没有 role、键盘和焦点处理的情况下使用 <div onclick> 执行操作。
  • 表单控件具有正确的 type 和分组(组使用 <fieldset>、<legend>)。

2. 键盘

  • 所有交互元素可聚焦(除非为模态框管理,否则按钮/链接上不要用 tabindex="-1")。
  • 焦点顺序合乎逻辑(与视觉顺序一致或被显式管理)。
  • 可见焦点指示器(outline 或自定义样式);不要在没有替代方案的情况下用 outline: none 移除。
  • 无键盘陷阱:用户可以 Tab 出模态框和菜单;预期处 Escape 可关闭。
  • 自定义组件(标签页、手风琴、菜单)可用键盘操作(Enter/Space 激活,如适用使用方向键)。

3. 标签与名称

  • 每个表单输入都有可见的 <label> 或 aria-label;标签已关联(例如 for/id 或包裹)。
  • 按钮和链接有清晰、唯一的名称(文本内容或 aria-label)。没有上下文的“Click here”或“Read more”不可用。
  • 图片:有意义的图片 alt 描述内容;装饰性图片 alt="" 或 role="presentation"。
  • iframe 和嵌入内容有 title 或 aria-label。

4. 颜色与对比度

  • 文本满足对比度(例如普通文本 4.5:1,大文本 3:1;UI 组件 3:1)。对照背景检查。
  • 信息不只靠颜色传达(例如必填字段、错误、状态)。同时使用图标、文本或图案。
  • 焦点指示器可见,且不只依赖颜色变化。

5. 动态内容与焦点

  • 出现或更新的内容(例如 toast、实时结果)会被播报:视情况使用 aria-live="polite" 或 aria-live="assertive"。
  • 模态框和对话框:打开时焦点移入模态框;焦点被困在其中;关闭时焦点返回触发元素;按模式聚焦第一个可聚焦元素或显式 autoFocus。
  • 状态被传达:展开/折叠(aria-expanded)、选中(aria-selected)、当前(aria-current)、禁用(disabled 或 aria-disabled)。

6. 动效

  • 如果项目支持:尊重 prefers-reduced-motion(禁用或减少动画)。可选但推荐用于前庭敏感人群。

输出格式

对每个问题:

**[位置:文件或组件/元素]**
- **问题:** [哪里错了。]
- **WCAG / 原则:** [准则或原则,例如 1.3.1 Info and Relationships、2.1.1 Keyboard。]
- **影响:** [谁受影响以及如何受影响。]
- **建议:** [具体修复:代码或属性。]
- **严重程度:** Critical | Major | Minor

摘要:“已审查:[范围]。发现 X 个 critical、Y 个 major、Z 个 minor。建议自动化扫描(axe/Lighthouse)和键盘/屏幕阅读器测试。”

严重程度

  • Critical——阻塞核心任务(例如无法提交表单、无法用键盘导航、必填字段无标签)。发布前修复。
  • Major——显著障碍(例如对比度差、缺少标题、顺序混乱)。尽快修复。
  • Minor——改进项(例如冗余标签、轻微对比度)。待办或修改该组件时修复。

好与坏示例

按钮:

<!-- BAD -->
<div onclick="submit()">Submit</div>

<!-- GOOD -->
<button type="submit">Submit</button>

图片:

<!-- Decorative -->
<img src="decoration.svg" alt="" role="presentation">

<!-- Meaningful -->
<img src="chart.png" alt="Bar chart showing revenue up 20% in Q4">

表单:

<!-- BAD -->
<input type="email" placeholder="Email">

<!-- GOOD -->
<label for="email">Email</label>
<input id="email" type="email" placeholder="you@example.com">

规则

  • 不要声称完整合规——表述为“在审查范围内发现的问题”。建议自动化和手动测试以获得完整覆盖。
  • 优先使用原生 HTML——使用 <button>、<label>、<main> 等。当语义无法用 HTML 表达时使用 ARIA(例如自定义手风琴上的 aria-expanded)。
  • 组件库——如果项目使用组件库(例如 Radix、MUI),注意库的无障碍模式(焦点陷阱、角色),并确保正确使用,而不是重新实现。

完成前检查清单

  • 范围已明确定义
  • 每个发现都有位置、问题、WCAG 引用、建议、严重程度
  • 至少覆盖语义结构、键盘和标签/名称
  • 建议后续(自动化 + 手动测试)
  • 没有完整审计就不写“完全符合 WCAG 2.1 AAA”

反模式

反模式 更好的做法
只检查颜色对比度 覆盖键盘、标签、结构和动态内容
到处建议“添加 aria-label” 优先可见标签和语义 HTML;必要时使用 ARIA
忽略模态框中的焦点顺序 记录焦点陷阱和返回焦点行为
仅代码审查后就声称合规 建议 axe/Lighthouse 和真实辅助技术测试