关于 scan-code-accessibility-figma
scan-code-accessibility-figma 使用 axe-core 和 JSDOM 扫描 HTML 的结构与语义无障碍问题,适用于 Figma 转代码工作流。它可输出用于设计一致性检查的数据;由于 JSDOM 没有布局引擎,因此不检查视觉规则。
主要功能
- 01使用 axe-core 扫描 HTML
- 02按 WCAG 标签筛选
- 03限定 CSS 选择器范围
- 04以 JSON 报告违规项
- 05输出 codeSpec 无障碍数据
适用场景
- 01检查生成组件 HTML 的无障碍性
- 02查找缺失的标签、角色或替代文本
- 03仅检查指定组件
- 04为一致性检查准备无障碍数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ southleft/ skills-for-figma --skill scan-code-accessibility-figma安装后在 Claude Code 中输入/scan-code-accessibility-figma确认已加载。
附带文件scripts/package.jsonscripts/scan.mjs
详细介绍
scan-code-accessibility-figma — 使用 axe-core + JSDOM 扫描 HTML
使用 JSDOM 对 HTML 字符串运行 axe-core(Deque 的无障碍引擎)。这是无障碍实践中的代码侧:它会检查 Figma 到代码工作流生成的标记。它与 lint-design-figma(设计侧)配合,覆盖两端。
这不是 use_figma 技能。 它在纯 Node 中运行——无需 Figma 文件,也无需 Plugin API。规则数据库由 axe-core 管理;本技能绝不会自行编造规则。
技能边界
- 设计侧视觉无障碍(对比度、焦点环、目标尺寸、仅依赖颜色)→ 使用
lint-design-figma。这些规则在此处特意禁用。 - 单个组件的设计评分卡 → 使用
audit-accessibility-figma。 - 设计与代码的匹配度 → 使用
check-design-parity-figma(将本次扫描可输出的codeSpec.accessibility传给它)。 - 本技能不使用
use_figma,因此figma-use约定不适用。
为什么禁用视觉规则
JSDOM 提供 DOM,但没有布局引擎,也无法获取计算后的视觉样式——没有可用于测量的像素或渲染颜色。因此,axe 的视觉规则始终会给出“未完成”或错误的结果。本次扫描会明确禁用这些规则:
color-contrast和color-contrast-enhanced— 需要渲染后的颜色。link-in-text-block— 需要周围文本的布局。target-size— 需要渲染后的盒模型尺寸。
所有结构和语义规则(ARIA、角色、名称、标签、alt、标题、地标、lang、重复 ID、tabindex,共约 50 条规则)都会正常运行。对于视觉方面,请对设计运行 lint-design-figma。
用法
- 安装一次依赖(在此技能的
scripts/目录中):
安装cd scripts && npm installaxe-core和jsdom。 - 运行扫描,检查 HTML 文件或内联字符串:
可选标志:node scan.mjs path/to/component.html node scan.mjs --html '<button>Save</button>'--tags wcag22aa— 按 WCAG 标签集筛选(wcag2a、wcag2aa、wcag21aa、wcag22aa、best-practice)。可重复使用或用逗号分隔。--context '#my-component'— 将扫描范围限制为 CSS 选择器。--include-passing— 包含通过、不完整和不适用规则的数量。--map-to-codespec— 同时输出codeSpecAccessibility对象(语义元素、角色、aria-label、focusVisible、键盘交互、禁用/错误状态支持),可直接放入check-design-parity-figma的codeSpec.accessibility。
- 读取 stdout 中的 JSON:按规则分组的违规项,包含
severity(根据 axe 的impact映射为 critical/warning/info)、wcagTags、helpUrl,以及每条规则最多 10 个问题节点,另附summary。
扫描前,纯 HTML 片段会自动包装为 <!DOCTYPE html><html lang="en">…<body>…。
输出格式
{
"engine": "axe-core", "version": "4.x", "mode": "jsdom-structural",
"note": "JSDOM mode: structural/semantic checks only. Visual rules disabled — use lint-design-figma.",
"categories": [ { "rule": "button-name", "severity": "critical", "count": 1, "description": "...", "wcagTags": ["wcag2a","wcag412"], "helpUrl": "...", "nodes": [ { "html": "...", "target": ["button"], "failureSummary": "..." } ] } ],
"summary": { "critical": 1, "warning": 0, "info": 0, "total": 1 }
}
严重性映射:axe 的 critical/serious → critical,moderate → warning,minor → info。