@keyframes
@keyframes <Name> { from { … } <Prozent> { … } to { … } }
Ein benannter Ablauf einer Animation: welche Werte der Eigenschaften am Anfang, am Ende und bei beliebigen Zwischenschritten gelten. Von selbst startet sie nichts – sie wird von der Eigenschaft animation mit diesem Namen verwendet.
Werte
- from und to – Anfang und Ende, dasselbe wie
0%und100%. - Prozente – Zwischenschritte im Bereich 0 bis 100 %. Positionen mit denselben Werten lassen sich mit einem Komma zusammenfassen:
0%, 100% { … }. - animation-timing-function in einem Keyframe – die Zeitfunktion für den Abschnitt von diesem Keyframe zum nächsten.
Beispiele
Hüpfen – drei Keyframes, Anfang und Ende mit einem Komma zusammengefasst:
.ball {
animation: bounce 0.8s ease-in-out infinite;
}
@keyframes bounce {
0%, 100% { translate: 0 0; }
50% { translate: 0 -20px; }
}
Schon ein einziger Keyframe genügt. Das fehlende to ergänzt der Browser aus den gewöhnlichen Stilen des Elements, die Animation endet also genau dort, wo das Element normalerweise ist – samt seiner Deckkraft von 0,9:
.message {
opacity: 0.9;
animation: slide-in 0.3s ease-out;
}
@keyframes slide-in {
from {
opacity: 0;
translate: 0 -100%;
}
}
Eine Zeitfunktion in einzelnen Keyframes – der Fall beschleunigt, das Steigen nach dem Aufprall bremst ab:
.ball {
animation: jump 1s both;
}
@keyframes jump {
0% {
translate: 0 -60px;
animation-timing-function: ease-in;
}
60% {
translate: 0 0;
animation-timing-function: ease-out;
}
80% {
translate: 0 -15px;
animation-timing-function: ease-in;
}
100% { translate: 0 0; }
}
Worauf Sie achten sollten
- Deklarationen mit
!importantwerden in@keyframesignoriert – der Browser verwirft sie, die übrigen Deklarationen des Keyframes gelten weiter. - Zwei
@keyframes-Regeln mit demselben Namen werden nicht zusammengeführt: Es gilt die ganze letzte. Das lässt sich nutzen – eine später geschriebene Regel in@mediaersetzt die gleichnamige Animation, etwa fürprefers-reduced-motion. - Eigenschaften, die sich nicht weich ändern können (zum Beispiel
justify-content), wechseln in einer Animation in einem Schritt in der Mitte des Abschnitts. - Beim Namen zählt die Groß- und Kleinschreibung und er darf nicht
nonesein. - Ohne Keyframe
fromodertowerden die fehlenden Werte aus den gewöhnlichen Stilen des Elements genommen – die Animation setzt so weich an dem Zustand an, in dem das Element gerade ist.
Browserunterstützung
Baseline – weithin verfügbar: in allen gängigen Browsern seit September 2015, gilt als weithin verfügbar seit März 2018. Ab Version: Chrome 43, Firefox 16, Safari 9. Stand: Oktober 2026 (MDN browser-compat-data).
Siehe auch:
animation
cubic-bezier() und steps()
transition
prefers-reduced-motion