Rörelse

Prefers reduced motion: animation som alla kan använda

För vissa är en parallaxrullning eller en zoomande hero inte förtjusande, den är yrselframkallande. En enda inställning visar vilka de är. Så respekterar du den utan att tappa din design.

GradientlyVerifierat Gradiently-konto··5 minuters läsning
Omslag: Quiet Sandbar · GR·MTHB·3C

Kortversionen

  • prefers-reduced-motion är en CSS-mediafunktion som anger om en besökare har bett sin enhet minimera icke nödvändig rörelse.
  • Människor slår på minskad rörelse av många skäl, bland annat vestibulära besvär, där rörelse på skärmen kan ge yrsel, illamående eller huvudvärk.
  • Minskad rörelse behöver inte betyda ingen rörelse: ersätt stora rörelser som glidningar, zoomar och parallax med mjuka toningar och stoppa automatiskt spelande loopar.
  • Ett pålitligt mönster är att skriva den stilla designen först och bara lägga till rörelse inuti en mediafråga för prefers-reduced-motion: no-preference.
  • Varje operativsystem har en inställning för minskad rörelse, så du kan testa din sajt genom att slå på den.
På den här sidan

Prefers reduced motion, skrivet prefers-reduced-motion i CSS, är en mediafunktion som talar om för din webbplats att en besökare har bett sin enhet minimera icke nödvändig rörelse. När den rapporterar reduce bör du lugna ner sidan: stoppa automatiskt spelande loopar, ersätt glidningar, zoomar och parallax med mjuka toningar eller ingenting och visa stilla versioner av animerade bakgrunder. Det är lite arbete som gör en sajt användbar för människor som annars lämnar den med en känsla av illamående.

Vem minskad rörelse är till för

Vissa har vestibulära besvär, som påverkar innerörat och hjärnans känsla för balans och rörelse. För dem kan stor rörelse på skärmen, särskilt parallax, zoomar och element som glider över stora ytor, utlösa yrsel, illamående, huvudvärk eller desorientering. Andra tycker att ständig rörelse distraherar, har migrän eller föredrar helt enkelt en lugnare skärm. Alla använder samma reglage i enhetens inställningar, och de ska inte behöva förklara varför.

EnhetVar inställningen finns
MacSysteminställningar, Tillgänglighet, Skärm, Minska rörelse
iPhone och iPadInställningar, Tillgänglighet, Rörelse, Minska rörelse
Windows 11Inställningar, Tillgänglighet, Visuella effekter, Animeringseffekter (av)
AndroidInställningar, Tillgänglighet, Ta bort animationer (sökvägen varierar med tillverkare och version)
Webbläsare läser de här inställningarna och rapporterar dem till din sajt via prefers-reduced-motion.

Vad du ska minska och vad som kan vara kvar

Minskad rörelse är inte detsamma som ingen rörelse. Målet är att ta bort rörelse som simulerar färd genom rummet eller fyller stora delar av skärmen, och att stoppa allt som spelas av sig självt. Små, snabba återkopplingar och enkla toningar är oftast lugnt att behålla och hjälper ofta människor att förstå vad som ändrats.

Minska eller ta bort

  • Parallaxrullning och rörelse kopplad till rullning
  • Stora glidningar, zoomar och sidvändningsövergångar
  • Automatiskt spelande video och animerade bakgrunder
  • Snurrande, studsande och skakande element
  • Karuseller som går framåt av sig själva

Går oftast bra att behålla

  • Toningar i opacitet och färgbyten
  • Liten, snabb återkoppling vid hovring och tryck
  • Förloppsindikatorer som visar att något pågår
  • Rörelse som besökaren själv startar och styr, som att dra
  • Stillbilder i stället för rörliga

Ersätt hellre än ta bort där du kan. Om en panel vanligtvis glider in från sidan, låt den tona in i stället. Om hero-ytan spelar en loop, visa en stillbild ur den. Designen förblir hel, det är bara färden som försvinner.

Så följer du prefers-reduced-motion i CSS

Det robustaste sättet är att behandla rörelse som en förbättring. Skriv den stilla designen först och lägg sedan till rörelse i en mediafråga som bara gäller när besökaren inte har någon preferens. Om frågan inte stöds eller inställningen är på blir sidan helt enkelt stilla. MDN:s sida om prefers-reduced-motion dokumenterar funktionen.

css
/* Still by default */
.hero-bg {
  background: linear-gradient(135deg, #1e1b4b, #6d28d9 55%, #db2777);
  background-size: 100% 100%;
}
.card {
  opacity: 0;
  transition: opacity 200ms ease-out; /* a fade is fine for everyone */
}
.card.is-visible {
  opacity: 1;
}

/* Movement only for visitors with no preference */
@media (prefers-reduced-motion: no-preference) {
  .hero-bg {
    background-size: 200% 200%;
    animation: drift 20s linear infinite alternate;
  }
  .card {
    transform: translateY(24px);
    transition: opacity 200ms ease-out, transform 300ms cubic-bezier(0, 0, 0.2, 1);
  }
  .card.is-visible {
    transform: none;
  }
}

@keyframes drift {
  to { background-position: 100% 100%; }
}
Rörelse som förbättring. Med minskad rörelse på tonar korten fortfarande in, men ingenting färdas och bakgrunden ligger still.

Minskad rörelse i JavaScript, video och canvas

Rörelse som styrs av skript, som rullningseffekter, canvas- eller WebGL-bakgrunder och video, behöver en kontroll i JavaScript. Läs inställningen med matchMedia och lyssna efter ändringar, eftersom folk kan slå om den medan din sida är öppen.

js
const query = matchMedia('(prefers-reduced-motion: reduce)')
const video = document.querySelector('.hero-video')

function apply() {
  if (query.matches) {
    video?.pause()            // the poster image stays
    stopBackgroundLoop()      // your canvas or WebGL loop: draw one frame, then stop
  } else {
    video?.play().catch(() => {})
    startBackgroundLoop()
  }
}

query.addEventListener('change', apply)
apply()
En kontroll för allt som är skriptat. Behåll affischbilden eller en enda renderad bild, så att sidan fortfarande ser färdig ut.

Bakgrundsvideor och levande gradienter är de vanligaste syndarna eftersom de spelas av sig själva. Videobakgrunder på webbplatser och shader-gradienter visar båda var kontrollen hör hemma.

Vad WCAG säger om rörelse

Tre framgångskriterier i Web Content Accessibility Guidelines handlar om rörelse. Stöd för minskad rörelse är det praktiska sättet att uppfylla det första, en pausknapp tar hand om det andra.

KriteriumNivåKort sagt
2.3.3 Animation från interaktionerAAARörelse som utlöses av interaktion kan stängas av, om den inte är nödvändig
2.2.2 Pausa, stoppa, döljARörligt innehåll som startar av sig självt och varar längre än fem sekunder kan pausas eller döljas
2.3.1 Tre blixtar eller under tröskelvärdetAIngenting blinkar mer än tre gånger på en sekund
W3C:s vägledning om Animation from Interactions förklarar det första i detalj, med exempel.

Stilla versioner som ändå ser bra ut

Den stilla versionen ska inte kännas trasig. För animerade bakgrunder, välj den bild som ser bäst ut för sig själv, inte den bild som råkar komma först. För intoningar, se till att den slutliga layouten är komplett utan dem. För loopar gjorda av ett varumärkesmaterial håller en väl vald stillbild av samma material identiteten intakt. Principer för rörelsedesign föreslår att du testar varje animation med en enda pausad bild av just det skälet.

Gradiently följer samma regel: levande Marks i appen ligger stilla när din enhet ber om minskad rörelse, och varje design du exporterar som loop kan också exporteras som en PNG-stillbild av samma Mark, för platser där rörelse inte är välkommen. För sociala inlägg, där du inte kan känna av inställningen, är det vänligaste en långsam, mjuk rörelse. Se animerad gradientbakgrund.

  1. 1

    Slå på inställningen

    Aktivera minskad rörelse i ditt operativsystem och ladda om sajten.

  2. 2

    Kontrollera allt som rör sig

    Hero-ytor, karuseller, rullningseffekter, videor, canvas och laddningslägen ska alla vara lugna.

  3. 3

    Slå om den medan sidan är öppen

    Dina skript ska följa ändringen utan omladdning.

  4. 4

    Emulera den i utvecklarverktygen

    Chrome och Firefox kan emulera mediafunktionen, vilket går snabbare medan du arbetar.

  5. 5

    Titta på den stilla designen

    Se till att den minskade versionen ser avsedd och komplett ut, inte som om något misslyckats med att laddas.

Vanliga frågor

Vad är prefers-reduced-motion?

Det är en CSS-mediafunktion som talar om för en webbplats om besökaren har bett sin enhet minimera icke nödvändig rörelse. Värdena är reduce och no-preference.

Betyder minskad rörelse att all animation ska bort?

Nej. Ta bort eller ersätt stora rörelser, parallax, zoomar och automatiskt spelande loopar, men mjuka toningar och liten återkoppling går oftast bra.

Hur testar jag prefers-reduced-motion?

Slå på inställningen för minskad rörelse i ditt operativsystem och ladda om sidan, eller emulera mediafunktionen i utvecklarverktygen i Chrome eller Firefox.

Kräver WCAG stöd för minskad rörelse?

WCAG 2.3.3 Animation från interaktioner, ett kriterium på nivå AAA, kräver att rörelse som utlöses av interaktion kan stängas av, och stöd för minskad rörelse är det vanliga sättet att uppfylla det. Kriterier på nivå A gäller också att pausa automatisk rörelse och begränsa blixtrande.

Varför slår vissa på minskad rörelse?

Vissa har vestibulära besvär, där rörelse på skärmen kan ge yrsel eller illamående. Andra har migrän, tycker att rörelse distraherar eller föredrar helt enkelt en lugnare skärm.

Dela den här guiden

Skriven av GradientlyVerifierat Gradiently-konto

Teamet bakom Gradiently, ett designverktyg byggt kring Marks: levande gradienter som får allt du gör att kännas som ditt.

Se vår profil