← ClaudeAtlas

a11y-formslisted

Use this skill when the user asks about accessible forms, form labels, form errors, input accessibility, "aria-required", "aria-invalid", "aria-describedby", fieldset and legend, "form validation accessibility", required fields, error messages, placeholder accessibility, password fields, file uploads, date inputs, select elements, checkbox groups, radio groups, "WCAG 3.3", "label instructions", or is building any form that needs to be screen reader compatible and keyboard accessible.
RadOrigin-LLC/RAD-Claude-Skills · ★ 5 · Code & Development · score 73
Install: claude install-skill RadOrigin-LLC/RAD-Claude-Skills
# Form Accessibility > **Skill type: Reference.** This is teaching/pattern content — it explains label association, error announcement, fieldset/legend grouping, and validation patterns. It is not a scanner. For static review of existing forms, use `/a11y-review`. For runtime verification of error announcements and validation behavior, set up real axe via the `a11y-testing` skill and pair with manual screen reader testing. Forms are the most interaction-critical UI element — and the most commonly broken for assistive technology users. Missing labels, inaccessible errors, and placeholder-as-label are among the top WCAG failures on the web. --- ## The Non-Negotiable Rules 1. **Every input must have a visible, programmatically associated label.** No exceptions. 2. **Never use `placeholder` as a label.** Placeholder disappears on input, fails contrast, and is not reliably announced by screen readers. 3. **Errors must be text, linked to the input, and not rely on color alone.** 4. **Required fields must be indicated programmatically** (`required` or `aria-required="true"`). --- ## Label Association ### Method 1: Explicit Association (Preferred) ```html <label for="email">Email Address</label> <input type="email" id="email" name="email" autocomplete="email"> ``` In React (`htmlFor` instead of `for`): ```tsx <label htmlFor="email">Email Address</label> <input type="email" id="email" name="email" autoComplete="email" /> ``` ### Method 2: Wrapping Label ```html <label> E