CSS Animation – @keyframes
Mit CSS-Animationen lassen sich Elemente über einen bestimmten Zeitraum hinweg verändern. Der Ablauf kann aus mehreren Zuständen und Wiederholungen bestehen.
Eine Animation startet, sobald sie einem Element zugewiesen wird. Das kann direkt beim Laden der Seite geschehen oder später, zum Beispiel durch eine Klasse, eine Pseudoklasse oder JavaScript. Nach dem letzten Keyframe kehrt das Element standardmässig in seinen ursprünglichen Zustand zurück.
Aufbau einer CSS-Animation
Eine CSS-Animation besteht aus zwei Teilen: @keyframes beschreibt, was passiert. Die
Animation-Eigenschaften bestimmen, wie und wann es passiert.
@keyframesDefiniert die Zustände und Veränderungen der Animation- Animation-EigenschaftenSteuern Name, Dauer, Geschwindigkeit, Verzögerung und Wiederholungen
Animation-Eigenschaften
animation-nameName der verwendeten@keyframes-Regel.animation-durationDauer eines Durchlaufs (Zeitangabe).animation-timing-functionZeitlicher Verlauf (Keyword oder cubic-bezier()).animation-delayStartverzögerung (Zeitangabe).animation-iteration-countWiederholungen (Zahl oderinfinite).animation-directionAbspielrichtung (Keyword).animation-fill-modeVerhalten vor/nach Ende (Keyword).
1. animation-name – Keyframes zuweisen
animation-name verbindet das Element mit einer @keyframes-Regel. Der
frei wählbare Name muss an beiden Stellen übereinstimmen.
animation-name: fadeIn;
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
2. animation-duration – Dauer
animation-duration legt fest, wie lange ein vollständiger Durchlauf dauert. Der
Standardwert ist 0s; ohne eine Dauer bleibt die Animation deshalb unsichtbar.
animation-duration: 500ms;
animation-duration: 2s;
3. animation-timing-function – Geschwindigkeit
animation-timing-function bestimmt, wie sich die Geschwindigkeit während der
Animation verändert.
linearKonstante GeschwindigkeiteaseLangsamer Start, schneller Mittelteil und langsames Endeease-inLangsamer Startease-outLangsames Endeease-in-outLangsamer Start und langsames Endecubic-bezier()Individuell definierter Geschwindigkeitsverlauf
animation-timing-function: ease;
4. animation-delay – Verzögerung
animation-delay bestimmt, wie lange vor dem Start der Animation gewartet wird. Der
Standardwert ist 0s.
animation-delay: 1s; /* startet nach einer Sekunde */
Negativer Wert
Ein negativer Wert überspringt den Anfang der Animation. Im folgenden Beispiel startet sie sofort bei 25% ihres Ablaufs, als wäre bereits eine Sekunde vergangen.
animation-duration: 4s;
animation-delay: -1s;
5. animation-iteration-count – Wiederholungen
animation-iteration-count bestimmt, wie oft eine Animation abgespielt wird. Der
Standardwert ist 1.
3Spielt die Animation dreimal abinfiniteWiederholt die Animation ohne Ende
animation-iteration-count: 3;
animation-iteration-count: infinite;
6. animation-direction – Richtung
animation-direction bestimmt, in welcher Richtung die Keyframes abgespielt werden.
Der Standardwert ist normal.
normalSpielt die Animation von Anfang bis Ende abreverseSpielt die Animation vom Ende zum Anfang abalternateWechselt bei jeder Wiederholung die Richtungalternate-reverseWechselt ebenfalls die Richtung, beginnt aber rückwärts
animation-direction: alternate;
7. animation-fill-mode – Zustand vor und nach der Animation
animation-fill-mode bestimmt, welche Styles ausserhalb der eigentlichen
Animationsdauer gelten – je nach Wert vor dem Start, nach dem Ende oder in beiden Phasen. Die
Eigenschaft verändert nicht den Ablauf oder die Richtung der Animation. Der Standardwert ist
none.
animation-fill-mode ist nur nötig, wenn der erste oder letzte Keyframe auch vor
beziehungsweise nach der eigentlichen Animation gelten soll.
noneDie Keyframe-Styles gelten nur während der AnimationforwardsDer Zustand am Ende der Animation bleibt erhaltenbackwardsDer Startzustand gilt bereits während eines DelaysbothKombiniertforwardsundbackwards
animation-fill-mode: none;
animation-fill-mode: forwards;
animation-fill-mode: backwards;
animation-fill-mode: both;
backwards spielt die Animation nicht rückwärts ab, sondern übernimmt den ersten
Keyframe bereits während des Delays. forwards behält nach dem Ende den letzten
Keyframe bei, both kombiniert beides.
animation-fill-mode im Vergleich ansehen.
Kurzschreibweise
Mit animation lassen sich mehrere Animation-Eigenschaften in einer Zeile
zusammenfassen.
Die meisten Werte können unterschiedlich angeordnet werden. Bei zwei Zeitangaben ist die erste jedoch immer die Dauer und die zweite die Verzögerung. Eine einheitliche Reihenfolge macht die Kurzschreibweise besser lesbar.
animation: slideIn 2s ease-in-out 0.5s infinite alternate forwards;
slideInName der Keyframes2sDauerease-in-outGeschwindigkeitsverlauf0.5sVerzögerunginfiniteWiederholungenalternateRichtungforwardsZustand nach dem Ende
Bei zwei Zeitangaben ist die erste immer die Dauer und die zweite die Verzögerung.
@keyframes-Syntax
Eine @keyframes-Regel definiert die Zustände einer Animation. Der Name hinter
@keyframes verbindet sie über animation-name mit einem Element.
Start- und Endzustand
from entspricht 0%, to entspricht 100%. Die
Zustände dazwischen berechnet der Browser.
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
Zwischenstufen
Mit Prozentwerten lassen sich zusätzliche Zustände an beliebigen Stellen des Ablaufs definieren.
@keyframes bounce {
0% {
transform: translateY(0);
}
50% {
transform: translateY(-40px);
}
100% {
transform: translateY(0);
}
}
Animation auf ein Element anwenden
Eine @keyframes-Regel allein erzeugt noch keine Animation. Sie muss über ihren Namen
einem Element zugewiesen werden und eine Dauer erhalten.
.box {
animation-name: fadeIn;
animation-duration: 2s;
}
Animation Beispiele
Fade In
Das Element wird über die Eigenschaft opacity langsam eingeblendet. Diese
Art von Animation ist sehr performant und wird häufig für UI-Elemente verwendet.
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.anim-fade {
animation-name: fadeIn;
animation-duration: 5s;
}
Slide In
Das Element bewegt sich aus einer Richtung ins Bild. Die Bewegung erfolgt über
transform: translate(), da diese Eigenschaft das Layout nicht beeinflusst.
@keyframes slideIn {
from {
transform: translateX(-50px);
}
to {
transform: translateX(0);
}
}
.anim-slide {
animation-name: slideIn;
animation-duration: 3s;
}
Rotate
Das Element wird kontinuierlich um die eigene Achse gedreht. Solche Animationen werden
häufig bei Icons oder Ladeindikatoren eingesetzt.
@keyframes rotateBox {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.anim-rotate {
animation-name: rotateBox;
animation-duration: 2s;
animation-iteration-count: infinite;
animation-timing-function: linear;
}
Bounce
Durch mehrere Keyframes entsteht eine federnde Bewegung. Diese Art von Animation
vermittelt Dynamik und Aufmerksamkeit.
@keyframes bounce {
0% {
transform: translateY(0);
}
50% {
transform: translateY(-40px);
}
100% {
transform: translateY(0);
}
}
.anim-bounce {
animation-name: bounce;
animation-duration: 1s;
animation-iteration-count: infinite;
}
8. Animierter Farbverlauf
Der Farbverlauf ist grösser als der sichtbare Bereich. Die Animation verschiebt seine Position und erzeugt dadurch einen fliessenden Farbwechsel.
1. HTML
<div class="animated-gradient"></div>
2. Farbverlauf gestalten
.animated-gradient {
min-height: 300px;
background: linear-gradient(
135deg,
#ff4d00,
#ff006e,
#5f0fdd,
#00a6fb,
#ffd60a
);
background-size: 300% 300%;
}
3. Bewegung definieren
@keyframes color-shift {
from {
background-position: 0% 50%;
}
to {
background-position: 100% 50%;
}
}
4. Animation zuweisen
.animated-gradient {
animation: color-shift 8s ease-in-out infinite alternate;
}
9. Stretch Font
Beim Hover verändern sich gleichzeitig Breite und Gewicht der Schrift. Die Animation startet erst, wenn sich der Mauszeiger über der Schrift befindet.
Mit einem Variable Font geschieht diese Veränderung fliessend. Bei einer statischen Schrift stehen nur einzelne Schriftschnitte zur Verfügung – deshalb kann die Veränderung springen oder unruhig wirken.
1. Variable Font laden
<link href="https://fonts.googleapis.com/css2?family=Anybody:wdth,wght@50..150,100..900&display=swap" rel="stylesheet">
2. HTML
<div class="font-stage">
<div class="dynamic-type">STRETCH</div>
</div>
3. Schrift gestalten
.font-stage {
display: grid;
min-height: 300px;
place-items: center;
overflow: hidden;
background: indigo;
}
.dynamic-type {
color: cyan;
font-family: "Anybody", sans-serif;
font-size: clamp(4rem, 13vw, 10rem);
font-weight: 200;
font-stretch: 60%;
line-height: 0.8;
text-align: center;
white-space: nowrap;
cursor: pointer;
}
4. Veränderung definieren
@keyframes type-shift {
0%,
100% {
color: cyan;
font-weight: 200;
font-stretch: 60%;
}
50% {
color: gold;
font-weight: 900;
font-stretch: 150%;
}
}
5. Animation bei Hover starten
.dynamic-type:hover {
animation: type-shift 3s ease-in-out 3;
}
font-weight steuert das Schriftgewicht, font-stretch die Breite der
Buchstaben. Der verwendete Variable Font muss die angegebenen Werte unterstützen. Sobald der
Mauszeiger das Element verlässt, endet die Animation und die Schrift kehrt in ihren
Ausgangszustand zurück.
Anybody bei Google Fonts ansehen.
Performance
Für flüssige Animationen eignen sich besonders transform und opacity.
Diese Eigenschaften verändern den Dokumentenfluss nicht und können vom Browser meist effizient
dargestellt werden.
transformVerschiebt, dreht oder skaliert Elemente rein visuellopacityVerändert die Sichtbarkeit eines Elements
Animationen von Layout-Eigenschaften wie top, left, width
oder height können aufwendiger sein, weil der Browser das Layout neu berechnen
muss.
Die Puls-Animation und weitere experimentelle Beispiele findest du in der Intensivstation CodePen Collection.
Kurz gesagt
@keyframesdefiniert die Zustände und Veränderungen einer Animation.animation-nameverbindet ein Element mit der passenden Keyframes-Regel.animation-durationbestimmt die Dauer eines Durchlaufs.- Wiederholungen, Richtung und Zustand nach dem Ende lassen sich einzeln steuern.
transformundopacityeignen sich besonders für flüssige Animationen.
Verwandte Themen
- Transform – Elemente verschieben, drehen, skalieren oder neigen.
- Transition – Zustandsänderungen fliessend darstellen.
- Animation Timeline – Animationen durch Scrollposition oder Sichtbarkeit steuern.