Communitygithub.com

無障礙與 WCAG 合規技能集

涵蓋 WCAG 2.2 無障礙網頁設計模式的技能集,包含 ARIA、鍵盤導航、螢幕閱讀器支援與測試方法。

無障礙與 WCAG 合規技能集 是什麼?

這套技能集專注於協助開發者遵循 WCAG 2.2 標準,建立具備高度無障礙性的網頁應用程式。它涵蓋了語意化 HTML 標記、ARIA 角色與屬性、鍵盤導航事件處理、表單無障礙設計以及色彩對比度等關鍵領域。透過提供 React/JSX 範例、CSS 實用技巧與反模式清單,開發者可以學會如何讓所有使用者(包括依賴輔助技術者)都能順暢地與介面互動。此技能支援 React 框架(TypeScript),並可在任何現代網頁開發環境中使用。實作時,建議搭配 VoiceOver 或 NVDA 等螢幕閱讀器進行測試,以確保完整合規。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SamuelChien/mega-skills-collection/tree/HEAD/accessibility-wcag

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

無障礙與 WCAG

語意化 HTML

<!-- 使用語意元素取代泛型 div -->
<header>
  <nav aria-label="主要導航">
    <ul>
      <li><a href="/" aria-current="page">首頁</a></li>
      <li><a href="/products">產品</a></li>
      <li><a href="/about">關於我們</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <h1>產品詳細資訊</h1>
    <section aria-labelledby="specs-heading">
      <h2 id="specs-heading">規格</h2>
      <dl>
        <dt>重量</dt>
        <dd>1.2 公斤</dd>
        <dt>尺寸</dt>
        <dd>30 x 20 x 10 公分</dd>
      </dl>
    </section>
  </article>
</main>

<footer>
  <p>&copy; 2024 公司名稱</p>
</footer>

使用 <nav>、<main>、<article>、<section>、<aside> 取代 <div> 作為地標。螢幕閱讀器會利用這些元素來導覽頁面。

ARIA 模式

function Modal({ isOpen, onClose, title, children }) {
  if (!isOpen) return null;

  return (
    <div
      role="dialog"
      aria-modal="true"
      aria-labelledby="modal-title"
      onKeyDown={(e) => e.key === "Escape" && onClose()}
    >
      <h2 id="modal-title">{title}</h2>
      <div>{children}</div>
      <button onClick={onClose} aria-label="關閉對話框">
        <XIcon aria-hidden="true" />
      </button>
    </div>
  );
}

function Tabs({ tabs, activeIndex, onChange }) {
  return (
    <div>
      <div role="tablist" aria-label="設定區段">
        {tabs.map((tab, i) => (
          <button
            key={tab.id}
            role="tab"
            id={`tab-${tab.id}`}
            aria-selected={i === activeIndex}
            aria-controls={`panel-${tab.id}`}
            tabIndex={i === activeIndex ? 0 : -1}
            onClick={() => onChange(i)}
            onKeyDown={(e) => handleArrowKeys(e, i, tabs.length, onChange)}
          >
            {tab.label}
          </button>
        ))}
      </div>
      {tabs.map((tab, i) => (
        <div
          key={tab.id}
          role="tabpanel"
          id={`panel-${tab.id}`}
          aria-labelledby={`tab-${tab.id}`}
          hidden={i !== activeIndex}
          tabIndex={0}
        >
          {tab.content}
        </div>
      ))}
    </div>
  );
}

鍵盤導航

function handleArrowKeys(
  event: React.KeyboardEvent,
  currentIndex: number,
  totalItems: number,
  onSelect: (index: number) => void
) {
  let newIndex = currentIndex;

  switch (event.key) {
    case "ArrowRight":
    case "ArrowDown":
      newIndex = (currentIndex + 1) % totalItems;
      break;
    case "ArrowLeft":
    case "ArrowUp":
      newIndex = (currentIndex - 1 + totalItems) % totalItems;
      break;
    case "Home":
      newIndex = 0;
      break;
    case "End":
      newIndex = totalItems - 1;
      break;
    default:
      return;
  }

  event.preventDefault();
  onSelect(newIndex);
}

所有的互動元素都必須能透過鍵盤到達。使用 Tab 進行焦點導航,Enter/Space 進行觸發,箭頭鍵進行元件內導航。

表單無障礙

function SignupForm() {
  return (
    <form aria-labelledby="form-title" noValidate>
      <h2 id="form-title">建立帳戶</h2>

      <div>
        <label htmlFor="email">電子郵件地址</label>
        <input
          id="email"
          type="email"
          required
          aria-required="true"
          aria-describedby="email-hint email-error"
          aria-invalid={hasError ? "true" : undefined}
        />
        <p id="email-hint">我們絕不會分享您的電子郵件。</p>
        {hasError && (
          <p id="email-error" role="alert">
            請輸入有效的電子郵件地址。
          </p>
        )}
      </div>

      <button type="submit">建立帳戶</button>
    </form>
  );
}

色彩與對比度

:root {
  --text-primary: #1a1a1a;      /* 在白色背景上 15.3:1 */
  --text-secondary: #595959;    /* 在白色背景上 7.0:1 */
  --text-on-primary: #ffffff;   /* 確保在品牌色上達到 4.5:1 */
  --border-focus: #0066cc;      /* 明顯的焦點環 */
}

*:focus-visible {
  outline: 3px solid var(--border-focus);
  outline-offset: 2px;
}

.error-message {
  color: #d32f2f;
  /* 不要只依賴顏色傳達資訊 - 加入圖示或文字前綴 */
}
.error-message::before {
  content: "錯誤:";
  font-weight: bold;
}

WCAG AA 要求一般文字對比度為 4.5:1,大文字(18px 粗體或 24px 一般體)為 3:1。

反模式

  • 使用 div 和 span 作為可點擊元素,而非 button 或 a
  • 移除焦點外框卻未提供替代指示器
  • 僅靠顏色傳達資訊(紅色表示錯誤、綠色表示成功)
  • 在元素已有可見文字標籤時仍使用 aria-label
  • 自動播放媒體但未提供暫停機制
  • 缺少讓鍵盤使用者跳過導覽的連結

檢查清單

  • 所有互動元素均可透過鍵盤操作(Tab、Enter、Escape、箭頭鍵)
  • 使用語意化 HTML 地標(nav、main、article、section)
  • 圖片具備描述性的 alt 文字(裝飾性圖片則設為 alt="")
  • 色彩對比度符合 WCAG AA 標準(一般文字 4.5:1,大文字 3:1)
  • 所有互動元素皆有可見的焦點指示器
  • 表單輸入欄位已關聯對應的 <label> 元素
  • 錯誤訊息透過 role="alert" 向螢幕閱讀器宣告
  • 使用螢幕閱讀器(VoiceOver、NVDA)及僅鍵盤模式測試頁面

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

SamuelChien/mega-skills-collection

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

SamuelChien/mega-skills-collection

Arquitecto de Soluciones Principal y Consultor Tecnológico de Andru.ia. Diagnostica y traza la hoja de ruta óptima para proyectos de IA en español.

SamuelChien/mega-skills-collection

Ingeniero de Sistemas de Andru.ia. Diseña, redacta y despliega nuevas habilidades (skills) dentro del repositorio siguiendo el Estándar de Diamante.

SamuelChien/mega-skills-collection

Estratega de Inteligencia de Dominio de Andru.ia. Analiza el nicho específico de un proyecto para inyectar conocimientos, regulaciones y estándares únicos del sector. Actívalo tras definir el nicho.

SamuelChien/mega-skills-collection

2D game development principles. Sprites, tilemaps, physics, camera.

SamuelChien/mega-skills-collection

3D game development principles. Rendering, shaders, physics, cameras.

SamuelChien/mega-skills-collection

Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences.

SamuelChien/mega-skills-collection

Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases. Use when auditing accessibility, fixing a11y violations, checking color contrast, generating compliance reports, or integrating accessibility checks into CI/CD pipelines.

SamuelChien/mega-skills-collection

Ab Test Analyzer - Auto-activating skill for Data Analytics. Triggers on: ab test analyzer, ab test analyzer Part of the Data Analytics skill category.

SamuelChien/mega-skills-collection

A B Test Config Creator - Auto-activating skill for ML Deployment. Triggers on: a b test config creator, a b test config creator Part of the ML Deployment skill category.

SamuelChien/mega-skills-collection

When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "conversion experiment," "statistical significance," or "test this." For tracking implementation, see analytics-tracking.

SamuelChien/mega-skills-collection

Acceptance Criteria Creator - Auto-activating skill for Enterprise Workflows. Triggers on: acceptance criteria creator, acceptance criteria creator Part of the Enterprise Workflows skill category.

SamuelChien/mega-skills-collection

Use when a coding task should be driven end-to-end from issue intake through implementation, review, deployment, and acceptance verification with minimal human re-intervention.

SamuelChien/mega-skills-collection

Accessibility Audit Runner - Auto-activating skill for Frontend Development. Triggers on: accessibility audit runner, accessibility audit runner Part of the Frontend Development skill category.

SamuelChien/mega-skills-collection

You are an accessibility expert specializing in WCAG compliance, inclusive design, and assistive technology compatibility. Conduct audits, identify barriers, and provide remediation guidance.

SamuelChien/mega-skills-collection

Manage Discord channel access — approve pairings, edit allowlists, set DM/group policy. Use when the user asks to pair, approve someone, check who's allowed, or change policy for the Discord channel.

SamuelChien/mega-skills-collection

Create unified specification packages across Business, Development, and Design teams. Staged elaboration (L0 Vision → L1 Requirements → L2 Team Detail → L3 Acceptance Criteria) to build shared understanding. Does not write code.

SamuelChien/mega-skills-collection

Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM. Trigger with "research [company]", "look up [person]", "intel on [prospect]", "who is [name] at [company]", or "tell me about [company]".

SamuelChien/mega-skills-collection

Create forensically sound bit-for-bit disk images using dd and dcfldd while preserving evidence integrity through hash verification.

SamuelChien/mega-skills-collection

Validate messaging consistency across website, GitHub repos, and local documentation generating read-only discrepancy reports. Use when checking content alignment or finding mixed messaging. Trigger with phrases like "check consistency", "validate documentation", or "audit messaging".

相關技能