Common Accessibility (a11y) Standards
Priority: P1 (OPERATIONAL)
Accessibility is a legal requirement in the EU (Web Accessibility Directive), USA (ADA/Section 508), and many other jurisdictions. Non-compliance carries litigation risk. Target WCAG 2.2 Level AA as the minimum.
π Semantic HTML First
-
Use the correct HTML element before reaching for ARIA.
<button>,<a>,<nav>,<main>,<section>,<form>,<label>convey semantics natively. -
Never use
<div>or<span>for interactive elements β they have no keyboard role by default. -
Headings (
h1βh6) must form a logical outline. Oneh1per page. -
Use
<button>not<div onClick>,<a>not<span onClick>, etc.
π ARIA β Use Sparingly
ARIA supplements semantics when native HTML is insufficient (e.g., custom widgets). Rules:
- No ARIA > Bad ARIA: If native HTML works, use it. ARIA only adds roles, not behavior.
- Required attributes: Every
rolewith required properties must include them (e.g.,role="slider"needsaria-valuenow,aria-valuemin,aria-valuemax). - Live Regions: Use
aria-live="polite"for status messages;aria-live="assertive"only for critical alerts. - Labels: Every form control must have a programmatic label (
<label>,aria-label, oraria-labelledby). - Hidden content: Use
aria-hidden="true"on decorative icons; never on focusable elements.
β¨οΈ Keyboard Navigation
- All interactive elements MUST be reachable and operable via keyboard.
- Tab order must follow visual reading order. Never use positive
tabindexvalues (tabindex="1"breaks natural order). - Provide visible focus indicators (see Focus style rule below).
- Modals/Dialogs: Trap focus inside when open. Return focus to trigger element on close.
- Escape key: Must close modals, dropdowns, and tooltips.
- Focus style: Never
outline: nonewithout a visible replacement (min 2px solid, 3:1 contrast).
π¨ Color & Contrast
- Normal text: β₯ 4.5:1 ratio. Large text (β₯ 18pt or 14pt bold): β₯ 3:1. UI components: β₯ 3:1.
- Never convey information through color alone β add icon, pattern, or text label.
- Test with: axe DevTools, WAVE, Lighthouse.
π Touch & Pointer Targets
- Minimum interactive target size: 44Γ44px (WCAG 2.5.5 AAA) / 24Γ24px minimum (WCAG 2.2 AA).
- Provide sufficient spacing between adjacent targets to prevent mis-taps.
πΌ Images & Media
- Decorative images:
alt=""(empty, not missing). - Informative images: descriptive
alttext (what the image conveys, not "image of..."). - Complex charts/graphs: provide a text summary or data table alternative.
- Video: Captions mandatory. Audio descriptions for visual-only content.
π§ͺ Testing Minimum
- CI gate:
axe-corezero critical violations. - Manual: keyboard-only full flow + screen reader (NVDA/VoiceOver) + 200% zoom.
Anti-Patterns
- No
onClickon<div>: Use<button>or addrole,tabindex, and keyboard handlers. - No missing
alt: Every<img>must have analtattribute (empty string if decorative). - No color-only status: Red = error must also show an icon or text.
- No
outline: nonewithout replacement focus style. - No auto-playing media: Users with vestibular disorders may be harmed.
- No dynamic content without announcement: Use
aria-livefor async status updates.