Prefers Reduced Motion
•
1 min read
By now, most devs are familiar with the prefers-reduced-motion
media query that tells whether or not a user prefers, well, reduced motion. You can use this to tone down (or turn off) transitions and animations in your stylesheet to accommodate users with vestibular motion disorders.
.animation {
/* normal animation */
}
@media (prefers-reduced-motion) {
.animation {
/* subtle or no animation */
}
}
That's pretty useful, but if you're using the Web Animations API, you may want to check for this with JavaScript instead. Thanks to window.matchMedia
, it's pretty easy to do. I like to wrap it up in a small function that returns a boolean: true
if the users prefers reduced motion or false
if they have no preference.
function prefersReducedMotion() {
const query = window.matchMedia('(prefers-reduced-motion: reduce)');
return query?.matches;
}
Usage looks something like this:
if (prefersReducedMotion()) {
// subtle or no animation
} else {
// normal animation
document.querySelector('.my-element').animate(...);
}