用途
ss-a11y 用于对组件或页面进行无障碍(accessibility)审计并修复发现的问题。它面向遵循 StyleSeed 约定的代码,属于静态代码审计,而非屏幕阅读器模拟或运行时测试。
主要能力
该技能依据 WCAG 2.2 AA 标准,从四个维度进行审查:
1. 可感知(Perceivable)
- 颜色对比度:普通文本需达到 4.5:1,大号或粗体文本需达到 3:1。示例中检查 text-muted-foreground(#717182)在 bg-background(#FFFFFF)上为 4.6:1,通过。text-brand 在白色背景上的对比度需结合皮肤的品牌色验证。任何不满足比率的自定义颜色都会被标记。
- 非文本对比度:UI 控件与图形需达到 3:1。
- 文本替代:所有 <img> 需要 alt,有意义的图标需要 aria-label。
- 颜色独立性:不能仅靠颜色传达信息,需补充图标或文字。
2. 可操作(Operable)
- 触摸目标:触摸界面上最小为 44x44px(min-h-11 min-w-11)。会标记过小的触摸命中区域,但不会仅因高度为 36–40px 就标记已批准的指针优先桌面控件。指针优先控件遵循已解析的契约,同时保留键盘访问与适用的无障碍底线。图标按钮需要与输入模式相匹配的明确命中区域。
- 键盘导航:所有交互元素必须可键盘访问,Tab 顺序应合乎逻辑。焦点样式为 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2。
- 动效:动画必须尊重 prefers-reduced-motion,示例中通过媒体查询将动画与过渡时长降至 0.01ms。
3. 可理解(Understandable)
- 标签:表单输入必须有可见标签或 aria-label。
- 错误消息:表单错误必须通过 aria-describedby 等以编程方式关联。
- 语言:<html lang="en"> 或项目对应的语言代码。
4. 健壮(Robust)
- 语义 HTML:使用合适的元素,如 <button>、<nav>、<main>、<header>。
- ARIA:使用 Radix UI 组件,它们会自动处理 ARIA。
- 角色:自定义交互元素需要正确的 role 属性。
使用方式
使用前需遵循每会话一次的更新预检(update preflight)。目标通过 $ARGUMENTS 传入。
注册表优先的产物边界:当 .styleseed/project.json 与 .styleseed/artifacts/index.json 存在时,先解析请求的 artifact ID,然后仅读取 .styleseed/bundles/<artifact-id>.md 与 .styleseed/manifests/<artifact-id>.json。对于注册表项目,绝不回退到全局旧版 bundle。旧版项目仅在不存在注册表时使用 .styleseed/effective-rules.md。
适用场景
- 对遵循 StyleSeed 约定的组件或页面进行无障碍审计与修复。
- 需要按 WCAG 2.2 AA 检查颜色对比度、触摸目标、键盘导航、表单标签、语义与 ARIA 等。
限制
- 不适用于通用设计系统合规审查,应使用 /ss-review。
- 不适用于 Nielsen UX 启发式评估,应使用 /ss-audit。
- 不适用于非 StyleSeed 代码(无 data-slot、无语义 token),因为它假定 StyleSeed 约定。
- 不适用于运行时测试,它是静态代码审计,不是屏幕阅读器模拟。
设计系统 Token 参考
| Token | 最低对比度 | 说明 |
|---|---|---|
| --foreground | 7:1+ | 正文文本,需结合皮肤验证 |
| --muted-foreground | 4.5:1+ | 次要文本,需结合皮肤验证 |
| --brand | 4.5:1+ | 强调色,需结合皮肤的品牌色验证 |
| --destructive | 4.5:1+ | 错误,需结合皮肤验证 |
| --success | 3:1+ | 仅大号文本或图标,需结合皮肤验证 |
| --warning | 4.5:1+ | 警告文本,部分皮肤需要更深的变体 |
输出
- 发现的问题:按严重程度(Critical/Major/Minor)列出。
- 自动修复:在可能的情况下直接应用修复。
- 需要人工审查:标记需要人工判断的项目。