Live Regions
Live regions tell screen reader users when something changed — without stealing focus or flooding them with noise.
01 — Purpose
Announce change without moving focus
Live regions tell screen reader users something changed — validation, async completion, status — without stealing focus.
Sighted users see spinners finish, errors appear, and status text update in place. Screen reader users need an equivalent signal. Live regions bridge that gap when you cannot or should not move focus to every update.
Prefer in-context announcements over corner toasts — see toast notifications for why they are a last resort. See also loading states and confirmation — they often depend on live regions done well.
02 — Principles
Improve awareness, not noise
Live regions should orient users — not overwhelm them with every DOM twitch.
- announce meaningful state change — not decorative or redundant updates
-
prefer
politeunless the user must hear it immediately - keep messages short, plain language, and tied to what changed
- do not duplicate the same announcement from multiple regions
03 — Use cases
When live regions earn their place
Validation, async work, and notifications — not every UI change needs aria-live.
- form validation summaries and field errors after submit or blur
- async task completion — save succeeded, upload finished, item removed
- non-blocking notifications where focus should stay on the current task
- progress or status text that updates without a dedicated status role elsewhere
<div aria-live="polite" aria-atomic="true">
<p id="save-status"></p>
</div> 04 — Avoid
Common live region failures
Assertive spam and duplicate regions erode trust fast.
-
aria-live="assertive"for routine updates — reserve for urgent errors or safety-critical change - announcing on every keystroke, poll tick, or animation frame
- decorative messaging that adds no orientation value
- nesting live regions or mirroring the same text in focusable elements
05 — Close
Orientation over interruption
A good live region answers: what changed, and do I need to act?
Test with a screen reader: trigger the update, listen once, and ask whether a non-sighted user would understand the new state. Pair live regions with visible feedback — never rely on aria-live alone for critical errors users must see.
For broader context, see the accessibility standard and screen reader announcements guide.