Reduced motion
Also called prefers-reduced-motion or reduce motion
An operating system setting that asks apps to minimize movement, which websites detect with the prefers-reduced-motion media query.
import { useEffect, useState } from 'react';
import {
AnimatePresence,
MotionConfig,
motion,
useReducedMotion
} from 'motion/react';
type Quote = { text: string; author: string };
export function TestimonialCarousel({ quotes }: { quotes: Quote[] }) {
const reduceMotion = useReducedMotion();
const [index, setIndex] = useState(0);
const quote = quotes[index]!;
const next = () => setIndex((i) => (i + 1) % quotes.length);
// Nothing should move on its own when Reduce motion is on.
useEffect(() => {
if (reduceMotion) return;
const timer = setInterval(
() => setIndex((i) => (i + 1) % quotes.length),
5000
);
return () => clearInterval(timer);
}, [reduceMotion, quotes.length]);
return (
// reducedMotion='user' drops the x slide when the setting is on and keeps
// the opacity fade, so the slide becomes a 200ms crossfade.
<MotionConfig
reducedMotion='user'
transition={{ duration: reduceMotion ? 0.2 : 0.4 }}
>
<section className='w-96 overflow-hidden rounded-2xl border bg-background p-6'>
<AnimatePresence mode='wait' initial={false}>
<motion.figure
key={index}
initial={{ opacity: 0, x: 40 }}
animate={{ opacity: 1, x: 0 }}
exit={{ opacity: 0, x: -40 }}
>
<blockquote className='text-lg'>“{quote.text}”</blockquote>
<figcaption className='mt-3 text-sm text-muted-foreground'>
{quote.author}
</figcaption>
</motion.figure>
</AnimatePresence>
{/* Small, helpful feedback like this hover color stays on. */}
<button
type='button'
onClick={next}
className='mt-4 rounded-full border px-3 py-1 text-sm transition-colors hover:bg-muted'
>
Next quote
</button>
</section>
</MotionConfig>
);
}Respect prefers-reduced-motion across the app: when it is set to reduce, replace slide, zoom, and parallax animations with 200ms opacity fades, stop autoplaying carousels and looping background animations, and keep hover color changes and progress bars. I will test it by turning on Reduce motion in my operating system settings.
Paste into Layerwise or any AI coding tool.
What is Reduced motion?
Reduce motion is a setting on macOS, iOS, Windows, and Android for people who feel dizzy, nauseous, or distracted when things move on screen, including many people with vestibular disorders. Browsers expose it through the CSS media query prefers-reduced-motion, which matches reduce when the setting is on and no-preference otherwise.
The goal is gentler motion. Replace large movements, such as slides across the screen, parallax, zooms, and spinning, with quick fades or instant changes. Keep small, helpful feedback like color changes and progress indicators, and stop anything that loops or plays on its own.
In CSS, put the calmer version inside @media (prefers-reduced-motion: reduce). In React with Motion, the useReducedMotion() hook tells you whether the setting is on, and <MotionConfig reducedMotion="user"> turns off transform and layout animations automatically while keeping opacity and color changes.
Related terms
All termsPurposeful animation
Animation used only where it helps people notice a change, follow where something went, or understand what just happened.
Parallax scrolling
A scroll effect where background layers move slower than the foreground, which creates a sense of depth as the page scrolls.
Crossfade
A transition where the old content fades out while the new content fades in at the same spot, so the two briefly overlap.
Fade in
An entrance animation where an element goes from fully transparent to fully visible, so it appears gently instead of popping in.
Build it with Layerwise
Describe your app, watch it run in a live preview, and publish it with a database, storage, and sign-in built in.