Live Regions for Dynamic Updates
Announcing async state changes (toasts, search results, form errors) to screen readers.
Why
When a toast appears or search results update, sighted users see it instantly. Screen-reader users hear nothing unless the update is in a live region — they're left believing nothing happened.
The WebAIM Million 2024 report found 96.3% of homepages had detectable WCAG failures. ADA-related lawsuits exceeded 4,500 in 2023, making accessibility a legal and ethical necessity, not a nice-to-have.
When
Use live regions for any async update the user needs to know about: toasts, search-as-you-type results, form validation errors, loading→done transitions, cart count changes. Do not treat accessibility as a final-stage checklist — retrofitting is 10x more expensive than building it in.
Avoid relying solely on automated scanners; they catch only ~40% of issues.
How
Example
Common Problems
- ⚠aria-live added dynamically — screen readers don't pick it up, update is silent
- ⚠Assertive for everything — interrupts constantly, users can't hear anything else
- ⚠Moving focus instead of using a live region — disorients users, loses their place
Best Practices
- ✓Pre-declare live regions in static HTML — update content, not the attribute
- ✓Default to polite — reserve assertive for true errors that need immediate attention
- ✓Use role=status / role=alert — they imply the right live+atomic combo, less to remember