Bézier-krommen gebruiken in CSS-animaties

In dit verhaal wordt wat gezegd over Bézier-krommen, zonder in te gaan op de wiskunde die er achter zit. Die is lastig om te begrijpen. Dat hoeft echter geen belemmering te zijn om het te gebruiken. Als je weet hoe het werkt kun je er gebruik van maken.

In CSS kun je elementen animeren (laten bewegen) met behulp van transitions. Met de transition-timing function stel je een derdegraads Bézierkromme in. Die wordt bepaald door vier punten: P0 t.m. P3.

Bij de implementatie van Bézierkrommen in CSS gelden de volgende regels:

In de praktijk hoef je alleen de punten P1 en P2 op te geven. De punten P0 en P3 liggen immers al vast!

Met de CSS-code: cubic-bezier(x1, y1, x2, y2) maak je een Bézier-curve.

Het vergt aardig wat oefening om op deze manier een mooi verloop in te stellen. Gelukkig voorziet CSS in vijf voorgedefinieerde waarden, waarmee je prima resultaten haalt:

  1. linear. De snelheid is constant gedurende de overgang.
      equivalent aan cubic-bezier(0,0,1,1)
  2. ease. De overgang start en eindigt langzaam, maar verloopt snel. Dit is de default instelling.
      equivalent aan cubic-bezier(0.25,0.1,0.25,1)
  3. ease-in. De overgang start langzaam en verloopt sneller.
      equivalent aan cubic-bezier(0.42,0,1,1)
  4. ease-out. De overgang start snel en eindigt langzamer.
      equivalent aan cubic-bezier(0,0,0.58,1)
  5. ease-in-out. Combinatie van ease-in en ease-out.
      equivalent aan cubic-bezier(0.42,0,0.58,1)

Een uitgewerkt voorbeeld van het gebruik van ease-in vind je in het item Lichtgevende schaduwen met CSS.

De afstand tussen de punten P0 en P1, respectievelijk P2 en P3 (zeg maar de lengte van de raaklijn) heeft invloed op de transition. Dat komt doordat de punten P1 en P2 de curve "met zich mee trekken". Zo geeft cubic-bezier(0,0.5,1,0.5) een andere kromme dan cubic-bezier(0,1,1,0).

Op de website cubic-bezier.com kun je het verschil zichtbaar maken door P1 en P2 te verslepen met de muis. Ook kun je daar het gedrag van je eigen instellingen vergelijken met de in CSS voorgedefinieerde Bézier-krommen.
probeer eens: probeer eens: (0,1,1,0), (1,0,0,1), (0,1,.6,.8) en (1,0,0.5,1).

Opmerking: Behalve met een Bézier (een continue beweging) kun je een transition ook laten verlopen in stapjes. De CSS-eigenschappen daarvoor zijn:

eigenschap Betekenis
steps(i, naam) 
Specificeert een stap-functie, met twee parameters. De eerste parameter i is het aantal stappen. Dit is een positief, geheel getal. De tweede parameter naam is een keyword: start of end. Hiermee geef je het moment op waarop de de teller wordt bijgewerkt: aan het begin of aan het einde van elke stap. naam is optioneel en mag dus worden weggelaten. In dat geval wordt end gebruikt.
step-start 
Dit is gelijk aan steps(1,start)
step-end 
Dit is gelijk aan steps(1,end)

De toepassing van stap-functies is anders als bij Bezier-functies. Bij stap-functies denk je bijvoorbeeld aan een klok, of een progress-bar. Op de site van designmodo.com vind je een paar leuke demo's.

Opmerking: in het HTML5-element <canvas> kun je ook ook Bézier-curven gebruiken. Die worden anders gedefinieerd dan in CSS. De beperkingen van de CSS-versie heb je daar niet.
 
Het item Over Bézier-krommen geeft meer info over Bézier-krommen in het algemeen.

 
terug

html-460; Laatste wijziging: 5 september 2021