Accessibility in Development | WCAG A11y Integration Guide
Integrate accessibility from project start. Track WCAG 2.1 compliance, add a11y to Definition of Done, and build products everyone can use. Reduce legal risk.
9 min read
Accessibility isn't optional - it's essential. GitScrum helps teams track accessibility requirements and ensure a11y is part of every feature.
Accessibility Fundamentals
Why A11y Matters
ACCESSIBILITY IMPACT:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β WHO BENEFITS: β
β β
β PERMANENT DISABILITIES: β
β β’ Blind users (screen readers) β
β β’ Deaf users (captions, transcripts) β
β β’ Motor disabilities (keyboard nav) β
β β’ Cognitive disabilities (clear design) β
β β
β TEMPORARY CONDITIONS: β
β β’ Broken arm (can't use mouse) β
β β’ Eye infection (can't see well) β
β β’ Loud environment (can't hear) β
β β
β SITUATIONAL: β
β β’ Bright sunlight (low contrast) β
β β’ One hand occupied (holding baby) β
β β’ Slow connection (need lightweight) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β BUSINESS CASE: β
β β
β LEGAL: Many countries require accessibility β
β β’ ADA (USA), EN 301 549 (EU), AODA (Canada) β
β β’ Lawsuits increasing annually β
β β
β MARKET: 15% of world population has disability β
β β’ Significant customer segment β
β β’ Aging population increasing β
β β
β SEO: Accessible sites rank better β
β β’ Semantic HTML helps search engines β
β β’ Alt text improves image search β
β β
β QUALITY: Accessible = better for everyone β
β β’ Clearer design β
β β’ Better keyboard support β
β β’ Improved performance β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
WCAG Guidelines
WCAG 2.1 OVERVIEW:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β FOUR PRINCIPLES (POUR): β
β β
β PERCEIVABLE: β
β Content must be presentable to users β
β β’ Text alternatives for images β
β β’ Captions for video β
β β’ Sufficient color contrast β
β β’ Resizable text β
β β
β OPERABLE: β
β Interface must be navigable β
β β’ Keyboard accessible β
β β’ No seizure-inducing content β
β β’ Enough time to read/interact β
β β’ Clear navigation β
β β
β UNDERSTANDABLE: β
β Content and interface must be clear β
β β’ Readable text β
β β’ Predictable navigation β
β β’ Input assistance β
β β
β ROBUST: β
β Content must work with assistive tech β
β β’ Valid HTML β
β β’ Proper ARIA usage β
β β’ Compatible with screen readers β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β CONFORMANCE LEVELS: β
β β
β Level A: Minimum accessibility (bare minimum) β
β Level AA: Standard target (most requirements) β
β Level AAA: Highest level (specialized needs) β
β β
β RECOMMENDATION: Target WCAG 2.1 Level AA β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Integrating A11y
In Requirements
ACCESSIBILITY IN REQUIREMENTS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β STORY WITH A11Y CRITERIA: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β PROJ-123: Add Image Upload Feature ββ
β β ββ
β β As a user ββ
β β I can upload images to my projects ββ
β β So that I can include visuals in documentation ββ
β β ββ
β β ACCEPTANCE CRITERIA: ββ
β β β Upload button with clear label ββ
β β β Drag-and-drop zone has keyboard alternative ββ
β β β Progress indicator announced to screen readers ββ
β β β Error messages are accessible ββ
β β β Uploaded images require alt text ββ
β β ββ
β β A11Y REQUIREMENTS: ββ
β β β Upload button keyboard accessible (Enter/Space) ββ
β β β Focus management after upload ββ
β β β ARIA live region for progress ββ
β β β Color contrast on all states ββ
β β β Alt text input is required field ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β A11Y IN DEFINITION OF DONE: β
β β
β β Keyboard navigation works β
β β Screen reader tested β
β β Color contrast meets AA β
β β Focus states visible β
β β Form inputs have labels β
β β Automated a11y tests pass β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
A11y Checklist
DEVELOPER A11Y CHECKLIST:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β KEYBOARD: β
β β All interactive elements focusable β
β β Focus order is logical β
β β Focus is visible (outline) β
β β No keyboard traps β
β β Skip links for main content β
β β Custom components have proper keyboard support β
β β
β SCREEN READERS: β
β β All images have alt text β
β β Decorative images have alt="" β
β β Headings are hierarchical (h1βh2βh3) β
β β Form inputs have labels β
β β Links have descriptive text (not "click here") β
β β Dynamic content announced (ARIA live) β
β β
β VISUAL: β
β β Color contrast 4.5:1 (text) / 3:1 (large text) β
β β Color not only indicator β
β β Text resizable to 200% β
β β Motion can be reduced (prefers-reduced-motion) β
β β
β STRUCTURE: β
β β Semantic HTML (nav, main, aside, etc.) β
β β Valid HTML β
β β Language attribute on html β
β β Page titles are descriptive β
β β
β FORMS: β
β β Labels associated with inputs β
β β Required fields indicated β
β β Error messages clear and associated β
β β Success/error states announced β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Testing A11y
Testing Approach
ACCESSIBILITY TESTING STRATEGY:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β AUTOMATED TESTING (Catch ~30% of issues): β
β β
β TOOLS: β
β β’ axe-core (most popular) β
β β’ Lighthouse accessibility audit β
β β’ WAVE browser extension β
β β’ ESLint jsx-a11y plugin β
β β
β INTEGRATION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β // In test suite ββ
β β import { axe } from 'jest-axe'; ββ
β β ββ
β β it('should have no a11y violations', async () => { ββ
β β const { container } = render(<MyComponent />); ββ
β β const results = await axe(container); ββ
β β expect(results).toHaveNoViolations(); ββ
β β }); ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β MANUAL TESTING (Catch remaining ~70%): β
β β
β KEYBOARD: β
β β’ Tab through entire page β
β β’ Use Enter/Space on all interactive elements β
β β’ Check focus is always visible β
β β
β SCREEN READER: β
β β’ Test with VoiceOver (Mac), NVDA (Windows) β
β β’ Navigate headings, landmarks, links β
β β’ Complete key user flows β
β β
β ZOOM: β
β β’ Zoom to 200% β
β β’ Check no content lost or overlapping β
β β
β COLOR: β
β β’ Use colorblind simulator β
β β’ Check meaning without color β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
A11y Tasks
Tracking A11y Work
A11Y WORK IN GITSCRUM:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β A11Y AUDIT TASK: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β A11Y-01: Q1 Accessibility Audit ββ
β β ββ
β β Scope: Full application audit ββ
β β Standard: WCAG 2.1 AA ββ
β β Due: End of Q1 ββ
β β ββ
β β Checklist: ββ
β β β Automated scan with axe ββ
β β β Manual keyboard testing ββ
β β β Screen reader testing (VoiceOver + NVDA) ββ
β β β Document all issues found ββ
β β β Prioritize and create fix tasks ββ
β β ββ
β β Output: A11Y issue backlog ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β A11Y FIX TASK: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β A11Y-15: Fix missing form labels on checkout ββ
β β ββ
β β WCAG: 1.3.1 (Info and Relationships) ββ
β β Severity: Serious ββ
β β Found in: /checkout page ββ
β β ββ
β β Issue: ββ
β β Form inputs missing associated labels ββ
β β Screen readers cannot identify fields ββ
β β ββ
β β Fix: ββ
β β Add <label for="..."> to all inputs ββ
β β Or use aria-labelledby ββ
β β ββ
β β Acceptance: ββ
β β β All inputs have visible labels ββ
β β β Labels correctly associated ββ
β β β Screen reader announces labels ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β LABELS: β
β accessibility, wcag-aa, screen-reader, keyboard β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Common Patterns
Accessible Components
ACCESSIBLE COMPONENT PATTERNS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β MODAL DIALOG: β
β β
Traps focus inside modal β
β β
Escape closes modal β
β β
Returns focus to trigger on close β
β β
role="dialog" aria-modal="true" β
β β
Labeled with aria-labelledby β
β β
β CUSTOM DROPDOWN: β
β β
role="listbox" and role="option" β
β β
Arrow keys navigate options β
β β
Enter/Space selects β
β β
Escape closes β
β β
aria-expanded on trigger β
β β
β TABS: β
β β
role="tablist", role="tab", role="tabpanel" β
β β
Arrow keys switch tabs β
β β
aria-selected on active tab β
β β
Tab panels labeled β
β β
β TOAST NOTIFICATIONS: β
β β
role="alert" or aria-live="polite" β
β β
Important: role="alert" (urgent) β
β β
Less urgent: aria-live="polite" β
β β
Can be dismissed by user β
β β
β TOGGLE/SWITCH: β
β β
role="switch" (or checkbox) β
β β
aria-checked state β
β β
Clear label indicating what's toggled β
β β
State change announced β
β β
β RESOURCES: β
β β’ WAI-ARIA Authoring Practices (official patterns) β
β β’ Inclusive Components (book) β
β β’ a11y-style-guide β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ