← ClaudeAtlas

a11y-aria-patternslisted

Use this skill when the user asks about ARIA, ARIA roles, ARIA attributes, aria-label, aria-labelledby, aria-describedby, aria-expanded, aria-hidden, aria-live, aria-required, aria-invalid, "WAI-ARIA", "ARIA Authoring Practices", "APG pattern", "accessible name", "accessible description", live regions, custom widgets, dialogs, menus, tabs, accordions, comboboxes, tooltips, tree views, carousels, or is building any custom interactive component that requires ARIA roles and keyboard behavior beyond native HTML elements.
RadOrigin-LLC/RAD-Claude-Skills · ★ 5 · Web & Frontend · score 73
Install: claude install-skill RadOrigin-LLC/RAD-Claude-Skills
# ARIA Patterns and Authoring Practices > **Skill type: Reference.** This is teaching/pattern content — it explains the WAI-ARIA APG keyboard contracts and ARIA state rules for custom widgets. It is not a scanner. For static review of existing ARIA usage, use `/a11y-review`. For runtime verification of ARIA validity against resolved roles, use the `a11y-testing` skill to set up real axe. ARIA (Accessible Rich Internet Applications) extends HTML semantics for custom, dynamic UI components. It supplements — never replaces — native HTML. **The ARIA First Principles:** 1. **No ARIA is better than bad ARIA.** Incorrect ARIA is worse than no ARIA. 2. **Native HTML first.** Use a `<button>` before `role="button"`. Use `<select>` before a custom combobox. 3. **You own the keyboard.** Using an ARIA widget role means you are fully responsible for its keyboard behavior per the APG spec. 4. **Keep states synchronized.** Every ARIA state attribute must reflect the current UI state — never hardcode them. --- ## ARIA Fundamentals ### How ARIA Works ARIA adds three things to elements in the accessibility tree: - **Roles** — what the element *is* (`role="dialog"`, `role="tab"`) - **Properties** — static characteristics (`aria-label`, `aria-required`) - **States** — dynamic, changing values (`aria-expanded`, `aria-checked`, `aria-invalid`) ### Accessible Names (WCAG 4.1.2) Every interactive element needs an accessible name. The browser computes it in this priority order: 1. `aria-lab