Token导航 LogoToken导航TokenDH.com
开发操作浏览器github未标认证来源可访问许可证需确认审计通过

accessibility无障碍

Agent Skill

用于辅助无障碍访问检查、页面可用性审计和前端可访问性改进。它适合让 Agent 检查语义标签、键盘操作、颜色对比、ARIA 属性和自动化检测结果。使用时需要结合真实页面和浏览器验证,不应只依赖静态文本判断;涉及修复建议时,应兼顾设计系统、组件复用和 WCAG 等通用无障碍规范。

总安装

2,376

周安装

98

GitHub Stars

25

下载量

776
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:accessibility(无障碍)
来源仓库:https://github.com/oimiragieo/agent-studio
仓库路径:skills/accessibility
安装命令:
npx skills add https://github.com/oimiragieo/agent-studio --skill accessibility
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/oimiragieo/agent-studio --skill accessibility

简介

用于辅助无障碍访问检查和前端可访问性改进。适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

  • 适合检查语义标签、键盘操作、颜色对比和 ARIA 属性。
  • 需结合真实页面和浏览器验证,不应仅依赖静态文本判断。
  • 修复建议应兼顾设计系统和 WCAG 规范。
  • accessibility 属于开发类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

Accessibility Skill

Step 1: Semantic HTML Audit

Review component structure for proper semantic elements:

Check for:

  • <header>, <nav>, <main>, <article>, <section>, <aside>, <footer> instead of generic <div>
  • <button> for clickable elements (not <div onclick>)
  • <a> for navigation links
  • <form>, <input>, <label> for forms
  • Proper heading hierarchy (<h1> through <h6>)

Example:

<!-- ❌ BAD -->
<div class="header">
  <div claass="nav">
    <div class="nav-item" onclick="navigate()">Home</div>
  </div>
</div>

<!-- ✅ GOOD -->
<header>
  <nav>
    <a href="/">Home</a>
  </nav>
</header>

Step 2: ARIA Attributes Review

Add ARIA attributess ONLY when semantic HTML is insufficient:

Common Patterns:

Use CaseARIA AttributesExample
Custom buttonrole="button", tabindex="0"<div role="button" tabindex="0">
Modal dialogrole="dialog", aria-modal="true"<div role="dialog" aria-modal="true">
Alertrole="alert", aria-live="assertive"<div role="alert">Error occurred</div>
Tab panelrole="tabpanel", aria-labelledby<div role="tabpanel" aria-labelledby="tab-1">

Rules:

  • Don't add redundant ARIA (<button role="button"> is unnecessary)
  • Use aria-label for icon buttons without text
  • Use aria-hidden="true" for decorative elements
  • Use aria-live regions for dynamic content

Example:

<!-- Icon button needs aria-label -->
<button aria-label="Close dialog">
  <i class="icon-close" aria-hidden="true"></i>
</button>

<!-- Dynamic content needs live region -->
<div role="alert" aria-live="assertive">Form submitted successfully</div>

Step 3: Keyboard Navigation Test

Verify all interactive elements are keyboard accessible:

Requirements:

  • Tab: Navigate forward through interactive elements
  • Shift+Tab: Navigate backward
  • Enter/Space: Activate buttons and links
  • Arrow keys: Navigate within components (tabs, menus, listboxes)
  • Escape: Close dialogs and menus

Focus Management:

  • Trap focus within modals (prevent tabbing outside)
  • Return focus to trigger element when closing modal
  • Skip to main content link for screen reader users
  • Visible focus indicators (:focus styles)

Example:

// Focus trap in modal
function openModal(modal) {
  modal.style.display = 'block';
  const firstFocusable = modal.querySelector('button, input, a');
  firstFocusable.focus();
  trapFocus(modal); // Prevent escape from modal
}

function trapFocus(container) {
  const focusableElements = container.querySelectorAll('button, input, select, textarea, a[href]');
  const firstElement = focusableElements[0];
  const lastElement = focusableElements[focusableElements.length - 1];

  container.addEventListener('keydown', e => {
    if (e.key === 'Tab') {
      if (e.shiftKey && document.activeElement === firstElement) {
        lastElement.focus();
        e.preventDefault();
      } else if (!e.shiftKey && document.activeElement === lastElement) {
        firstElement.focus();
        e.preventDefault();
      }
    }
  });
}

Step 3B: WCAG 2.2 New Success Criteria (October 2023, ISO/IEC 40500:2025)

WCAG 2.2 added 9 new success criteria. Verify compliance with the applicable ones:

2.4.11 Focus Not Obscured — Minimum (AA)

When a keyboard-focused element scrolls into view, it must not be completely hidden by sticky headers/footers or overlapping UI. At least part of the focused element must always be visible.

/* Prevent focus from hiding behind sticky headers */
:focus-visible {
  scroll-margin-top: 80px; /* Height of sticky header + buffer */
  scroll-margin-bottom: 60px; /* Height of sticky footer + buffer */
}

Test: Tab through all interactive elements — verify none are fully hidden behind banners, cookie notices, or sticky bars.

2.4.12 Focus Not Obscured — Enhanced (AAA)

The focused component must be fully visible (not just partially). Sticky UI must not overlap focus at all.

2.4.13 Focus Appearance (AAA)

Focus indicators must have: area of at least the perimeter of the unfocused component times 2 CSS pixels, and contrast ratio of at least 3:1 between focused and unfocused states.

/* Meeting 2.4.13 Focus Appearance (AAA) */
:focus-visible {
  outline: 3px solid #005fcc;
  outline-offset: 2px;
  /* 3px thickness > 2px minimum; #005fcc on white = 7.1:1 contrast */
}

2.5.7 Dragging Movements (AA)

All drag-and-drop functionality MUST have a single-pointer (click/tap) alternative. Users who cannot perform precise drag gestures must be able to accomplish the same task.

<!-- Sortable list: drag alternative via buttons -->
<ul>
  <li draggable="true" id="item-1">
    Item 1
    <button aria-label="Move Item 1 up" onclick="moveUp('item-1')">↑</button>
    <button aria-label="Move Item 1 down" onclick="moveDown('item-1')">↓</button>
  </li>
</ul>

<!-- Slider: keyboard alternative provided natively -->
<input type="range" min="0" max="100" value="50" aria-label="Volume" />
<!-- Alternatively: add an input[type=number] companion -->
<input type="number" min="0" max="100" value="50" aria-label="Volume value" />

Test: Identify all drag interactions. Verify each has a non-drag equivalent (buttons, context menus, keyboard shortcuts).

2.5.8 Target Size — Minimum (AA)

All pointer targets (buttons, links, checkboxes, radio inputs) must be at least 24x24 CSS pixels, OR have sufficient spacing so the 24x24 area does not overlap another target.

/* Ensure minimum target size */
button,
a,
input[type='checkbox'],
input[type='radio'],
select {
  min-width: 24px;
  min-height: 24px;
}

/* Inline links: use padding to increase hit area without visual size change */
a {
  padding: 4px 0;
}

/* Recommended: 44x44 CSS pixels for primary actions (mobile-friendly) */
.primary-action {
  min-width: 44px;
  min-height: 44px;
}

Test: Measure all interactive elements. Verify none fall below 24x24 CSS pixels (use browser DevTools element inspector).

3.2.6 Consistent Help (A)

If a help mechanism (contact link, chat widget, phone number, FAQ link) appears on multiple pages, it must appear in the same relative order in the page content.

<!-- Help mechanism must appear consistently across pages -->
<footer>
  <nav aria-label="Help resources">
    <!-- This order must not change between pages -->
    <a href="/faq">FAQ</a>
    <a href="/contact">Contact Support</a>
    <a href="tel:+18005551234">1-800-555-1234</a>
  </nav>
</footer>

Test: Navigate between pages. Verify help links/widgets appear in the same order each time.

3.3.7 Redundant Entry (A)

Information previously entered by the user must be auto-populated or available for selection when the same information is requested again in the same session/process (e.g., multi-step checkout forms).

<!-- Step 2: Billing address — pre-fill from Step 1 shipping -->
<fieldset>
  <legend>Billing Address</legend>
  <label>
    <input type="checkbox" id="same-as-shipping" />
    Same as shipping address
  </label>
  <!-- When checked: auto-populate billing fields from shipping fields -->
</fieldset>

Exceptions: Re-entering passwords for security confirmation, selecting items from a list.

3.3.8 Accessible Authentication — Minimum (AA)

Authentication processes MUST NOT require users to complete a cognitive function test (solve puzzle, identify images, remember/transcribe a code) unless an accessible alternative is provided.

Allowed alternatives:

  • Biometric authentication (fingerprint, face recognition)
  • Email magic link / SMS OTP (user does not need to recall the code — just copy-paste)
  • OAuth via a third-party provider
  • Password managers allowed (do not block paste in password fields)
<!-- GOOD: Allow paste in password fields -->
<input type="password" id="password" autocomplete="current-password" />
<!-- Do NOT add: onpaste="return false" -->

<!-- GOOD: Provide alternative to image CAPTCHA -->
<div role="group" aria-labelledby="captcha-label">
  <span id="captcha-label">Verify you are human</span>
  <img src="captcha.png" alt="CAPTCHA challenge" />
  <input type="text" aria-describedby="captcha-label" />
  <a href="?audio-captcha">Use audio CAPTCHA instead</a>
  <a href="?email-login">Use email link instead</a>
</div>

Test: Identify all authentication steps. Verify no step requires a cognitive test without an alternative method.

3.3.9 Accessible Authentication — No Exception (AAA)

No cognitive function test is required, even with alternatives provided.

Step 4: Color Contrast Verification

Check all text meets WCAG contrast ratios:

Standards:

Text SizeWCAG AAWCAG AAA
Normal text (< 18pt)4.5:17:1
Large text (≥ 18pt or 14pt bold)3:14.5:1
UI components3:1-

Tools:

  • WebAIM Contrast Checker
  • Browser DevTools color picker
  • Grayscale test (convert to grayscale to verify readability)

Example:

/* ❌ BAD - Innsufficient contrast */
.text {
  color: #777;
  background: #fff;
} /* 4.47:1 - fails AA */

/* ✅ GOOD - Sufficient contrast */
.text {
  color: #595959;
  background: #fff;
} /* 7:1 - passes AAA */

/* ✅ GOOD - Don't rely   on color alone */
.error {
  color: #d00;
  border-left: 4px solid #d00; /* Visual indicator beyond color */
}
.error::before {
  content: '⚠️ ';
} /* Icon indicator */

Step 5: Screen Reader Support

Ensure proper sscreen reader experience:

Alt Text for Images:

<!-- ❌ BAD - Missing or redundant alt -->
<img src="logo.png" />
<img src="decorative.png" alt="decorative image" />

<!-- ✅ GOOD -->
<img src="logo.png" alt="Company y Logo" />
<img src="decorative.png" alt="" role="presentation" />

ARIA Labels for Icon Buttons:

<!-- ❌ BAD - No label for screen readers -->
<button><i class="icon-delete"></i></button>

<!-- ✅ GOOD -->
<but tton aria-label="Delete item">
  <i class="icon-delete" aria-hidden="true"></i>
</button>

Live Regions for Dynamic Content:

<!-- Announce errors immediately -->
<div role="alert" aria-live="assertive">Error: Invalid email address</div>

<!-- Announce status updates politely -->
<div aria-live="polite" aria-atomic="true">Loading results... 3 of 10 loaded</div>

Step 6: Form Accessibility

Ensure all form inputs are properly labeled and validated:

Requirements:

  • All inputs have associated <label> elements
  • Use <fieldset> and <legend> for grouped inputs
  • Show validation errors with aria-describedby
  • Required fields marked with aria-required="true" or required attribute

Example:

<!-- ✅ GOOD Form Structure -->
<form>
  <fieldset>
    <legend>Personal Information</legend>

    <label for="name">Name (required)</label>
    <input id="name" type="textt" required aria-required="true" aria-describedby="name-error" />
    <span id="name-error" role="alert" class="error" aria-live="polite">
      <!-- Error message appears here -->
    </span>

    <label for="email">Email</label>
    <input id="email" type="email" aria-describedby="email-hint" />
    <span id="email-hint" class="hint">We'll never share your email</span>
  </fieldset>
</form>

Step 7: Generate Accessibility Report

Document findings with:

  • Total issues found (categorized by severity)
  • WCAG level compliance status (A, AA, AAA)
  • Specific violations with line numbers
  • Recommended fixes with code examples
  • Testing performed (automated + manual)

Example 1: Review React Component

Skill({ skill: 'accessibility' });

Input: React component with custom modal Output:

  • Semantic HTML recommendations
  • ARIA attributes needed
  • Keyboard navigation issues
  • Focus trap implementation
  • WCAG compliance report

Example 2: Audit Color Contrast

Skill({ skill: 'accessibility', args: 'color-contrast' });

Input: CSS file with color definitions Output:

  • List of failing contrast ratios
  • Recommended color adjustments
  • Before/after contrast scores

Example 3: Form Accessibility Check

Skill({ skill: 'accessibility', args: 'forms' });

Input: Form component Output:

  • Label associations verified
  • Required field indicators
  • Error message patterns
  • Keyboard submission support

<best_practices>

Best Practices

DO

  • Use semantic HTML as foundation (header, nav, main, article)
  • Add ARIA only when semantic HTML insufficient
  • Test with real screen readers (NVDA, JAWS, VoiceOver)
  • Ensure keyboard navigation works without mouse
  • Maintain 4.5:1 contrast for normal text (WCAG AA)
  • Provide text alternatives for all non-text content
  • Use focus indicators (visible:focus-visible styles)
  • Trap focus within modals
  • Announce dynamic content with aria-live
  • Ensure focused elements are not obscured by sticky headers/footers (WCAG 2.2 2.4.11)
  • Provide keyboard/click alternatives for all drag interactions (WCAG 2.2 2.5.7)
  • Size all pointer targets to at least 24x24 CSS pixels (WCAG 2.2 2.5.8)
  • Allow paste in password fields — never block it (WCAG 2.2 3.3.8)
  • Auto-populate previously entered data in multi-step processes (WCAG 2.2 3.3.7)
  • Place help mechanisms in consistent order across pages (WCAG 2.2 3.2.6)

DON'T

  • Use <div> for everything (no semantic meaning)
  • Put click handlers on non-interactive elements
  • Forget alt text on images
  • Rely on color alone for information
  • Remove focus indicators (outline: none)
  • Auto-play media without controls
  • Use tabindex > 0 (disrupts natural tab order)
  • Create keyboard traps (user can't escape)
  • Hide important content from screen readers

Anti-Patterns

Anti-PatternProblemFix
<div onclick>Not keyboard accessibleUse <button>
No alt textScreen readers can't describeAdd meaningful alt attribute
Color-only infoColor blind users miss itAdd text/icons
No focus indicatorsUsers lost in navigationAdd :focus-visible styles
Auto-play mediaDisruptive for screen readersAdd controls, pause option
<div> for everythingNo semantic structureUse semantic HTML
Sticky header without scroll-marginFocus hidden behind sticky bar (2.4.11)Add scroll-margin-top to :focus-visible
Drag-only sortable listsUsers with motor disabilities can't sort (2.5.7)Add Up/Down buttons for each item
16x16px icon buttonsBelow 24x24 minimum target size (2.5.8)Set min-width: 24px; min-height: 24px
CAPTCHA without alternativeCognitive barrier to authentication (3.3.8)Provide email magic link or passkey option
onpaste="return false"Blocks password manager paste (3.3.8)Remove paste block from password fields
Repeated form fields in checkoutRedundant data entry (3.3.7)Auto-populate with previously entered values

Testing Checklist

Before finalizing accessibility review:

WCAG 2.1 AA (existing requirements):

  • All images have alt text (or alt="" for decorative)
  • All interactive elements keyboard accessible
  • Tab order is logical
  • Focus indicators visible
  • Color contrast meets WCAG AA (4.5:1 normal, 3:1 large)
  • Semantic HTML used (nav, main, article, etc.)
  • ARIA labels on icon buttons
  • Forms have proper labels
  • Error messages announced to screen readers
  • Dialogs trap focus and close on Escape
  • Dynamic content uses ARIA live regions
  • Tested with screen reader (NVDA, JAWS, VoiceOver)
  • Tested with keyboard only (no mouse)
  • Tested with browser zoom (200%)

WCAG 2.2 AA (new requirements — October 2023, ISO/IEC 40500:2025):

  • 2.4.11: Focused elements not completely obscured by sticky headers/footers
  • 2.5.7: All drag interactions have a single-pointer (click/tap) alternative
  • 2.5.8: All pointer targets are at least 24x24 CSS pixels
  • 3.2.6: Help mechanisms (chat, contact, phone) appear in same order across pages
  • 3.3.7: Previously entered information is auto-populated in multi-step forms
  • 3.3.8: Authentication does not require cognitive function test (puzzle/CAPTCHA) without alternative
  • Password fields allow paste (do not block paste with onpaste="return false")
  • Focus scroll margin set to prevent sticky UI from hiding keyboard focus </best_practices>

Iron Laws

  1. ALWAYS start with semantic HTML — never reach for ARIA before using the right native element (<button>, <nav>, <main>, etc.).
  2. NEVER remove focus indicatorsoutline: none without a replacement is an immediate WCAG failure. Keyboard users become completely lost.
  3. ALWAYS test with real assistive technology — automated tools (axe, Lighthouse) catch at most 30% of issues. NVDA, JAWS, or VoiceOver testing is mandatory.
  4. NEVER convey information by color alone — always pair color with text, icons, or patterns for users with color vision deficiencies.
  5. ALWAYS apply WCAG 2.2 AA criteria — 2.4.11 (focus not obscured), 2.5.7 (drag alternatives), 2.5.8 (24×24 target size), 3.3.8 (no cognitive auth barriers) are mandatory, not optional.

Integration Points

Agents Using This Skill

  • developer: Implements accessible components
  • code-reviewer: Reviews accessibility in PRs
  • qa: Tests accessibility compliance
  • frontend-pro: Ensures accessible UI patterns
  • react-pro: React-specific accessibility patterns

Related Skills

  • frontend-expert: UI component patterns
  • react-expert: React accessibility patterns
  • mobile-first-design-rules: Touch accessibility

Workflows

  • feature-development-workflow.md: Accessibility review in Review phase
  • code-review-workflow.md: Accessibility checklist

Related References

Memory Protocol (MANDATORY)

Before starting:

cat .claude/context/memory/learnings.md

Check for:

  • Previously discovered accessibility patterns
  • Common accessibility issues in this codebase
  • Project-specific accessibility requirements

After completing:

  • New accessibility pattern → .claude/context/memory/learnings.md
  • Accessibility issue found → .claude/context/memory/issues.md
  • Accessibility decision made → .claude/context/memory/decisions.md
ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.6%
按下载量换算276

Claude

30.63%
按下载量换算238

Cursor

20.15%
按下载量换算156

Gemini CLI

9.48%
按下载量换算74

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills