352 lines
12 KiB
Markdown
352 lines
12 KiB
Markdown
|
|
# Accessibility Guidelines for Figma Design
|
||
|
|
|
||
|
|
Comprehensive WCAG compliance guide and accessibility best practices for inclusive design.
|
||
|
|
|
||
|
|
## WCAG 2.1 Compliance Levels
|
||
|
|
|
||
|
|
### Level A (Minimum)
|
||
|
|
Basic web accessibility features that should be present in all designs.
|
||
|
|
|
||
|
|
### Level AA (Standard)
|
||
|
|
Recommended level for most websites and applications. Removes major barriers to accessing content.
|
||
|
|
|
||
|
|
### Level AAA (Enhanced)
|
||
|
|
Highest level, required for specialized contexts but not recommended as general policy.
|
||
|
|
|
||
|
|
**Focus on AA compliance** - this covers the vast majority of accessibility needs without excessive constraints.
|
||
|
|
|
||
|
|
## Color and Visual Accessibility
|
||
|
|
|
||
|
|
### Color Contrast Requirements
|
||
|
|
|
||
|
|
#### WCAG AA Standards
|
||
|
|
- **Normal text**: 4.5:1 contrast ratio minimum
|
||
|
|
- **Large text** (18pt+ or 14pt+ bold): 3:1 contrast ratio minimum
|
||
|
|
- **UI components**: 3:1 contrast ratio for borders, icons, form controls
|
||
|
|
- **Graphics**: 3:1 contrast ratio for meaningful graphics
|
||
|
|
|
||
|
|
#### WCAG AAA Standards (Enhanced)
|
||
|
|
- **Normal text**: 7:1 contrast ratio
|
||
|
|
- **Large text**: 4.5:1 contrast ratio
|
||
|
|
|
||
|
|
#### Testing Tools in Figma
|
||
|
|
- **Stark plugin**: Real-time contrast checking
|
||
|
|
- **Color Oracle**: Color blindness simulation
|
||
|
|
- **WebAIM contrast checker**: External validation
|
||
|
|
|
||
|
|
### Color Usage Guidelines
|
||
|
|
|
||
|
|
#### Don't Rely on Color Alone
|
||
|
|
```
|
||
|
|
❌ Bad: "Click the green button to continue"
|
||
|
|
✅ Good: "Click the 'Continue' button (green) to proceed"
|
||
|
|
```
|
||
|
|
|
||
|
|
- Use icons, text labels, or patterns alongside color
|
||
|
|
- Ensure information is conveyed through multiple visual cues
|
||
|
|
- Test designs in grayscale to verify information accessibility
|
||
|
|
|
||
|
|
#### Color Blindness Considerations
|
||
|
|
- **Red-green color blindness** affects ~8% of men, ~0.5% of women
|
||
|
|
- **Blue-yellow color blindness** is less common but still significant
|
||
|
|
- Use tools like Colorblinding or Stark to test your designs
|
||
|
|
- Consider using shapes, patterns, or positions as additional indicators
|
||
|
|
|
||
|
|
### Typography Accessibility
|
||
|
|
|
||
|
|
#### Font Size Guidelines
|
||
|
|
- **Minimum body text**: 16px (12pt) for web
|
||
|
|
- **Minimum mobile text**: 16px (prevents zoom on iOS)
|
||
|
|
- **Large text threshold**: 18pt (24px) regular, 14pt (18.7px) bold
|
||
|
|
- **Line height**: 1.5x font size minimum for body text
|
||
|
|
- **Paragraph spacing**: At least 1.5x line height
|
||
|
|
|
||
|
|
#### Font Choice
|
||
|
|
- **Sans-serif fonts** generally more readable on screens
|
||
|
|
- **Avoid decorative fonts** for body text
|
||
|
|
- **System fonts** ensure consistency and performance
|
||
|
|
- **Web-safe fonts** for broader compatibility
|
||
|
|
|
||
|
|
#### Text Layout
|
||
|
|
- **Line length**: 45-75 characters for optimal readability
|
||
|
|
- **Left alignment** for left-to-right languages
|
||
|
|
- **Adequate spacing** between letters, words, lines, paragraphs
|
||
|
|
- **Avoid justified text** which can create awkward spacing
|
||
|
|
|
||
|
|
## Interactive Element Accessibility
|
||
|
|
|
||
|
|
### Touch and Click Targets
|
||
|
|
|
||
|
|
#### Size Requirements
|
||
|
|
- **Minimum size**: 44x44px (iOS/Material Design standard)
|
||
|
|
- **Recommended size**: 48x48px for better usability
|
||
|
|
- **Spacing**: At least 8px between adjacent targets
|
||
|
|
- **Mobile considerations**: Thumb-friendly zones, easy reach
|
||
|
|
|
||
|
|
#### Visual Feedback
|
||
|
|
- **Hover states**: Clear indication of interactive elements
|
||
|
|
- **Active states**: Immediate feedback on interaction
|
||
|
|
- **Disabled states**: Clearly distinguish non-functional elements
|
||
|
|
- **Loading states**: Show progress for time-consuming actions
|
||
|
|
|
||
|
|
### Focus Management
|
||
|
|
|
||
|
|
#### Focus Indicators
|
||
|
|
- **Visible focus**: Clear outline or background change
|
||
|
|
- **High contrast**: Focus indicator must have 3:1 contrast ratio
|
||
|
|
- **Consistent style**: Same focus treatment across the interface
|
||
|
|
- **Never remove focus indicators** without providing alternative
|
||
|
|
|
||
|
|
#### Focus Order
|
||
|
|
- **Logical sequence**: Follow visual layout and reading order
|
||
|
|
- **Tab navigation**: All interactive elements reachable via keyboard
|
||
|
|
- **Skip links**: Allow bypassing repetitive navigation
|
||
|
|
- **Focus traps**: Keep focus within modals/dialogs when open
|
||
|
|
|
||
|
|
### Form Accessibility
|
||
|
|
|
||
|
|
#### Label Requirements
|
||
|
|
- **All inputs must have labels**: Use explicit labels, not just placeholders
|
||
|
|
- **Required field indicators**: Clear marking of mandatory fields
|
||
|
|
- **Group related fields**: Use fieldsets and legends for grouped inputs
|
||
|
|
- **Help text**: Provide guidance when needed
|
||
|
|
|
||
|
|
#### Error Handling
|
||
|
|
```
|
||
|
|
❌ Bad: Red border with no explanation
|
||
|
|
✅ Good: "Email address is required" with clear visual indicator
|
||
|
|
```
|
||
|
|
|
||
|
|
- **Specific error messages**: Explain what's wrong and how to fix it
|
||
|
|
- **Error summaries**: List all errors at top of form for screen readers
|
||
|
|
- **Inline validation**: Real-time feedback where helpful
|
||
|
|
- **Success confirmation**: Confirm successful form submissions
|
||
|
|
|
||
|
|
#### Form Layout
|
||
|
|
- **Single column layouts**: Easier to navigate and complete
|
||
|
|
- **Logical grouping**: Related fields grouped together
|
||
|
|
- **Progress indicators**: Show steps in multi-step forms
|
||
|
|
- **Clear submission**: Make it obvious how to submit the form
|
||
|
|
|
||
|
|
## Content Structure and Navigation
|
||
|
|
|
||
|
|
### Heading Hierarchy
|
||
|
|
|
||
|
|
#### Proper Heading Structure
|
||
|
|
```html
|
||
|
|
H1 - Page title (one per page)
|
||
|
|
├── H2 - Main sections
|
||
|
|
│ ├── H3 - Subsections
|
||
|
|
│ │ └── H4 - Sub-subsections
|
||
|
|
│ └── H3 - Another subsection
|
||
|
|
└── H2 - Another main section
|
||
|
|
```
|
||
|
|
|
||
|
|
- **Don't skip levels**: H1 → H2 → H3, never H1 → H3
|
||
|
|
- **Use headings for structure**: Not just for visual styling
|
||
|
|
- **One H1 per page**: Primary page title only
|
||
|
|
|
||
|
|
### Link Accessibility
|
||
|
|
|
||
|
|
#### Link Text Guidelines
|
||
|
|
```
|
||
|
|
❌ Bad: "Click here for more information"
|
||
|
|
✅ Good: "Read our complete accessibility guide"
|
||
|
|
```
|
||
|
|
|
||
|
|
- **Descriptive link text**: Explains where the link leads
|
||
|
|
- **Context independence**: Should make sense when read alone
|
||
|
|
- **Unique link text**: Different destinations need different text
|
||
|
|
- **External link indicators**: Show when links lead off-site
|
||
|
|
|
||
|
|
### Navigation Patterns
|
||
|
|
|
||
|
|
#### Skip Links
|
||
|
|
- **Skip to main content**: Bypass repetitive navigation
|
||
|
|
- **Skip to search**: Quick access to search functionality
|
||
|
|
- **Keyboard users**: Essential for efficient navigation
|
||
|
|
- **Hidden until focused**: Don't clutter visual design
|
||
|
|
|
||
|
|
#### Breadcrumbs
|
||
|
|
- **Show location**: Help users understand where they are
|
||
|
|
- **Provide navigation**: Easy way to move up the hierarchy
|
||
|
|
- **Current page**: Don't make current page a link
|
||
|
|
- **Separator clarity**: Use > or / with proper ARIA labels
|
||
|
|
|
||
|
|
## Images and Media
|
||
|
|
|
||
|
|
### Image Accessibility
|
||
|
|
|
||
|
|
#### Alt Text Guidelines
|
||
|
|
- **Decorative images**: Use empty alt attribute (alt="")
|
||
|
|
- **Informative images**: Describe the information conveyed
|
||
|
|
- **Functional images**: Describe the action/function
|
||
|
|
- **Complex images**: Provide detailed description nearby
|
||
|
|
|
||
|
|
#### Alt Text Examples
|
||
|
|
```
|
||
|
|
❌ Bad: alt="image"
|
||
|
|
❌ Bad: alt="photo.jpg"
|
||
|
|
✅ Good: alt="Bar chart showing 40% increase in sales"
|
||
|
|
✅ Good: alt="Submit form" (for submit button image)
|
||
|
|
✅ Good: alt="" (for purely decorative images)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Video and Audio
|
||
|
|
|
||
|
|
#### Video Accessibility
|
||
|
|
- **Captions**: For all spoken content
|
||
|
|
- **Audio descriptions**: For visual content not described in audio
|
||
|
|
- **Transcript**: Full text version of audio content
|
||
|
|
- **Player controls**: Accessible play/pause/volume controls
|
||
|
|
|
||
|
|
#### Audio Accessibility
|
||
|
|
- **Transcripts**: For all audio content
|
||
|
|
- **Auto-play restrictions**: Avoid auto-playing audio
|
||
|
|
- **Volume controls**: User control over audio levels
|
||
|
|
- **Visual indicators**: Show when audio is playing
|
||
|
|
|
||
|
|
## Mobile Accessibility
|
||
|
|
|
||
|
|
### Touch Interface Guidelines
|
||
|
|
|
||
|
|
#### Gesture Support
|
||
|
|
- **Single-tap primary**: Main interaction method
|
||
|
|
- **Alternative access**: Provide alternatives to complex gestures
|
||
|
|
- **Gesture hints**: Teach users about available gestures
|
||
|
|
- **Gesture conflicts**: Avoid conflicts with system gestures
|
||
|
|
|
||
|
|
#### Mobile-Specific Considerations
|
||
|
|
- **Orientation support**: Work in both portrait and landscape
|
||
|
|
- **Zoom support**: Allow pinch-to-zoom for text content
|
||
|
|
- **Motion sensitivity**: Respect reduced motion preferences
|
||
|
|
- **One-handed use**: Design for thumb navigation
|
||
|
|
|
||
|
|
### Screen Reader Support
|
||
|
|
|
||
|
|
#### iOS VoiceOver
|
||
|
|
- **Element labeling**: Provide clear, descriptive labels
|
||
|
|
- **Navigation order**: Logical focus sequence
|
||
|
|
- **Custom actions**: Define available actions for elements
|
||
|
|
- **Notifications**: Use announcements for dynamic changes
|
||
|
|
|
||
|
|
#### Android TalkBack
|
||
|
|
- **Content descriptions**: Equivalent to alt text for UI elements
|
||
|
|
- **Clickable indicators**: Mark interactive elements properly
|
||
|
|
- **Live regions**: Announce dynamic content changes
|
||
|
|
- **Semantic markup**: Use proper HTML/accessibility semantics
|
||
|
|
|
||
|
|
## Testing and Validation
|
||
|
|
|
||
|
|
### Automated Testing Tools
|
||
|
|
|
||
|
|
#### Figma Plugins
|
||
|
|
- **Stark**: Comprehensive accessibility checker
|
||
|
|
- **Color Blind Web Page Filter**: Color blindness simulation
|
||
|
|
- **Able**: Color contrast and font size checker
|
||
|
|
- **A11y - Color Contrast Checker**: Quick contrast validation
|
||
|
|
|
||
|
|
#### External Tools
|
||
|
|
- **WebAIM WAVE**: Web accessibility evaluation
|
||
|
|
- **axe DevTools**: Automated accessibility testing
|
||
|
|
- **Lighthouse**: Google's accessibility auditing
|
||
|
|
- **Pa11y**: Command-line accessibility testing
|
||
|
|
|
||
|
|
### Manual Testing Methods
|
||
|
|
|
||
|
|
#### Keyboard Testing
|
||
|
|
1. **Tab navigation**: Can you reach all interactive elements?
|
||
|
|
2. **Enter/Space activation**: Do buttons and links work?
|
||
|
|
3. **Arrow key navigation**: Works in menus and lists?
|
||
|
|
4. **Escape key**: Closes modals and menus?
|
||
|
|
|
||
|
|
#### Screen Reader Testing
|
||
|
|
1. **VoiceOver** (Mac): System Preferences → Accessibility → VoiceOver
|
||
|
|
2. **NVDA** (Windows): Free screen reader for testing
|
||
|
|
3. **JAWS** (Windows): Professional screen reader
|
||
|
|
4. **TalkBack** (Android): Built-in Android screen reader
|
||
|
|
|
||
|
|
#### Visual Testing
|
||
|
|
1. **Zoom to 200%**: Content should remain usable
|
||
|
|
2. **Grayscale mode**: Information still accessible?
|
||
|
|
3. **High contrast mode**: Text and UI still visible?
|
||
|
|
4. **Color blindness simulation**: Information still clear?
|
||
|
|
|
||
|
|
### User Testing
|
||
|
|
|
||
|
|
#### Include Users with Disabilities
|
||
|
|
- **Recruit diverse participants**: Different disabilities and assistive technologies
|
||
|
|
- **Test with real users**: Automated tools can't catch everything
|
||
|
|
- **Observe natural usage**: Don't guide too much during testing
|
||
|
|
- **Iterate based on feedback**: Accessibility is an ongoing process
|
||
|
|
|
||
|
|
#### Testing Scenarios
|
||
|
|
- **First-time usage**: Can new users complete key tasks?
|
||
|
|
- **Error recovery**: What happens when things go wrong?
|
||
|
|
- **Complex workflows**: Multi-step processes accessible?
|
||
|
|
- **Different contexts**: Various devices, environments, capabilities
|
||
|
|
|
||
|
|
## Implementation Guidelines
|
||
|
|
|
||
|
|
### Designer Handoff
|
||
|
|
|
||
|
|
#### Accessibility Annotations
|
||
|
|
- **Alt text specifications**: Document all image alt text
|
||
|
|
- **Focus order notes**: Specify tab sequence where non-obvious
|
||
|
|
- **Heading levels**: Mark proper heading hierarchy
|
||
|
|
- **Color contrast values**: Include specific contrast ratios
|
||
|
|
- **Interactive states**: Document all hover/focus/active states
|
||
|
|
|
||
|
|
#### Component Documentation
|
||
|
|
- **Accessibility features**: Built-in accessibility considerations
|
||
|
|
- **Usage guidelines**: When and how to use accessibly
|
||
|
|
- **ARIA patterns**: Required ARIA attributes and roles
|
||
|
|
- **Keyboard interactions**: Expected keyboard behavior
|
||
|
|
|
||
|
|
### Design System Integration
|
||
|
|
|
||
|
|
#### Accessible Components
|
||
|
|
- **Design once, use everywhere**: Build accessibility into components
|
||
|
|
- **Default accessibility**: Make accessible the easy choice
|
||
|
|
- **Clear documentation**: Accessibility requirements in design system
|
||
|
|
- **Regular audits**: Review and update component accessibility
|
||
|
|
|
||
|
|
#### Style Guidelines
|
||
|
|
- **Color palettes**: Pre-tested for contrast ratios
|
||
|
|
- **Typography scales**: Meet minimum size requirements
|
||
|
|
- **Spacing systems**: Ensure adequate touch targets
|
||
|
|
- **Icon libraries**: Include alt text recommendations
|
||
|
|
|
||
|
|
## Legal and Compliance
|
||
|
|
|
||
|
|
### Relevant Laws and Standards
|
||
|
|
|
||
|
|
#### United States
|
||
|
|
- **ADA** (Americans with Disabilities Act): Civil rights law
|
||
|
|
- **Section 508**: Federal agency accessibility requirements
|
||
|
|
- **WCAG 2.1**: Technical standard referenced by many laws
|
||
|
|
|
||
|
|
#### International
|
||
|
|
- **EN 301 549** (European Union): European accessibility standard
|
||
|
|
- **AODA** (Ontario): Accessibility for Ontarians with Disabilities Act
|
||
|
|
- **DDA** (Australia): Disability Discrimination Act
|
||
|
|
|
||
|
|
### Risk Mitigation
|
||
|
|
- **Legal compliance**: Following WCAG AA reduces legal risk
|
||
|
|
- **Documentation**: Keep records of accessibility efforts
|
||
|
|
- **Regular audits**: Ongoing compliance checking
|
||
|
|
- **User feedback**: Channels for reporting accessibility issues
|
||
|
|
|
||
|
|
## Resources and Tools
|
||
|
|
|
||
|
|
### Essential Resources
|
||
|
|
- **WCAG 2.1 Guidelines**: Official W3C accessibility standard
|
||
|
|
- **WebAIM**: Practical accessibility guidance and tools
|
||
|
|
- **A11y Project**: Community-driven accessibility resources
|
||
|
|
- **Inclusive Design Principles**: Microsoft's inclusive design guide
|
||
|
|
|
||
|
|
### Figma-Specific Resources
|
||
|
|
- **Figma Accessibility Guide**: Official Figma accessibility documentation
|
||
|
|
- **Accessible Design Systems**: Examples of accessible component libraries
|
||
|
|
- **Plugin Directory**: Accessibility-focused Figma plugins
|
||
|
|
- **Community Resources**: Accessibility templates and examples
|