CSS
animaties
Zoeken…
Syntaxis
-
transition: <property> <duration> <timing-function> <delay>;
-
@keyframes <identifier>
-
[ [ from | to | <percentage> ] [, from | to | <percentage> ]* block ]*
parameters
Overgang | |
---|---|
Parameter | Details |
eigendom | Ofwel de CSS-eigenschap om over te zetten, of all , die alle voor transitie geschikte eigenschappen specificeert. |
looptijd | Overgangstijd, in seconden of milliseconden. |
timing-functies | Hiermee geeft u een functie op om te definiëren hoe tussenliggende waarden voor eigenschappen worden berekend. Gemeenschappelijke waarden zijn ease , linear en step-end . Bekijk het spiekbriefje van de versoepelingsfunctie voor meer informatie. |
vertraging | Hoeveelheid tijd, in seconden of milliseconden, om te wachten voordat de animatie wordt afgespeeld. |
@keyframes | |
[van | tot | <percentage> ] | U kunt een ingestelde tijd opgeven met een procentuele waarde of twee procentuele waarden, bijvoorbeeld 10%, 20% , voor een periode waarin de ingestelde attributen van het hoofdframe zijn ingesteld. |
block | Een willekeurig aantal CSS-kenmerken voor het hoofdframe. |
Animaties met de overgangseigenschap
Handig voor eenvoudige animaties, maakt de CSS- transition
mogelijk om op cijfers gebaseerde CSS-eigenschappen tussen staten te animeren.
Voorbeeld
.Example{
height: 100px;
background: #fff;
}
.Example:hover{
height: 120px;
background: #ff0000;
}
Als u met de klasse .Example
boven een element zweeft, wordt de hoogte van het element standaard onmiddellijk naar 120px
en de achtergrondkleur rood ( #ff0000
).
Door de transition
toe te voegen, kunnen we deze wijzigingen in de loop van de tijd veroorzaken:
.Example{
...
transition: all 400ms ease;
}
De waarde all
past de overgang toe op alle compatibele (op cijfers gebaseerde) eigenschappen. Elke compatibele eigenschapsnaam (zoals height
of top
) kan worden vervangen door dit trefwoord.
400ms
geeft aan hoe lang de overgang duurt. In dit geval duurt het 400 milliseconden om de hoogteverandering van het element te voltooien.
Ten slotte is de waarde ease
de animatiefunctie, die bepaalt hoe de animatie wordt afgespeeld. ease
betekent langzaam starten, versnellen en vervolgens weer langzaam eindigen. Andere waarden zijn linear
, ease-out
en ease-in
.
Cross-Browser Compatibiliteit
De transition
wordt over het algemeen goed ondersteund in alle belangrijke browsers, behalve IE 9. Voor eerdere versies van Firefox en op Webkit gebaseerde browsers, gebruikt u leveranciersvoorvoegsels zoals deze:
.Example{
transition: all 400ms ease;
-moz-transition: all 400ms ease;
-webkit-transition: all 400ms ease;
}
Opmerking: de eigenschap transition
kan wijzigingen tussen twee numerieke waarden animeren, ongeacht de eenheid. Ook kan de overgang tussen de eenheden, zoals 100px
naar 50vh
. Het kan echter niet overschakelen tussen een getal en een standaard of automatische waarde, zoals de overgang van de hoogte van een element van 100 100px
naar auto
.
Animatieprestaties verbeteren met behulp van het kenmerk `will-change`
Bij het maken van animaties en andere GPU-zware acties is het belangrijk om het will-change
attribuut te begrijpen.
Beide CSS-hoofdframes en de transition
gebruiken GPU-versnelling. De prestaties worden verbeterd door berekeningen te verplaatsen naar de GPU van het apparaat. Dit wordt gedaan door verflagen (delen van de pagina die afzonderlijk worden weergegeven) te maken die naar de GPU worden overgebracht om te worden berekend. De eigenschap will-change
vertelt de browser wat zal animeren, waardoor de browser kleinere verfgebieden kan creëren, waardoor de prestaties worden verbeterd.
De eigenschap will-change
accepteert een door komma's gescheiden lijst met te animeren eigenschappen. Als u bijvoorbeeld van plan bent een object te transformeren en de dekking ervan te wijzigen, geeft u het volgende op:
.Example{
...
will-change: transform, opacity;
}
Opmerking: gebruik will-change
spaarzaam. Het instellen van will-change
voor elk element op een pagina kan prestatieproblemen veroorzaken, omdat de browser kan proberen verflagen voor elk element te maken, waardoor de hoeveelheid verwerking door de GPU aanzienlijk wordt verhoogd.
Animaties met hoofdframes
Voor multi-stage CSS-animaties kunt u CSS @keyframes
. Met keyframes kunt u meerdere animatiepunten, een keyframe genaamd, definiëren om complexere animaties te definiëren.
Basis voorbeeld
In dit voorbeeld maken we een eenvoudige achtergrondanimatie die tussen alle kleuren wisselt.
@keyframes rainbow-background {
0% { background-color: #ff0000; }
8.333% { background-color: #ff8000; }
16.667% { background-color: #ffff00; }
25.000% { background-color: #80ff00; }
33.333% { background-color: #00ff00; }
41.667% { background-color: #00ff80; }
50.000% { background-color: #00ffff; }
58.333% { background-color: #0080ff; }
66.667% { background-color: #0000ff; }
75.000% { background-color: #8000ff; }
83.333% { background-color: #ff00ff; }
91.667% { background-color: #ff0080; }
100.00% { background-color: #ff0000; }
}
.RainbowBackground {
animation: rainbow-background 5s infinite;
}
Er zijn een paar verschillende dingen om op te merken. Eerst de daadwerkelijke syntaxis van @keyframes
.
@keyframes rainbow-background{
Dit zet de naam van de animatie op rainbow-background
.
0% { background-color: #ff0000; }
Dit is de definitie voor een hoofdframe in de animatie. Het eerste deel, de 0%
in het geval, definieert waar het hoofdframe zich bevindt tijdens de animatie. De 0%
houdt in dat het 0% is van de totale animatietijd vanaf het begin.
De animatie wordt automatisch overgeschakeld tussen hoofdframes. Dus, door de volgende achtergrondkleur in te stellen op 8.333%
, zal de animatie soepel 8.333% van de tijd nodig hebben om over te schakelen tussen die hoofdframes.
.RainbowBackground {
animation: rainbow-background 5s infinite;
}
Deze code koppelt onze animatie aan alle elementen die de klasse .RainbowBackground
.
De eigenlijke animatie-eigenschap heeft de volgende argumenten.
- animatienaam : de naam van onze animatie. In dit geval
rainbow-background
- animatieduur : hoe lang de animatie duurt, in dit geval 5 seconden.
- animatie-iteratie-telling (optioneel) : het aantal keren dat de animatie wordt herhaald. In dit geval gaat de animatie voor onbepaalde tijd door. Standaard wordt de animatie eenmaal afgespeeld.
- animatievertraging (optioneel) : geeft aan hoelang moet worden gewacht voordat de animatie wordt gestart. Het is standaard 0 seconden en kan negatieve waarden aannemen. Bijvoorbeeld,
-2s
start de animatie 2 seconden in zijn lus. - animatie-timing-functie (optioneel) : specificeert de snelheidscurve van de animatie. De standaardinstelling is
ease
, waarbij de animatie langzaam begint, sneller wordt en langzaam eindigt.
In dit specifieke voorbeeld geven zowel de 0%
als 100%
keyframes { background-color: #ff0000; }
. Waar twee of meer keyframes een status delen, kan men deze in een enkele instructie specificeren. In dit geval kunnen de twee 0%
en 100%
lijnen worden vervangen door deze enkele lijn:
0%, 100% { background-color: #ff0000; }
Cross-browser compatibiliteit
Voor oudere, op WebKit gebaseerde browsers, moet u het leveranciersvoorvoegsel op zowel de @keyframes
aangifte als de eigenschap animation
, als volgt:
@-webkit-keyframes{}
-webkit-animation: ...
Syntaxis voorbeelden
Ons eerste syntaxisvoorbeeld toont de eigenschap stenografie van animatie met behulp van alle beschikbare eigenschappen / parameters:
animation: 3s ease-in 1s 2 reverse both paused slidein;
/* duration | timing-function | delay | iteration-count | direction | fill-mode | play-state | name */
Ons tweede voorbeeld is iets eenvoudiger en laat zien dat sommige eigenschappen kunnen worden weggelaten:
animation: 3s linear 1s slidein;
/* duration | timing-function | delay | name */
Ons derde voorbeeld toont de meest minimale aangifte. Merk op dat de animatienaam en de animatieduur moeten worden aangegeven:
animation: 3s slidein;
/* duration | name */
Het is ook vermeldenswaard dat bij het gebruik van de animatiekorte de volgorde van de eigenschappen een verschil maakt. Het is duidelijk dat de browser uw duur kan verwarren met uw vertraging.
Als beknoptheid niet jouw ding is, kun je ook de steno-eigenschap overslaan en elke eigenschap afzonderlijk uitschrijven:
animation-duration: 3s;
animation-timing-function: ease-in;
animation-delay: 1s;
animation-iteration-count: 2;
animation-direction: reverse;
animation-fill-mode: both;
animation-play-state: paused;
animation-name: slidein;