Frontend Academy · Les

prefers-reduced-motion respecteren

Detecteer de prefers-reduced-motion-mediaquery en schakel animaties uit of beperk ze voor gebruikers die om minder beweging hebben gevraagd.

Les 4 van 413 stappen

prefers-reduced-motion respecteren is een gratis Frontend Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Frontend Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Frontend Academy bevat in totaal 4 lessen.

De mediafunctie prefers-reduced-motion

Sommige gebruikers krijgen misselijkheid, duizeligheid of epileptische aanvallen door beweging in gebruikersinterfaces. Zij stellen hun besturingssysteem in op minder beweging. De mediafunctie prefers-reduced-motion detecteert deze voorkeur, zodat CSS hierop kan reageren.

Minder beweging detecteren in CSS

Wikkel animaties in de tegenovergestelde mediaquery: pas animaties normaal toe en overschrijf of schakel ze daarna uit voor gebruikers die minder beweging verkiezen.

/* Apply animation by default */
.spinner {
  animation: spin 1s linear infinite;
}

/* Disable for users who want less motion */
@media (prefers-reduced-motion: reduce) {
  .spinner {
    animation: none;
  }
}

Het principe ‘minder, niet niets’

prefers-reduced-motion: reduce betekent niet dat er helemaal geen beweging mag zijn. Sommige bewegingen geven belangrijke wijzigingen in de toestand van de gebruikersinterface aan. Verwijder animaties daarom niet volledig, maar vertraag ze of vereenvoudig ze tot overgangen tussen twee beelden.

@media (prefers-reduced-motion: reduce) {
  .modal {
    /* Replace scale + fade with just fade */
    animation: fadeOnly 0.1s linear;
  }
  @keyframes fadeOnly {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
}

De rigoureuze optie: alle animaties uitschakelen

Een veelgebruikt patroon is om alle overgangen en animaties wereldwijd uit te schakelen voor gebruikers die minder beweging verkiezen. Dit is een veilige basis, ook als niet elke animatie afzonderlijk is afgestemd.

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

Minder beweging detecteren in JavaScript

Gebruik de API matchMedia om de voorkeur in JavaScript te detecteren — handig voor het aansturen van canvasanimaties, door JavaScript aangestuurde bewegingen of video's die automatisch worden afgespeeld.

const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)');

if (prefersReduced.matches) {
  // skip gsap or canvas animations
} else {
  startAnimation();
}

// React to preference changes:
prefersReduced.addEventListener('change', (e) => {
  if (e.matches) stopAnimations();
  else startAnimations();
});

Scrollgedrag en automatisch afspelen

Schakel ook vloeiend scrollen uit voor gebruikers die minder beweging verkiezen: scroll-behavior: auto. Stop video's die automatisch worden afgespeeld. Laat inhoud niet flitsen of stroboscopisch knipperen.

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

// In JS:
if (!prefersReduced.matches) {
  element.scrollIntoView({ behavior: 'smooth' });
} else {
  element.scrollIntoView(); // instant
}

WCAG 2.3.3 — Animatie door interacties

WCAG 2.3.3 (niveau AAA) vereist dat beweging die door een gebruikersinteractie wordt gestart, kan worden uitgeschakeld. Door prefers-reduced-motion te respecteren voldoe je aan dit criterium en verbeter je de toegankelijkheid voor gebruikers met vestibulaire aandoeningen.

Minder beweging testen

Open in Chrome DevTools het weergavepaneel (menu met drie puntjes → Meer hulpprogramma's → Weergave) en schakel 'CSS-mediafunctie prefers-reduced-motion emuleren' in. Test je gebruikersinterface in deze modus voordat je die publiceert.

Praktisch: veilig animatiepatroon

Een bewegingsveilige animatie wordt standaard toegepast en zo ingepakt dat je haar eenvoudig wereldwijd kunt uitschakelen.

@keyframes slideIn {
  from { opacity: 0; transform: translateX(-16px); }
  to   { opacity: 1; transform: translateX(0); }
}

@media (prefers-reduced-motion: no-preference) {
  .alert {
    animation: slideIn 0.3s ease;
  }
}

Focusanimatie moet behouden blijven

Focusindicatoren (de ring die laat zien welk element focus heeft) mogen NIET worden verwijderd, ook niet voor gebruikers die minder beweging verkiezen. Ze zijn essentieel voor toetsenbordnavigatie en veroorzaken doorgaans geen vestibulaire klachten.

Bibliotheken en prefers-reduced-motion

Populaire animatiebibliotheken (Framer Motion, GSAP, Anime.js) bieden ingebouwde ondersteuning voor minder beweging. De hook useReducedMotion() van Framer Motion maakt het eenvoudig om complexe animaties voorwaardelijk uit te schakelen in React.

Korte controle

Welke CSS-mediafunctie detecteert de voorkeur van een gebruiker om minder beweging in de gebruikersinterface te zien?

Samenvatting: prefers-reduced-motion

Sommige gebruikers hebben om vestibulaire of neurologische gezondheidsredenen minder beweging nodig. Gebruik @media (prefers-reduced-motion: reduce) om animaties uit te schakelen of te vereenvoudigen. Detecteer de voorkeur in JS met matchMedia. De rigoureuze optie: stel animation/transition-duration wereldwijd in op 0.01ms. WCAG 2.3.3 beveelt dit aan. Test met het weergavepaneel van DevTools.

Gratis beginnen

Leer HTML met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
41
Lessen
163

Veelgestelde vragen

Is de les “prefers-reduced-motion respecteren” gratis?

Ja — de volledige tekst van “prefers-reduced-motion respecteren” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Frontend Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Frontend Academy bevat in totaal 4 lessen.

Wat leer ik in “prefers-reduced-motion respecteren”?

Detecteer de prefers-reduced-motion-mediaquery en schakel animaties uit of beperk ze voor gebruikers die om minder beweging hebben gevraagd. Je oefent met Frontend Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Frontend Academy te beginnen?

Ervaring vooraf is niet nodig. Frontend Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “prefers-reduced-motion respecteren”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Frontend Academy?

Ja. Elke les over Frontend Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. CSS custom properties: declareren en bijwerken
  2. Transities: property duration timing
  3. @keyframes-animaties
  4. prefers-reduced-motion respecteren
← Terug naar Frontend Academy