关于 a11y-audit
Accessibility Audit 是面向开发者的技能,用于检查 HTML 和 CSS 是否符合 WCAG 2.1 无障碍标准。它结合标记扫描与颜色对比度检查,并支持 JSON 输出和 CI 严格门禁。
主要功能
- 01扫描 HTML 中的 WCAG 2.1 问题
- 02检查图片替代文本与标题层级
- 03验证表单、ARIA 和地标
- 04测量 AA 与 AAA 颜色对比度
- 05建议符合标准的替代颜色
- 06支持 JSON 输出和严格模式
适用场景
- 01开发期间审计 HTML 模板
- 02发布前检查样式表对比度
- 03在 CI 中拦截 A 级违规
- 04修复无障碍问题后重新扫描
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ borghei/ claude-skills --skill a11y-audit安装后在 Claude Code 中输入/a11y-audit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/sample-page.htmlreferences/wcag-guidelines.mdscripts/a11y_scanner.pycontrast_checker.py详细介绍
无障碍审计
类别: 工程 领域: Web 无障碍
概述
无障碍审计技能可自动扫描 HTML 文件,检查是否违反 WCAG 2.1 合规要求,并依据 AA/AAA 标准检查颜色对比度。它能在开发早期发现缺失的替代文本、不正确的标题层级、未标注的表单输入项,以及不足的颜色对比度。
首先确认
运行审计前,请确认以下输入。如果任何信息未知或含糊不清,请询问,不要自行假设:
- 目标与范围 — 要扫描哪些 HTML 文件、目录或 CSS(决定检查内容以及
--file/--dir/--css参数) - 合规等级 — 目标为 A、AA 还是 AAA(决定对比度阈值,以及哪些违规项属于 CRITICAL、WARNING 或 INFO)
- 使用场景 — 一次性修复还是 CI 门禁(决定是否使用
--strict门禁及 JSON 输出)
停止规则:只询问最能影响输出的 2-3 项。如果用户说“直接起草”,则继续处理,并在文档开头列出你的假设。
快速开始
# Scan HTML for WCAG violations
python scripts/a11y_scanner.py --file index.html
# Scan a directory of HTML files
python scripts/a11y_scanner.py --dir ./src/templates
# Check color contrast
python scripts/contrast_checker.py --foreground "#333333" --background "#ffffff"
# Parse CSS file for contrast issues
python scripts/contrast_checker.py --css styles.css
# JSON output for CI
python scripts/a11y_scanner.py --file index.html --format json
工具概览
a11y_scanner.py
扫描 HTML 文件中的 WCAG 2.1 违规项,包括结构、语义和交互元素问题。
| 功能 | 描述 |
|---|---|
| 图片替代文本 | 检测非装饰性图片是否缺少或具有空的替代文本 |
| 标题层级 | 验证 h1-h6 级别是否连续 |
| 表单标签 | 确保输入项具有关联的 label 元素 |
| ARIA 属性 | 检查 ARIA 用法是否正确 |
| 链接文本 | 标记“点击此处”或“阅读更多”等泛化文本 |
| 语言属性 | 检查 html 元素是否包含 lang |
| Tab 顺序 | 检测正数 tabindex 值 |
| 地标 | 验证语义地标的使用情况 |
contrast_checker.py
依据 WCAG AA 和 AAA 阈值检查颜色对比度。
| 功能 | 描述 |
|---|---|
| 比率计算 | 计算相对亮度对比度比率 |
| AA 合规 | 普通文本为 4.5:1,大号文本为 3:1 |
| AAA 合规 | 普通文本为 7:1,大号文本为 4.5:1 |
| CSS 解析 | 从 CSS 中提取颜色/背景颜色对 |
| 颜色建议 | 推荐最接近的合规颜色 |
工作流
完整无障碍审计
- 扫描 HTML - 对所有模板运行 a11y_scanner.py
- 检查对比度 - 对样式表运行 contrast_checker.py
- 分类处理 - 优先处理 A 级违规项
- 修复 - 修复关键问题(替代文本、表单标签、标题)
- 重新扫描 - 验证修复通过所有检查
CI 集成
# Gate on Level A violations
python scripts/a11y_scanner.py --dir ./templates --format json --level A --strict
# Check CSS contrast
python scripts/contrast_checker.py --css ./static/css/main.css --format json
开发工作流
- 提交前 - 快速扫描有更改的 HTML 文件
- PR 审查 - 将完整扫描纳入审查清单
- 预发布审计 - 发布前进行全面扫描
- 监控 - 定期安排审计
参考文档
- WCAG 指南 - 合规等级、成功标准、常见修复方法
常见模式速查
WCAG 等级
| 等级 | 描述 | 典型要求 |
|---|---|---|
| A | 最低基线 | 法律合规 |
| AA | 行业标准 | 大多数法规、ADA |
| AAA | 增强级 | 最佳实践目标 |
对比度比率
| 场景 | AA | AAA |
|---|---|---|
| 普通文本(<18pt) | 4.5:1 | 7:1 |
| 大号文本(>=18pt 粗体或 >=14pt) | 3:1 | 4.5:1 |
| UI 组件 | 3:1 | 3:1 |
快速修复
| 问题 | 修复方法 |
|---|---|
| 缺少替代文本 | <img alt="Description of image"> |
| 跳过标题级别 | 按顺序使用 h1 到 h6 |
| 没有表单标签 | <label for="inputId">Label</label> |
| 链接文本泛化 | 将“点击此处”替换为描述性文本 |
| 缺少 lang | <html lang="en"> |
| 正数 tabindex | 仅使用 tabindex="0" 或 tabindex="-1" |
严重级别映射
- CRITICAL - WCAG A 级违规
- WARNING - WCAG AA 级违规
- INFO - WCAG AAA 级建议
评论
支持 Markdown