mcpField
A
accessibility

accessibility

github.com/krzysztofsurdy设计与 UI3642 次安装2 天前更新
代码仓库

关于 accessibility

面向设计和开发无障碍网页界面的人员,适用于残障人士及其他用户。内容结合 WCAG 指引与语义 HTML、表单、对比度、键盘操作和测试建议。

主要功能

  1. 01WCAG 原则与符合等级
  2. 02语义化 HTML 指引
  3. 03无障碍表单与错误处理模式
  4. 04颜色对比度要求
  5. 05键盘与屏幕阅读器测试

适用场景

  1. 01检查网页界面的 WCAG 问题
  2. 02构建无障碍表单与验证
  3. 03检查键盘导航和焦点状态
  4. 04规划无障碍测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/krzysztofsurdy/code-virtuoso --skill accessibility

安装后在 Claude Code 中输入/accessibility确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
aria-patterns.md
keyboard-and-focus.md
testing-strategies.md

详细介绍

Web 无障碍

无障碍是一项质量属性,而不是可以留到最后再添加的功能。从编写第一行标记时就应考虑无障碍。无障碍界面让有视觉、运动、听觉或认知障碍的人能够感知、浏览和使用你的应用。它们也有助于键盘重度用户、网络连接较慢的人、暂时受伤的用户,以及身处受限环境中的任何人。

无障碍为何重要

维度影响
法律大多数司法辖区的法律(ADA、EAA、Section 508、EN 301 549)都要求数字产品具备无障碍能力。不合规会带来诉讼风险和经济处罚。
道德全球约有 16% 的人口存在某种形式的残障。将他们排除在数字服务之外是一种选择,而非不可避免的结果。
业务无障碍产品能触达更广泛的受众、改善 SEO(结构化内容有助于爬虫抓取)、降低支持成本,并且通常与更高的整体易用性评分相关。
技术质量无障碍要求促使代码使用整洁的标记、恰当的语义和关注点分离,从而提升可维护性。

WCAG 原则:POUR

《Web 内容无障碍指南》将所有成功标准归纳为四项原则。每项无障碍要求至少对应其中一项。

原则所回答的问题示例
可感知用户能否感知内容?图片的文本替代内容、视频字幕、足够的颜色对比度、可调整大小的文本
可操作用户能否与每个控件交互?可通过键盘操作、有充足时间完成任务、不含会诱发癫痫的动画、清晰的导航
可理解用户能否理解内容和 UI 行为?易读的语言、可预测的导航、输入辅助和错误消息
健壮能否兼容各种辅助技术?有效的标记、恰当使用 ARIA、兼容屏幕阅读器和其他工具

符合性等级

WCAG 定义了三个等级。每个更高等级都包含其下方等级的全部标准。

等级目标受众典型要求
A最低标准,消除最严重的障碍大多数法律和采购要求从此等级开始
AA行业标准,解决大多数用户遇到的大多数障碍ADA、EAA、Section 508 以及大多数组织政策均要求达到此等级
AAA最高标准,并非所有内容类型都能达到理想目标;在可行的情况下有选择地应用

对于大多数项目,以 AA 级为目标。它能满足大多数实际需求,并避开与某些内容类型冲突的要求。


语义 HTML 基础

原生 HTML 元素自带语义、键盘行为和屏幕阅读器播报。使用正确的元素是最有效的无障碍技巧。

不要使用应使用原因
<div onclick="..."><button>按钮可获得焦点,会播报其角色,并能响应 Enter 和 Space
<span class="link"><a href="...">链接会被播报为“链接”,支持鼠标中键点击,并会出现在链接列表中
<div class="header"><header>、<nav>、<main>、<footer>地标元素让屏幕阅读器用户能够在页面区域之间跳转
<div class="list">带有 <li> 的 <ul> / <ol>列表会播报项目总数和当前位置(“第 3 项,共 7 项”)
<div class="table">带有 <th> 的 <table>表头会将数据单元格与其标签关联起来,供屏幕阅读器读取
用于输入框的样式化 <div><input>、<select>、<textarea>原生表单控件内置标签关联、验证和辅助技术支持
标题层级

标题会创建一个大纲,屏幕阅读器用户可以像浏览目录一样浏览大纲。

  • 每个页面使用一个 <h1> 描述页面用途
  • 不要跳过层级(例如,不要从 <h2> 跳到 <h4>)
  • 使用标题构建结构,而非调整视觉样式。外观由 CSS 控制

常见的无障碍问题

问题影响修复方法
图片缺少替代文本屏幕阅读器会读出文件名,或者不读任何内容添加描述性的 alt;纯装饰图片使用 alt=""
颜色对比度不足低视力用户无法阅读文本普通文本达到 4.5:1,大号文本达到 3:1(AA)
无法通过键盘操作交互元素键盘和开关设备用户会完全无法操作使用原生交互元素,或添加 tabindex="0" 和按键处理程序
表单标签缺失屏幕阅读器无法说明输入框的用途使用 for/id 关联每个输入框与 <label>,或将输入框嵌套在标签中
媒体自动播放会使屏幕阅读器用户感到不适,也会对有认知障碍的用户造成伤害切勿自动播放;如无法避免,请提供醒目的暂停/停止控件
缺少跳转链接键盘用户每次打开页面都必须逐项浏览整个导航栏将跳转到主要内容的链接设为页面中第一个可聚焦元素
缺少焦点指示器键盘用户会无法确定自己在页面上的位置移除 outline 时,务必提供醒目的自定义替代样式
缺少页面语言屏幕阅读器可能会误读内容在 <html> 上设置 lang 属性(例如,lang="en")
动态内容无法访问屏幕阅读器不会播报页面加载后发生的更改使用 ARIA 实时区域播报动态更新
缺少文档标题屏幕阅读器用户切换标签页时无法识别页面为每个页面设置唯一且描述清晰的 <title>
触控目标过小运动障碍用户无法可靠地点按小型控件最小尺寸为 24x24 CSS 像素(AA);为方便操作,建议使用 44x44
动效和动画可能导致眩晕、恶心或癫痫发作遵循 prefers-reduced-motion 媒体查询;闪烁频率不得超过每秒 3 次

无障碍表单

表单中的无障碍问题危害最大:用户可能无法完成购买、注册或其他关键工作流。

关联标签

每个表单控件都需要以编程方式关联标签:


<label for="email">Email address</label>
<input type="email" id="email" name="email" required>


<label>
  Email address
  <input type="email" name="email" required>
</label>
错误处理
  • 在相关字段旁内联显示错误,而不是只在表单顶部显示
  • 使用 aria-describedby 将错误消息与对应的输入框关联
  • 在未通过验证的字段上使用 aria-invalid="true"
  • 编写清晰、具体的错误文本(例如“请输入格式为 [email protected] 的电子邮件地址”,而不是“输入无效”)
必填字段
  • 使用 required 属性(原生验证)或 aria-required="true"(自定义验证)标记必填字段
  • 不要只依赖颜色或星号表示必填状态。请添加“(必填)”等文字

颜色与对比度

绝不能仅通过颜色传达信息。请结合文字、图标、图案或其他视觉提示。

对比度比例(WCAG AA):

元素最低比例
普通文本(小于 18pt / 粗体小于 14pt)4.5:1
大号文本(18pt 及以上 / 粗体 14pt 及以上)3:1
UI 组件和图形对象3:1

快速改进:

  • 使用浏览器开发者工具检查对比度(Chrome DevTools 会在悬停时显示比例)
  • 遵循 prefers-color-scheme,支持深色模式
  • 使用模拟色盲(红色盲、绿色盲、蓝黄色盲)测试设计

参考文件

参考资料内容
ARIA 模式何时使用 ARIA、角色和属性、组件模式(标签页、模态框、手风琴、下拉菜单)、实时区域、地标角色
键盘与焦点Tab 顺序、方向键导航、焦点锁定、跳过链接、焦点恢复、可见的焦点指示器、触控目标
测试策略自动化工具、手动测试清单、屏幕阅读器测试、对比度验证、无障碍树、CI 集成

与其他技能的集成

情况推荐技能
构建能够提供无障碍错误响应的 REST 或 GraphQL APIapi-design
会影响无障碍性的安全标头(CSP、iframe 限制)security
使用单元测试和集成测试测试无障碍组件testing
不牺牲无障碍性的性能优化performance

评论

支持 Markdown