Main Heading
Section Heading
Content
# WCAG 2.1 AA Accessibility Checklist
Comprehensive checklist for ensuring your frontend meets WCAG 2.1 Level AA compliance.
## Perceivable
Information and user interface components must be presentable to users in ways they can perceive.
### 1.1 Text Alternatives
**1.1.1 Non-text Content (Level A)**
- [ ] All images have appropriate alt text
- [ ] Decorative images use empty alt (`alt=""`)
- [ ] Complex images have detailed descriptions
- [ ] Icons have text alternatives or aria-label
- [ ] Charts/graphs have text descriptions
- [ ] CAPTCHAs have alternative forms
```html
Content
```
### 1.2 Time-based Media
**1.2.1 Audio-only and Video-only (Level A)**
- [ ] Audio-only content has transcripts
- [ ] Video-only content has transcripts or audio description
**1.2.2 Captions (Level A)**
- [ ] All pre-recorded videos have captions
- [ ] Captions are synchronized and accurate
**1.2.3 Audio Description or Media Alternative (Level A)**
- [ ] Videos have audio descriptions or text alternative
**1.2.4 Captions (Live) (Level AA)**
- [ ] Live videos have captions
**1.2.5 Audio Description (Level AA)**
- [ ] All pre-recorded videos have audio descriptions
```html
```
### 1.3 Adaptable
**1.3.1 Info and Relationships (Level A)**
- [ ] Semantic HTML used correctly (headings, lists, tables)
- [ ] Form labels properly associated with inputs
- [ ] Related form controls are grouped
- [ ] Visual presentation matches code structure
- [ ] ARIA roles used when needed
```html
Main Heading
Section Heading
Click the blue button on the right
Click the "Submit" button to continue
``` **1.3.4 Orientation (Level AA)** - [ ] Content works in portrait and landscape - [ ] No orientation restrictions unless essential **1.3.5 Identify Input Purpose (Level AA)** - [ ] Input fields use autocomplete attribute when appropriate ```html ``` ### 1.4 Distinguishable **1.4.1 Use of Color (Level A)** - [ ] Color not used as only visual means of conveying information - [ ] Color not used as only way to distinguish interactive elements - [ ] Links are distinguishable without color alone ```css /* ✅ Good - underline + color */ a { color: blue; text-decoration: underline; } /* Or use icons, borders, etc. */ .error { color: red; border-left: 4px solid red; padding-left: 12px; } .error::before { content: "⚠ "; } ``` **1.4.2 Audio Control (Level A)** - [ ] Auto-playing audio can be paused - [ ] Auto-playing audio stops after 3 seconds - [ ] Volume controls available **1.4.3 Contrast (Minimum) (Level AA)** - [ ] Normal text: 4.5:1 contrast ratio - [ ] Large text (18pt+): 3:1 contrast ratio - [ ] UI components: 3:1 contrast ratio - [ ] Graphical objects: 3:1 contrast ratio ```css /* Check with contrast checkers */ .text { color: #595959; /* 7:1 on white ✅ */ background: #FFFFFF; } .button { color: #FFFFFF; background: #0066FF; /* 4.6:1 ✅ */ border: 2px solid #0052CC; /* 3:1 ✅ */ } ``` **1.4.4 Resize Text (Level AA)** - [ ] Text can be resized to 200% without loss of content - [ ] No horizontal scrolling at 200% zoom - [ ] Use relative units (rem, em) ```css /* ✅ Good */ body { font-size: 1rem; /* Respects user preferences */ } h1 { font-size: 2.5rem; /* Scales with body */ } /* ❌ Avoid */ .text { font-size: 14px; /* Fixed size */ } ``` **1.4.5 Images of Text (Level AA)** - [ ] Text is text, not images - [ ] Exception: logos, essential presentations **1.4.10 Reflow (Level AA)** - [ ] Content reflows at 320px viewport width - [ ] No horizontal scrolling (except tables, diagrams) - [ ] Responsive design implemented ```css /* Mobile-first responsive */ .container { width: 100%; max-width: 1200px; padding: 1rem; } @media (min-width: 768px) { .container { padding: 2rem; } } ``` **1.4.11 Non-text Contrast (Level AA)** - [ ] UI components: 3:1 contrast against background - [ ] Graphical objects: 3:1 contrast - [ ] Focus indicators: 3:1 contrast **1.4.12 Text Spacing (Level AA)** - [ ] Content adapts to increased text spacing - [ ] Line height: at least 1.5x font size - [ ] Paragraph spacing: at least 2x font size - [ ] Letter spacing: at least 0.12x font size - [ ] Word spacing: at least 0.16x font size ```css /* Ensure content doesn't break */ body { line-height: 1.5; } p { margin-bottom: 2em; } ``` **1.4.13 Content on Hover or Focus (Level AA)** - [ ] Additional content (tooltips, dropdowns) is dismissible - [ ] Hoverable content stays visible when hovering over it - [ ] Content remains visible until dismissed or no longer relevant ```css /* Tooltip stays visible when hovering over it */ .tooltip:hover .tooltip-content, .tooltip .tooltip-content:hover { display: block; } ``` ## Operable User interface components and navigation must be operable. ### 2.1 Keyboard Accessible **2.1.1 Keyboard (Level A)** - [ ] All functionality available via keyboard - [ ] No keyboard traps - [ ] Logical tab order - [ ] Custom controls are keyboard accessible ```htmlThe French phrase c'est la vie means "that's life".
``` ### 3.2 Predictable **3.2.1 On Focus (Level A)** - [ ] Focusing an element doesn't trigger context change - [ ] No automatic form submission on focus **3.2.2 On Input (Level A)** - [ ] Changing settings doesn't automatically cause context change - [ ] User is warned of automatic changes **3.2.3 Consistent Navigation (Level AA)** - [ ] Navigation order is consistent across pages - [ ] Repeated navigation in same order **3.2.4 Consistent Identification (Level AA)** - [ ] Components with same functionality are identified consistently - [ ] Icons mean the same thing throughout ### 3.3 Input Assistance **3.3.1 Error Identification (Level A)** - [ ] Errors are identified in text - [ ] Error is described to user ```html Please enter a valid email address ``` **3.3.2 Labels or Instructions (Level A)** - [ ] Labels provided for input - [ ] Instructions provided when needed ```html ``` **3.3.3 Error Suggestion (Level AA)** - [ ] Errors suggest how to fix - [ ] Specific, actionable feedback ```html Password must contain at least one uppercase letter, one number, and be at least 8 characters long. ``` **3.3.4 Error Prevention (Level AA)** - [ ] Legal/financial transactions are reversible - [ ] Data is checked and confirmed before submission - [ ] User can review and correct before submitting ```html