Install
openclaw skills install @wangzhiming1999/oliver-accessibilityEnhances web accessibility by ensuring semantic HTML, ARIA roles, keyboard navigation, focus management, and screen reader support per WCAG guidelines.
openclaw skills install @wangzhiming1999/oliver-accessibility帮助前端实现符合 WCAG 理念的无障碍:语义化、ARIA、键盘与焦点、屏幕阅读器支持。
| 要点 | 做法 |
|---|---|
| 语义化 HTML | 用 <main> <nav> <article> <button> 等,避免 div 包一切 |
| 标题层级 | 单页内 h1 一个,h2–h6 不跳级 |
| 列表与表格 | <ul>/<ol>、<table> 配 <th scope>,不用 div 仿表格 |
| 要点 | 做法 |
|---|---|
| 可聚焦 | 交互元素可被 Tab 聚焦;自定义控件需 tabIndex={0} 或 -1(程序控制时) |
| 焦点顺序 | DOM 顺序即 Tab 顺序;模态打开时焦点 trap、关闭回原焦点 |
| 可见焦点 | 不用 outline: none 且无替代;提供 :focus-visible 样式 |
| 键盘操作 | 支持 Enter/Space 激活、Esc 关闭、方向键操作列表/菜单 |
| 场景 | 做法 |
|---|---|
| 名称 | 按钮/链接有可读文本或 aria-label/aria-labelledby |
| 状态 | 展开/选中/禁用等用 aria-expanded aria-selected aria-disabled |
| 角色 | 非语义组件用 role 匹配行为(如 role="button" role="dialog") |
| 动态区域 | 重要更新用 aria-live(polite/assertive) |
| 要点 | 做法 |
|---|---|
| 对比度 | 文本与背景至少 4.5:1(大字 3:1);不单靠颜色区分信息 |
| 焦点/状态 | 除颜色外有形状、图标或文字区分 |
| 缩放 | 支持 200% 缩放不破坏布局(rem、弹性布局) |
用户给了什么,决定从哪里开始:
| 用户给的 | 第一步做什么 |
|---|---|
| 具体组件/页面代码 | 直接读代码,按维度逐项检查,输出问题列表 |
| 截图或描述 | 先问:「是要检查现有代码,还是新写一个无障碍版本?」 |
| 只说「做无障碍」 | 问:「是整站审计,还是某个具体页面/组件?有没有合规要求(WCAG 2.1 AA)?」 |
| 已有 axe/Lighthouse 报告 | 读报告,按优先级排问题,给出每条的具体修改方案 |
拿到代码后,按以下顺序检查(不要跳过,不要只看一个维度):
语义与结构
<button> 不是 <div onClick>,<a href> 不是 <span onClick>)<label>?键盘与焦点
outline: none 且没有替代的焦点样式?ARIA
aria-label?aria-live?role 和状态属性?视觉
用户只描述需求、没给代码:直接给出该场景的无障碍实现模板(含 HTML 结构 + ARIA + 键盘交互),不要只给原则列表。
## 无障碍检查与改进报告
### 范围与标准
- 范围:…
- 参考:WCAG 2.1 AA / 自定义
### 问题列表(按优先级)
| 位置/组件 | 问题 | 建议修改 | 优先级 |
|-----------|------|----------|--------|
| … | … | … | 高/中/低 |
### 修改要点汇总
- 语义:…
- 键盘/焦点:…
- ARIA/名称:…
- 视觉/对比:…
### 验证建议
- 工具:axe / Lighthouse / WAVE
- 手动:键盘全流程 + 读屏测试
useRef + focus(),陷阱用 focus-trap-react 或自实现@keydown、ref 聚焦;可配合 vue-a11y 类库