Over @keyframes

De term "keyframe" is afkomstig uit de wereld van de (teken-)film. Het definieert de begin- en eindpunten van een vloeiende overgang. Een aantal keyframes achter elkaar beschrijft de beweging die de toeschouwer te zien krijgt.

Keyframes zijn punten op een tijdlijn. Er is een aantal beeldjes (frames) tussen de tijdstippen. Die tussenliggende beeldjes (de "inbetweens") worden door de browser berekend en tussen de keyframes gezet.
De browser verdeelt de beweging als een Bézier-kromme over de inbetweens. Je kunt opgeven hoe de Bézierkromme er uit moet zien. Als je niets opgeeft wordt "ease" gebruikt (zie verder).

CSS heeft een voorziening om keyframes op te geven: @keyframes. Daarmee leg je punten op de tijdlijn vast zodat de browser de animatie kan renderen. De syntax is:

@keyframes ident {
    plaats eerste keyframe {
CSS-regels die dit keyframe bepalen }
    plaats tweede keyframe {
CSS-regels die dit keyframe bepalen }
    .
    .
    .
    plaats laatste keyframe {
CSS-regels die dit keyframe bepalen }
}

De plaats van een keyframe geef je op als percentage van de looptijd van de animatie. Geldige waarden zijn:
• 0% tot 100%. Als je bijvoorbeeld 25% opgeeft in een animatie van 8 sec., staat het keyframe dus op 2 sec.
from. Dit is hetzelfde als 0%.
to. Dit is hetzelfde als 100%.

Je refereert aan @keyframes vanuit een "gewone" CSS-regel met:

animation-name: ident;

De koppeling is de naam ident.

Via de CSS-regel animate kun je nog veel meer invloed op de animatie uitoefenen. Zie dit Voorbeeld:
Hier rechts staat een rechthoek. Die is oorspronkelijk zeegroen van kleur. Een paar seconden na het laden van deze pagina begint deze te verkleuren. Hij wordt langzaamaan lichtrood en springt dan weer terug op groen.
Dat doe je met deze code:
Laad zonodig de pagina opnieuw om het effect te zien.

<style>
#voorbeeld1 { width:40px; height:60px; float:right; margin-left:20px;
  border:1px solid black;
  background-color: teal;
  animation-name: vb1;
  animation-delay: 5s;
  animation-duration: 10s;
}
@keyframes vb1 {
  from {background-color:teal;}
  to {background-color:#fcc;}
}
</style>

• Na afloop van de animatie springt de rechthoek weer terug naar de oorspronkelijke situatie, tenzij je animation-fill-mode:forwards opgeeft.

• In dit voorbeeld is gebruik gemaakt van from en to. Daarmee zet je een keyframe aan het begin van de tijdlijn en een aan het eind van de tijdlijn (dat is eerder in dit artikel al uitgewerkt).
Een overzicht van de mogelijkheden van animation vind je in onderstaande lijst.

Naam Betekenis
animation-delay 
Specificeert een wachttijd voordat de animatie wordt gestart, in seconde [s] of milliseconde [ms]. Default: 0.
Hier: 5s.
animation-direction 
Specificeert de richting (op te tijdlijn) waarin de animatie wordt afgespeeld. Default: normal. Andere mogelijkheden zijn:
reverse De animatie wordt in omgekeerde richting afgespeeld.
alternate De animatie wordt eerst 'normal' afgespeeld, daarna 'reverse', daarna weer 'normal', dan weer 'reverse', enzovoort.
alternate-reverse De animatie wordt eerst 'reverse' afgespeeld, daarna 'normal', daarna weer 'reverse', dan weer 'normal', enzovoort.
Hier: default.
animation-duration 
Specificeert die tijd die nodig is voor één cyclus van de animatie, in seconde [s] of milliseconde [ms]. Default: 0.
Hier: 10s.
Als je animation-duration niet opgeeft heeft die de lengte 0. Er is dan geen animatie!
animation-fill-mode 
Specificeert de eigenschappen aan het einde van de animatie. Default: none. Andere mogelijkheden zijn:
forwards Als de animatie eindigt wordt de style op het element toegepast die geldt op het moment dat de animatie klaar is.
backwards Als de animatie eindigt wordt de style op het element toegepast die geldt op het moment dat de animatie begint.
both Dit is een combinatie van forwards en backwards.
Hier: default.
animation-iteration-count 
Specificeert het aantal keren dat een animatie wordt afgespeeld. Default: 1. Je kunt hier ook infinite opgeven. Dan wordt de animatie oneindig herhaald.
Hier: default.
animation-name 
Specificeert de naam van een @keyframes blok. Default: none. Dat betekent dat de animatie niet wordt uitgevoerd.
Het default lijkt vreemd, maar is dat niet. Je kunt verschillende @keyframes-blokken maken en dan met JavaScript er een of meerdere starten.
Hier: vb1.
animation-play-state 
Hiermee kun je (via bijv. :hover of met JavaScript) onderzoeken of een animatie loopt of gepauzeerd is. Default: running.
Je kunt hiermee (op dezelfde manier) een lopende animatie onderbreken (door paused op te geven) of juist verder laten gaan (door running in te stellen). Hier: default.
animation-timing-function 
Specificeert het snelheidsverloop van de animatie. Default: ease. Andere mogelijkheden zijn:
linear. De snelheid is constant over de looptijd van de animatie.
ease. De animatie start langzaam, gaat daarna snel en eindigt langzaam.
ease-in. De animatie start langzaam, gaat daarna snel en eindigt snel.
ease-out. De animatie start snel en eindigt langzaam.
ease-in-out. De animatie start langzaam, gaat daarna snel en eindigt langzaam.
step-start. Gelijkwaardig aan steps(1,start).
step-end. Gelijkwaardig aan steps(1,end).
steps(x,key). Specificeert het aantal stappen x in de animatie. De parameter x is een geheel getal ≥ 0. De parameter key is start of end. Het specificeert of de eigenschappen worden aangepast aan het begin of het einde van elke stap. Deze parameter is optioneel. Als key wordt weggelaten wordt end gebruikt.
cubic-bezier(n,n,n,n). Hiermee stel je een Bézierkrommme van de derde orde in. De animatie wordt uitgevoerd volgens die kromme.
Je geeft vier parameters op. Dit zijn elk getallen 0 ≤ n ≤ 1. Er is geen default voor n. Als je dit niet opgeeft wordt een van de keywords hierboven gebruikt; als je die ook niet opgeeft wordt ease gebruikt.
N.B.: De keywords met ease er in zijn voorgedefinieerde Bézier­krommmen.
Hier: default.

Er bestaat ook een verkorte versie van animation, waarin je de achtereenvolgende deel-eigenschappen (in deze volgorde) opsomt:
animation: name duration timing-function delay iteration-count direction fill-mode play-state;

Je kunt keyframes maken op elk gewenste plek op de tijdlijn van de animatie.

Recente releases van alle grote browsers ondersteunen keyframes. Sommige oudere browsers hebben nog de Vendor-prefix -webkit- nodig.

Opmerking:
 
De CSS-opdracht animation is wat anders dan transition, hoewel ze veel op elkaar lijken. Een item over transitions vind je HIER.

 
terug

html-446; Laatste wijziging: 1 mei 2020