Reduced Motion Demo - Online Prefers‑Reduced‑Motion Switcher
Toggle between full and reduced motion on a live animated page. See how to design for vestibular disorders. Educational.
UD5 Toolkit
Detect your system's motion preference and preview how animations behave under
prefers-reduced-motion: reduce
Your system reports no-preference — full animations are applied.
no-preferencewindow.matchMedia('(prefers-reduced-motion: reduce)') to detect your OS-level accessibility setting. Changes are monitored in real-time.
These elements animate with standard motion. Toggle the Simulate Reduced switch above to preview the accessible alternative.
/* Standard animations */
.my-element {
animation: slideIn 0.5s ease;
}
@media (prefers-reduced-motion: reduce) {
.my-element {
animation: none;
transition: opacity 0.3s ease;
opacity: 1;
}
}
const mq = window.matchMedia(
'(prefers-reduced-motion: reduce)'
);
if (mq.matches) {
// Disable animations
disableAnimations();
}
// Listen for changes
mq.addEventListener('change', (e) => {
if (e.matches) {
disableAnimations();
} else {
enableAnimations();
}
});
reduce, it signals that the user prefers minimal or no animation. This is critical for accessibility — users with vestibular disorders, motion sensitivity, or cognitive conditions can experience dizziness, nausea, or disorientation from excessive animations. Respecting this preference is part of WCAG 2.2 Success Criterion 2.3.3 (Animation from Interactions) and demonstrates inclusive design practices.
@media (prefers-reduced-motion: reduce) media query to override animations. For example, set animation: none and transition: none (or use subtle opacity transitions). You can also reduce animation duration, disable parallax effects, and replace motion-heavy interactions with simple fades. A best practice is to define all animations inside a media query for no-preference so that reduced motion is the safer default.
window.matchMedia('(prefers-reduced-motion: reduce)'). Check the .matches property for the current state, and attach a change event listener to respond dynamically when the user toggles the setting. This is useful for JavaScript-driven animations, libraries like GSAP or Framer Motion, and for programmatically disabling video autoplay or carousels.
prefers-reduced-motion: reduce can be a signal to skip heavy animation workloads, reduce GPU usage, and serve lighter experiences. However, don't rely on it as the sole performance optimization — many users who would benefit from reduced motion (e.g., on low-power devices) may not have the setting enabled. Combine it with device memory APIs, battery status, or network conditions for a comprehensive adaptive loading strategy.
motion-reduce and motion-safe utility classes out of the box. Framer Motion (React) has a useReducedMotion() hook. GSAP allows checking the media query before creating tweens. Bootstrap 5 uses prefers-reduced-motion in its core to conditionally disable transitions. Most modern animation libraries now include built-in support — always check the docs for accessibility options before implementing custom animation solutions.
Toggle between full and reduced motion on a live animated page. See how to design for vestibular disorders. Educational.
Enter a URL and extract tab‐index order violations and focusable elements. Quick accessibility audit. Client‑side fetch.
Enter a URL and a user‑agent to see if it is allowed or blocked by the robots.txt file. Quick bot validation.
Test overscroll‑behavior: contain to prevent background scroll or pull‑to‑refresh. See the effect in a live demo.
Simulate forced‑colors mode and see how your site looks. Adjust CSS system colors. Make your design accessible.
Load an animated GIF and adjust its frame delay to make it slower or faster. Download the modified GIF. All local.
See how a full paragraph looks with your chosen text and background colors. Not just a ratio; the real appearance.
Paste HTML and see the order in which elements would receive focus via Tab key. Highlight issues. Local accessibility testing.
Open a test video in Picture‑in‑Picture mode. Control entering and leaving PiP. Copy the code snippet for your own app.
Paste a website's HTML and see which text is only visible to screen readers (e.g., .sr‑only). Preview the accessible layer.
Toggle between light and dark mode for a demo page. See how to use the media query. Copy the pattern.
Paste your CSS and strip all `!important` declarations in one click. See a list of affected rules. Local tool.
Highlight elements with aria‑describedby and see the linked description text. Verify a11y annotations.
Apply content‑visibility: auto to off‑screen sections and see the rendering cost drop. Demos for infinite scroll optimization.
Check English spelling and get suggestions using the browser's built-in dictionary. Highlight errors instantly. No data leaves your machine.
Query DNS records for any domain directly from your browser using DNS-over-HTTPS. See A, AAAA, MX, CNAME, and TXT records. No logs.
Enter a URL and see a visual map of the tab order. Detect broken tabindex values. Improve keyboard navigation.
Compare all CSS easing presets side by side on a bouncing ball. See which curve fits your UI animation.
Apply realistic reverbs (cathedral, hall, room) to any audio using pre‑loaded impulse responses. Hear the difference instantly.
Paste HTML and detect elements with aria‑hidden='true' that contain focusable children. An easy a11y win to fix.
Start from a base color and use `oklch(from color l c h)` to create lighter or darker variants. Copy the code.
Drag a slider to compare your original image with a compressed version (e.g., WebP). See the quality difference and file size savings.
Detect browser support for font‑tech() and font‑format() values in @font‑face src. Check COLRv1, variable, etc.
Paste a line of poem and see which syllable stresses create a particular meter. Educational tool.
Apply dyslexia‑friendly fonts, spacing, and background to any text. Preview and copy the formatted version. Improve readability.
Toggle scrollbar‑gutter: stable to reserve space for the scrollbar and avoid content jumps. Visual demo with two columns.
Guided breathing exercises with animated circle for inhale/hold/exhale. Includes box breathing, 4-7-8, and resonant breathing patterns. Customizable intervals.
Check if your site is cross‑origin isolated by examining the COOP and COEP headers. See if SharedArrayBuffer is available.
Multiple digital counters for tracking stitches, rows, and pattern repeats. Increment, reset. Works on mobile.
Enter a URL and get a quick simulation of First Contentful Paint, LCP, and CLS using browser metrics. Lightweight alternative.