Accessible Forms: WCAG 2.2 Checklist for Design, Dev, and QA
Ship inclusive, compliant forms with this WCAG 2.2 checklist—labels, errors, focus, mobile targets, Section 508 mapping, and clear test steps.
In this article
- Why accessible forms matter
- WCAG 2.2 for forms
- The checklist
- Role-based responsibilities
- Testing playbook
- Section 508 and procurement
- Risky components
- Downloadable checklist
- References
Why accessible forms are non‑negotiable
Accessible forms are good business and sound risk management. When labels, errors, and focus cues are clear, more people finish the task—reducing abandonment and support costs. Accessibility is also a contractual and legal requirement for many organizations. This guide delivers a practical, WCAG 2.2–mapped form accessibility checklist you can ship with confidence.
“Accessible” in practice means content is perceivable, operable, understandable, and robust (the POUR principles). These principles translate directly into form UX: people must be able to find fields, operate them by keyboard and touch, understand labels and messages, and rely on assistive technologies to interpret the UI. For background, see the vendor‑neutral WebAIM forms techniques, which remain foundational patterns that complement WCAG 2.2 updates.
-
PerceivableLabels, instructions, and errors must be visible and programmatically connected to inputs. Do not rely on color alone or placeholder-only text.
-
OperableEvery control works with a keyboard and a single pointer. Focus is visible and never trapped or obscured by sticky UI.
-
UnderstandablePlain labels and helpful, specific error messages keep people moving. Avoid surprise timeouts and allow saving progress.
-
RobustUse semantic HTML and safe ARIA so screen readers announce roles, names, and states consistently across browsers and devices.
Standards and laws that apply
Teams commonly adopt the Web Content Accessibility Guidelines (WCAG) in contracts and VPATs. WCAG 2.2 adds criteria that materially affect forms. U.S. federal procurement references WCAG 2.0 via Section 508; many buyers still expect WCAG 2.1 or 2.2 conformance in 2025. The EU’s EN 301 549 similarly points to WCAG as the technical baseline. For an overview of what changed, see W3C WAI’s What’s new in WCAG 2.2.
In practice, your VPAT should document current conformance to WCAG 2.0/2.1 and indicate plans for 2.2—especially for the criteria that affect form flows, like focus visibility, input targets, and authentication.
What “WCAG 2.2–ready” means for forms
“WCAG 2.2–ready” means your form UI and flows satisfy the 2.2 success criteria that disproportionately impact forms, and you have repeatable tests to prove it. This article emphasizes pragmatic checks that design, development, and QA can verify.
New or updated criteria that impact forms
- Focus Appearance (2.4.11) and Focus Not Obscured (2.4.12) tighten expectations for visible, unobstructed focus indicators—critical for keyboard accessible forms.
- Target Size (Minimum) (2.5.8) sets a 24×24 CSS px minimum for critical touch targets with defined exceptions—vital for mobile forms.
- Dragging Movements (2.5.7) requires a non-drag alternative for any action that relies on dragging (e.g., reordering items).
- Consistent Help (3.2.6) ensures the same help mechanisms appear in the same place across steps in multi‑page forms.
- Redundant Entry (3.3.7) discourages asking users to retype data you already have—enable prefill and carryover.
- Accessible Authentication (3.3.8) prohibits cognitive tests for login; support password managers and copy/paste.
Confirm interpretations using W3C’s WCAG 2.2 Understanding docs, then encode acceptance criteria in your test plan.
The WCAG 2.2–ready form accessibility checklist
Use this form accessibility checklist during design reviews and code QA. Each row maps to key WCAG success criteria (SC) and a practical test.
Checklist area | WCAG SC | What to test |
---|---|---|
Labels and instructions | 1.3.1, 2.4.6, 3.3.2 | Every input has a programmatic label; help text is linked; placeholder is not the label. |
Errors and announcements | 3.3.1, 3.3.3, 4.1.3 | Errors identified in text; fields set aria-invalid; summary announced to screen readers. |
Keyboard and focus | 2.1.1, 2.4.3, 2.4.7, 2.4.11, 2.4.12 | Logical tab order; visible focus with 3:1 contrast; focus not hidden by sticky UI. |
Target size and touch | 2.5.8 | Tap targets ≥24×24 CSS px or meet exceptions with spacing. |
Dragging alternatives | 2.5.7 | Reordering/upload/sliders have non-drag controls (e.g., Move up/down buttons). |
Redundant entry | 3.3.7 | Prefill known values; persist data across steps; allow copy/paste. |
Authentication | 3.3.8 | No memory tests; paste allowed; password managers work; show/hide password supported. |
Timing and autosave | 2.2.1 | Warn before timeout; allow extending time; autosave or draft mode for long forms. |
Labels, grouping, and instructions
Use native label elements with for/id or aria-labelledby. Group related inputs with fieldset/legend (e.g., radio groups). Link inline help or hint text with aria-describedby so screen readers announce it after the label. Avoid placeholder-only labels because placeholders disappear on input and are not consistently announced. GOV.UK’s guidance on form structure demonstrates robust labeling patterns.
- Do not hide required/optional indicators; express them in text, not color alone.
- Place instructions before the control they affect and keep patterns consistent across steps.
- For long forms, provide an overview and progress indicator with clear step names.
Related reading: Labels, Placeholders, and Help Text
Keyboard, focus order, and focus visibility
Tab order must follow the visual order and include all actionable elements. Provide a “Skip to content” link on long pages. Your focus indicator must be clearly visible, have sufficient contrast against adjacent colors, and meet WCAG 2.2 size/visibility expectations; it also must not be hidden by sticky headers, footers, or scroll containers.
- Ensure no keyboard traps; if a modal opens, move focus into it and return focus when closed.
- Make focus indicator contrast ≥3:1 against adjacent colors and ensure a sufficiently thick outline per 2.4.11.
- Test sticky navigation and scrollable panels to ensure the focused element is not obscured (2.4.12).
Errors, validation, and announcements
Identify errors in text near the field and summarize at the top for multi‑error submissions. Associate each field message using aria-describedby and set aria-invalid="true" when validation fails. For the summary, prefer a programmatically present role="alert" (or an assertive/live region) so screen readers announce it without moving focus unexpectedly. The MDN ARIA forms guide covers safe patterns.
- aria-errormessage can point to a dedicated error node; use it with aria-invalid and keep aria-describedby for hints to maximize support.
- Do not rely on color alone—pair color with text and/or icon. Maintain 3:1 contrast for error indicators and input borders (1.4.11).
- Provide specific recovery advice: “Enter a 5‑digit ZIP (e.g., 02139)” beats “Invalid ZIP”.
See also: Form Field Validation & Error Messages
Input purpose, autocomplete, and virtual keyboards
Use semantic input types to trigger appropriate virtual keyboards on mobile and inform assistive tech. Add autocomplete tokens (e.g., given-name, family-name, email, street-address, cc-number) to support autofill and reduce redundant entry (1.3.5). When you need a numeric keypad without number semantics, use inputmode with type="text" to avoid unintended spinner controls.
- Examples: type="email", type="tel", inputmode="numeric" for account numbers, autocomplete="one-time-code" for OTP fields.
- Keep masking unobtrusive; never block copy/paste for fields like codes or credit cards.
Mobile and touch targets
Ensure critical targets (buttons, radios/checkboxes, “Next”/“Submit”, expand/collapse) meet the Target Size (Minimum) 2.5.8 requirement: at least 24×24 CSS px or meet exceptions via spacing or container patterns. Provide adequate spacing between adjacent controls, maintain visible focus when external keyboards are used, and support both portrait and landscape orientations.
Related reading: Mobile Form Design
Avoid redundant entry and enable saved progress
Reduce retyping across steps by pre‑filling known data, carrying values forward, and enabling “Save and resume.” Allow users to review and edit before final submission. Support copy/paste and password managers to avoid cognitive load (3.3.7, 3.3.8).
Authentication and CAPTCHA
WCAG 2.2 Accessible Authentication (3.3.8) prohibits requiring a cognitive function test (like remembering, transcribing, or solving puzzles) unless an alternative is provided. Allow paste, support password managers, and provide a “show password” option. Use risk‑based or server‑side methods for abuse prevention; if you must gate, offer an accessible alternative to traditional CAPTCHAs.
Practical guidance: Anti-Spam for Forms
Dragging and pointer gestures
Provide non‑drag alternatives for actions like reordering, resizing, or scrubbing sliders (2.5.7). Offer Move up/down, Remove, and Add buttons and ensure all functions work with a single pointer and a keyboard.
Color, contrast, and state indicators
Standard text contrast is ≥4.5:1 (3:1 for large text). For non‑text UI (inputs, buttons, focus outlines, error borders), ensure a ≥3:1 contrast against adjacent colors (1.4.11). Convey required/optional status in text and iconography with sufficient contrast; never with color alone.
Timing, session timeouts, and autosave
Warn users before a session timeout, allow extending time, and autosave progress for long flows (2.2.1). Disclose the session length and what will be lost if time expires. For sensitive data, clearly explain retention and draft policies.
Role-based responsibilities
Design
- Define label placement, hint/error patterns, and progress indicators for multi‑step flows.
- Specify focus tokens (color, thickness, offsets) that meet 2.4.11 and survive high‑contrast modes.
- Set minimum target sizes and spacing rules for mobile and touch (2.5.8).
- Select accessible components; avoid custom widgets unless there’s a proven a11y pattern.
Further patterns: Web Form Design Best Practices
Development
- Use semantic HTML controls first; connect labels via for/id or aria-labelledby.
- Wire aria-describedby for hints and errors; set aria-invalid on failure; prefer role="alert" for the error summary.
- Implement robust keyboard support and manage focus on modals and validation events.
- Implement autosave and prefill mechanisms to satisfy 3.3.7 without exposing PII risks.
QA/Accessibility
- Run keyboard‑only passes: verify order, visibility, and no traps; test sticky headers for focus obscuration.
- Validate contrast including non‑text UI; test at 400% zoom and 320 CSS px width for reflow.
- Screen reader smoke tests with NVDA/JAWS and VoiceOver: labels, legends, hints, errors, and summaries must announce.
- Mobile checks: target size, input types/virtual keyboards, orientation support, and TalkBack/VoiceOver announcements.
Product/Legal
- Track WCAG requirements in acceptance criteria and plan VPAT updates that note 2.2 coverage.
- Define timeout policies, saved drafts, and help mechanisms to meet 2.2.1 and 3.2.6.
- Monitor analytics for error hotspots and abandonment; prioritize fixes with the highest user impact.
Testing playbook: fast and credible checks
Automated pre-checks
Run axe, WAVE, or Lighthouse to catch missing labels, contrast issues, and landmark problems. Treat automation as triage, not certification—manual testing still verifies focus, announcements, and gestures.
Keyboard-only pass
Using only Tab/Shift+Tab/Enter/Space/Arrow keys:
- Traverse all fields and controls in visible order; no traps.
- Focus is consistently visible and meets 2.4.11; never hidden by sticky UI (2.4.12).
- Modals trap focus correctly; Esc or an accessible close control exits and returns focus.
WCAG references: 2.1.1, 2.4.3, 2.4.7, 2.4.11, 2.4.12.
Screen reader sanity checks
On Windows (NVDA/JAWS) and macOS/iOS (VoiceOver):
- Field labels and group legends are announced with roles; required status is clear.
- On error, the field announces the problem and aria-invalid state; the summary announces via role="alert".
- Controls convey state (checked/expanded) and instructions via aria-describedby when present.
Mobile and touch validation
- Zoom to 400% and test single‑column reflow at 320 CSS px width; no information loss.
- Critical targets meet 24×24 CSS px minimum; verify virtual keyboard type for each input.
- Use external keyboards to confirm focus visibility and order on mobile; test with TalkBack or iOS VoiceOver.
Sample acceptance criteria
- Given a required field is empty, when I submit, then a summary appears at the top with role="alert" and focus moves to it within 1s.
- Given I activate an error link in the summary, when the field receives focus, then the field is scrolled into view, announced with its label and specific error, and aria-invalid is set.
- Given I navigate by keyboard, when I tab through the form, then the visible focus indicator has ≥3:1 contrast and is not obscured by sticky UI.
- Given I use touch, when I interact with primary actions, then the targets measure ≥24×24 CSS px or meet spacing exceptions.
Policy mapping: Section 508 and procurement
Section 508 currently references WCAG 2.0, yet buyers increasingly request WCAG 2.1/2.2 coverage. Documenting 2.2 conformance demonstrates future‑proofing for procurement and reduces follow‑up risk. See the official Section 508 policy overview and align your VPAT accordingly.
508/WCAG crosswalk highlights
- WCAG 2.0 equivalents still central for forms: 1.3.1 (Info and Relationships), 2.4.3 (Focus Order), 2.4.6 (Headings and Labels), 2.4.7 (Focus Visible), 3.3.1 (Error Identification), 3.3.2 (Labels or Instructions), 3.3.3 (Error Suggestion), 4.1.3 (Status Messages, from 2.1).
- WCAG 2.2 adds high‑impact form criteria: 2.4.11/2.4.12 (focus), 2.5.7 (dragging), 2.5.8 (target size), 3.2.6 (consistent help), 3.3.7 (redundant entry), 3.3.8 (accessible authentication). Note these in the VPAT’s “Additional Conformance” or “Roadmap” section if your template allows.
Risky components and safer patterns
Date pickers, selects/comboboxes, file uploads, masked inputs
- Date pickers: Prefer native inputs with type="date" when locale and formatting allow. If custom, ensure text entry is available, announce current/selected date, and provide keyboard navigation.
- Selects/comboboxes: Use native select for simple lists. If custom, follow the WAI‑ARIA Authoring Practices 1.2 for combobox roles, keyboard support, and announcement of active options.
- File uploads: Provide both drag‑and‑drop and button‑based upload; announce progress and errors; ensure single‑pointer and keyboard operation.
- Masked inputs: Keep caret behavior predictable; avoid blocking paste; announce formatting requirements in hints.
Deep dive: File Upload & E-Signature in Forms
Downloadable checklist and implementation worksheet
Create a one‑page checklist mapped to WCAG SCs, with owners and tests. Track each item’s status, screenshots, and test notes. Include a version stamp and change log so product and compliance teams stay aligned over time.
- Columns to include: Item, SC(s), Role owner, Design token/component, Test steps, Result, Issue link.
- Export as PDF for stakeholders and keep a live sheet for the delivery team.
References and further reading
- W3C WAI — What’s new in WCAG 2.2
- W3C WAI — WCAG 2.2 Understanding documents
- W3C WAI — Forms tutorials
- WebAIM — Creating Accessible Forms
- Section 508 — Laws and Policies
- MDN — ARIA: Forms
Related internal reads: Web Form Design Best Practices, Form Field Validation & Error Messages, Mobile Form Design.
Frequently asked questions
What focus style passes WCAG 2.2?
The focus indicator must be clearly visible, unobscured, and have sufficient contrast against adjacent colors. WCAG 2.2’s Focus Appearance (2.4.11) requires a visibly sized indicator with at least 3:1 contrast, and Focus Not Obscured (2.4.12) requires that author‑created UI (like sticky headers) not cover it. A thick outline or underline with 3:1 contrast around the focused component is a practical pass.
How large must tap targets be on mobile forms?
WCAG 2.2 Target Size (Minimum) (2.5.8) sets a minimum of 24×24 CSS px for important targets, with exceptions (e.g., if sufficient spacing exists or the target is within a sentence of text). Many design systems aim for 40–48 px for comfort; meeting or exceeding 24 px satisfies the standard.
Should I use aria-errormessage or aria-describedby for errors?
Use aria-invalid with either approach. aria-errormessage explicitly points to the error text and is supported by major screen readers; keep aria-describedby for hints so both announce correctly. Pair this with a role="alert" error summary for form‑level announcements. Test with NVDA/JAWS and VoiceOver/TalkBack to confirm announcements.
Can placeholders replace labels?
No. Placeholder text is not a label and is often not announced consistently. Always provide a visible label linked programmatically to the input. Use placeholders only for examples, not as the primary instruction.
How do I make a custom date picker accessible?
Prefer native inputs when possible. If custom, provide a text field for manual entry, clear label/instructions, keyboard navigation for the grid (arrow keys, Home/End, Page Up/Down), role/state announcements for selected/today, and a non‑drag method to change months. Ensure error handling announces via aria-describedby and the form summary.
What should my VPAT say for WCAG 2.2 forms?
Document conformance for WCAG 2.0/2.1 criteria and include notes for WCAG 2.2 items that affect forms (2.4.11, 2.4.12, 2.5.7, 2.5.8, 3.2.6, 3.3.7, 3.3.8). Provide test evidence (screenshots, steps, and versions). If any gaps remain, include a remediation timeline.