Animation, motion and prefers-reduced-motion (WCAG 2.2.2 and 2.3.3)
Moving, blinking or scrolling content that starts on its own and runs over five seconds beside other content needs a pause, stop or hide control, as does auto-updating content such as a timed carousel (2.2.2, Level A). Nothing may flash more than three times in a second unless it is below the flash thresholds (2.3.1, Level A). Animation set off by interaction, such as scrolling, can be turned off (2.3.3, Level AAA), and prefers-reduced-motion is one way to do it.
Published . Last reviewed .
Motion causes three different problems, and WCAG has a criterion for each. According to W3C's explanations, moving and auto-updating content is a barrier for anyone who has trouble reading stationary text quickly or tracking moving objects, and blinking distracts people with attention deficit disorders (W3C on 2.2.2). Flashing can trigger seizures in people with photosensitive seizure disorders (W3C on 2.3.1). Non-essential movement can cause dizziness and nausea in people with vestibular (inner ear) disorders (W3C on 2.3.3).
The three criteria at a glance
| Criterion | Level | What it covers | What it asks for |
|---|---|---|---|
| 2.2.2 Pause, Stop, Hide | A | Moving, blinking or scrolling content that starts on its own, lasts more than five seconds and sits beside other content, and auto-updating content | A way to pause, stop or hide it (for auto-updating content, a way to control how often it updates also works), unless it is essential |
| 2.3.1 Three Flashes or Below Threshold | A | Anything that flashes | No more than three flashes in any one second, or flashes below the thresholds |
| 2.3.3 Animation from Interactions | AAA | Motion animation that an interaction, such as scrolling, sets off | A way to disable it, unless it is essential |
Level AA includes every Level A criterion (see conformance levels), so 2.2.2 and 2.3.1 are part of any requirement that names A or AA. 2.3.3 was added in WCAG 2.1 (W3C's list of what is new in 2.1) at Level AAA.
Content that moves, blinks, scrolls or updates on its own (2.2.2)
Criterion 2.2.2 has two parts. Moving, blinking or scrolling content needs a way to pause, stop or hide it when it starts automatically, lasts more than five seconds and is presented in parallel with other content (in W3C's examples, an animation that is the only content on the page is not), unless the movement is essential, meaning removing it would fundamentally change the information or functionality. Auto-updating content, which changes or disappears on a preset interval, gets the same rule with two differences: no five-second exception, and the author may offer control over the update frequency instead.
Starting automatically broadly means not being the direct result of a user's intentional activation. W3C counts starts triggered indirectly, such as by hovering, focusing or scrolling into view, and says they can also fail 2.3.3.
What counts as a mechanism
- A pause or stop button. W3C's technique G186 is a control in the page, at the top or next to the moving content, and it must itself have a name, enough contrast and keyboard access. W3C's explanation recommends one control for everything that moves.
- A pause that does not trap the user. It must not tie up the user or the keyboard focus. An animation that stops only while focused and restarts when focus leaves does not count.
- Stopping on its own. Blinking that stops within five seconds needs no control. For a GIF, technique G152 sets the repetitions so the animation ends within five seconds.
Where it applies on a real page
Where a row goes beyond what W3C's pages say, it is GotAlt's reading.
| Element | Does 2.2.2 apply? | What to offer |
|---|---|---|
| Carousel that advances on a timer | Yes, as auto-updating content (W3C's examples include auto-advancing presentations and messages), with no five-second exception | A pause or stop button (accessible carousels) |
| Looping video with no sound | In our reading, yes after five seconds beside other content, since W3C lists motion pictures as moving content | A pause control or no autoplay. Autoplaying sound is a separate criterion, 1.4.2 Audio Control. |
| Looping animated GIF | Yes, if it runs more than five seconds beside other content | Stop it within five seconds, add a control, or use a still image |
| Scrolling ticker | Yes; W3C's failure F16 is a ticker with no pause | Pause and restart controls |
| Blinking badge or price | Yes after five seconds; W3C's failure F112 uses blinking sale prices | Stop it within five seconds or add a control |
| Loading spinner | Often not: a preloader (a wait animation) that is the only content needs no control, and W3C allows one as essential when nobody can interact and no progress would look like a freeze | Show it only while loading |
A video you keep has other duties: see video captions and transcripts and audio description.
Flashing: the seizure limit (2.3.1)
A flash is a pair of opposing changes in relative luminance (brightness) that can cause seizures in some people if it is large enough and in the right frequency range. Criterion 2.3.1 asks that nothing flash more than three times in any one second, or that flashes stay below the general flash and red flash thresholds. It applies to all content on the page.
W3C defines the thresholds in its explanation of 2.3.1. A general flash is a pair of opposing changes of 10% or more of maximum relative luminance where the darker state is below 0.80. A red flash is any pair of opposing transitions involving a saturated red. Content also passes if flashes occurring together cover no more than .006 steradians within any 10 degree visual field (for web content, W3C says a 341 by 256 pixel rectangle on a 1024 by 768 screen estimates that field).
The simpler route is three or fewer flashes in any one second: W3C says no tool is needed to evaluate that, and technique G19 describes the limit as stricter than the criterion but easier to test. Check video clips, animated images and strobing effects, analyzing a looping clip while it loops. W3C points to analysis tools such as the Trace Center's Photosensitive Epilepsy Analysis Tool, with no endorsement implied.
Blinking and flashing differ. W3C says blinking, a distraction, can be allowed briefly if it stops or can be stopped. Flashing cannot be allowed even for a second, and a stop button is no answer because a seizure could occur faster than most people could use it. Blinking faster than three times a second counts as flashing.
Animation triggered by interaction (2.3.3)
Criterion 2.3.3 asks that motion animation set off by an interaction can be disabled, unless it is essential. W3C defines motion animation as steps added between states to create the illusion of movement: an element that slides into place or changes size as it appears is animated, and one that appears instantly is not. Plain color or opacity changes do not count unless they change the perceived size, shape or position, so in GotAlt's reading a fade can stand in for a slide.
W3C's examples are scroll effects: elements that move beyond the scroll itself can trigger vestibular reactions, and parallax scrolling, where backgrounds move at a different rate to foregrounds, is often non-essential. The scroll is fine, since the user controls it; the extras must be switchable off. W3C says reactions can be severe, possibly needing bed rest.
W3C says to choose any one of three routes: avoid unnecessary animation, provide a control that turns it off, or use the reduce motion feature of the user agent or operating system. Its sufficient techniques are C39, the CSS prefers-reduced-motion query, and SCR40, the same query in JavaScript. 2.3.3 covers animation an interaction starts and 2.2.2 covers animation the page starts by itself, so one animation can fail both.
Level AAA and the law. This page is general information, not legal advice. None of the laws in our table of laws and WCAG versions names AAA (see conformance levels). W3C does not recommend AAA as a blanket policy for entire sites, which is a reason to pick the AAA criteria that suit your content, not to skip them. GotAlt recommends honoring reduced motion on any site with scroll or hover effects.
prefers-reduced-motion: what the setting means
prefers-reduced-motion is a CSS media feature, a condition a style rule can test. MDN says it detects whether the user has turned on a device setting to minimize non-essential motion, telling the browser they prefer an interface that removes, reduces or replaces motion-based animations. Its values are no-preference and reduce, and MDN labels it Baseline widely available since January 2020.
The Media Queries Level 5 working draft (19 February 2026) says reduce means removing or replacing motion that triggers discomfort in people with vestibular motion sensitivity, or distraction in people with attention deficits. That is a preference, not a pause control. MDN lists where visitors switch it on; the main places are below.
| Platform | Where to find it |
|---|---|
| Windows 11 | Settings, Accessibility, Visual Effects, Animation Effects |
| macOS | System Settings, Accessibility, Display, Reduce motion (macOS 15 and earlier; under Motion in later versions) |
| iOS | Settings, Accessibility, Motion |
| Android 9 and later | Settings, Accessibility, Remove animations |
| Firefox, for testing | In about:config, a number preference named ui.prefersReducedMotion: 0 for full animation, 1 for reduced |
How to honor it
In CSS
W3C's technique C39 shows two patterns: write the animation and override it inside @media (prefers-reduced-motion: reduce), as MDN's example does, or write static styles and add motion only inside @media (prefers-reduced-motion: no-preference). In our reading the second is safer, since nothing moves until the query allows it. This invented example fades a panel in for everyone and slides it only for visitors who have not asked for less motion.
.panel { opacity: 0; transition: opacity 0.2s; }
.panel.is-open { opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
.panel { transform: translateY(1.5rem); transition: opacity 0.2s, transform 0.4s; }
.panel.is-open { transform: none; }
}
In JavaScript
Script-driven animation needs the same check. W3C's technique SCR40 uses window.matchMedia, which per MDN returns an object you can read for the current result and watch for changes. WebKit advises listening for changes too.
const motionOk = window.matchMedia("(prefers-reduced-motion: no-preference)");
function setUpMotion() {
if (motionOk.matches) { /* scripted animation, parallax, autoplay */ }
else { /* static version, video paused */ }
}
motionOk.addEventListener("change", setUpMotion);
setUpMotion();
Reduce, do not simply remove
WebKit's 2017 post by James Craig lists motion that commonly triggers vestibular reactions: scaling and zooming, spinning, multi-speed or multi-directional movement such as parallax, plane shifting, and horizontal movement in the peripheral field of vision. It also warns against reducing too much. Change the animations you know to be triggers, and where motion carries meaning, substitute a simpler animation or another visual cue. One of its takeaways is a good rule: "the Web belongs to the user, not the author."
What the setting does not do
- It does nothing by itself. A looping video keeps playing until your CSS or script acts on the preference.
- In GotAlt's reading, it is not a 2.2.2 mechanism on its own. W3C lists C39 for 2.3.3. The sufficient techniques it lists for 2.2.2 are controls the page provides and content that stops within five seconds. W3C's definition of a mechanism does allow one the platform provides, but a visitor who has not set the preference has no way to stop an autoplaying carousel, so use the setting as a second layer, for example to start a carousel stopped, and keep the visible button.
- It does not fix flashing. W3C says a stop control is no answer to flashing, and in our reading a setting is no better. Fix flashing in the content.
Check it yourself
Motion exists only once a browser runs the page, so most of this is tested by eye. Run it on each template and on any page with video or scroll effects.
- Watch for ten seconds. Note and time anything that moves, blinks, scrolls or updates on its own. After five seconds, beside other content, it needs a control. Auto-updating content needs one at any length.
- Use the control. Reach it by keyboard (our keyboard accessibility test covers the method), check that it has a name, and check that pressing it stops the movement and keeps it stopped.
- Look for flashing in clips, animated images and effects. Three or fewer flashes a second needs nothing more. Faster has to be measured against the thresholds or removed.
- Switch on reduced motion, using the settings table above, then reload, scroll, hover, open menus and move between pages. Parallax, zooms and slide-ins should be gone or gentler, and meaningful changes still visible.
- Record the result in the WCAG checklist, which tracks the 55 Level A and AA criteria with notes and a CSV export. Set the target to Level AAA to include 2.3.3 along with the other AAA criteria.
Scan my site for free flags audio and video set to autoplay without the muted attribute (1.4.2) and a timed meta refresh (2.2.1) in the HTML your server sends. It never watches a page move, so a clean scan says nothing about 2.2.2, 2.3.1 or 2.3.3, and the accessibility bookmarklet does not test motion either. What we check sets out the limits, and how to test website accessibility covers the wider routine.
Animation and reduced motion questions
Does WCAG require prefers-reduced-motion?
None of the three motion criteria names the media query in its wording. Criterion 2.3.3 (Level AAA) asks that non-essential animation triggered by interaction can be disabled, and W3C lists the prefers-reduced-motion query as a sufficient technique for it. Other routes are avoiding the animation or giving visitors a control. In GotAlt's reading, the query alone does not meet 2.2.2, which needs a pause, stop or hide mechanism.
How long can something move before it needs a pause button?
Under success criterion 2.2.2, moving, blinking or scrolling content that starts automatically and sits beside other content needs a pause, stop or hide mechanism once it lasts more than five seconds. Auto-updating content has no five-second exception, so a slideshow that advances on a timer needs a control however short each slide is.
How many times can something flash per second?
Success criterion 2.3.1 allows no more than three flashes in any one-second period, or flashes that stay below the general flash and red flash thresholds. W3C says no tool is needed to evaluate content that flashes three or fewer times in any one second. Faster flashing has to be measured against the thresholds, which cover brightness changes, saturated red and the screen area involved.
Does an autoplaying background video need a pause button?
In GotAlt's reading, yes, once it keeps moving for more than five seconds beside other content, because W3C lists motion pictures among the moving content 2.2.2 covers. Sound that plays automatically for more than three seconds is a separate rule, 1.4.2 Audio Control, which needs a pause or stop control or a volume control independent of the system volume. A muted video has no sound problem but can still move.
Does reduced motion mean removing every animation?
No. MDN describes the setting as a preference for an interface that removes, reduces or replaces motion-based animations. WebKit's guidance is to change the animations known to trigger vestibular reactions, such as scaling, spinning and parallax, and to replace motion that carries meaning with a simpler animation or another visual cue. A plain opacity fade is not motion animation under W3C's definition, so it can stand in for a slide.
Does parallax scrolling fail WCAG?
It can: parallax that cannot be turned off fails 2.3.3, a Level AAA criterion. W3C calls parallax scrolling an often non-essential animation, and 2.3.3 asks that such animation can be disabled. Parallax that switches off through prefers-reduced-motion or a site-wide control meets that criterion. If the effect starts on its own, Level A criterion 2.2.2 can apply as well.
Does a loading spinner need a pause button?
Usually not. W3C's explanation of 2.2.2 says a preloader that is the only content on the page needs no control, even if it runs longer than five seconds on a slow connection, because it is not presented in parallel with other content. A preload animation can also count as essential when nobody can interact during loading and showing no progress would make the page seem frozen.
How do I turn on reduced motion to test my site?
Switch on your device's setting, then reload the page. MDN lists them. On Windows 11 it is under Accessibility, Visual Effects, Animation Effects; on macOS 15 and earlier, under Accessibility, Display, Reduce motion; on iOS, under Accessibility, Motion; and on Android 9 and later, under Accessibility, Remove animations. In Firefox, add a number preference named ui.prefersReducedMotion in about:config and set it to 1.
Run the automated part first
The free scan flags audio and video that autoplay without the muted attribute and a timed meta refresh, among its rule-based checks. It cannot watch a page move, so use the checks above for motion. No signup.
Scan my site for freeRelated guides
- WCAG 2.2 success criteria: all 86, explained in plain English.
- Plain language: readability for accessibility.
- Accessible email newsletters: alt text, structure and contrast in email.
- Video captions and transcripts: what WCAG 1.2 asks for.
- Audio description: what it is and when WCAG requires it.
- Accessible typography: size, line height and spacing.
- Zoom and reflow: text at 200% and 400%.