CSS-Eigenschaft animation
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2015 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Die CSS-Kurzschreibweise animation wendet eine Animation zwischen Stilzuständen an. Sie ist eine Kurzschreibweise für animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state und animation-timeline.
Probieren Sie es aus
animation: 3s ease-in 1s infinite reverse both running slide-in;
animation: 3s linear 1s infinite running slide-in;
animation: 3s linear 1s infinite alternate slide-in;
animation: 0.5s linear 1s infinite alternate slide-in;
<section class="flex-column" id="default-example">
<div id="example-element"></div>
</section>
#example-element {
background-color: #1766aa;
margin: 20px;
border: 5px solid #333333;
width: 150px;
height: 150px;
border-radius: 50%;
}
@keyframes slide-in {
from {
margin-left: -20%;
}
to {
margin-left: 100%;
}
}
Zugehörige Eigenschaften
Diese Eigenschaft ist eine Kurzschreibweise für die folgenden CSS-Eigenschaften:
Untereigenschaften, die nur zurückgesetzt werden
Diese Eigenschaft setzt die folgenden CSS-Eigenschaften auf ihre Anfangswerte zurück:
Syntax
/* Duration | easing-function | delay |
iteration-count | direction | fill-mode | play-state | name */
animation: 3s ease-in 1s 2 reverse both paused slide-in;
/* Duration | easing-function | delay | name */
animation: 3s linear 1s slide-in;
/* Duration | name */
animation: 3s slide-in;
/* Multiple animations */
animation:
3s linear slide-in,
3s ease-out 5s slide-out;
Werte
Diese Eigenschaft wird als durch Kommas getrennte Liste von <animation>-Werten angegeben. Jeder Wert besteht aus einer durch Leerzeichen getrennten Liste der folgenden Werte:
<keyframes-name>odernone-
Der Name einer
@keyframes-At-Regel, die die auf ein Element anzuwendende Animation festlegt. Der Anfangswert füranimation-nameistnone. <animation-duration>-
Bestimmt, wie lange eine Animation für einen Durchlauf benötigt. Der Wert muss einer der für
animation-durationverfügbaren Werte sein. Der Anfangswert ist0s. <easing-function>-
Bestimmt den Verlauf der Animation. Der Wert muss einer der für
animation-timing-functionverfügbaren Werte sein. Der Anfangswert istease. <animation-delay>-
Bestimmt, wie lange nach dem Anwenden der Animation auf ein Element gewartet wird, bevor die Animation beginnt. Der Wert muss einer der für
animation-delayverfügbaren Werte sein. Der Anfangswert ist0s. <single-animation-direction>-
Die Richtung, in der die Animation abgespielt wird. Der Wert muss einer der für
animation-directionverfügbaren Werte sein. Der Anfangswert füranimation-directionistnormal. <single-animation-iteration-count>-
Die Anzahl der Durchläufe der Animation. Der Wert muss einer der für
animation-iteration-countverfügbaren Werte sein. Der Anfangswert füranimation-iteration-countist1. <single-animation-fill-mode>-
Bestimmt, wie Stile vor und nach der Ausführung der Animation auf deren Zielelement angewendet werden. Der Wert muss einer der für
animation-fill-modeverfügbaren Werte sein. Der Anfangswert füranimation-fill-modeistnone. <single-animation-play-state>-
Bestimmt, ob die Animation abgespielt wird. Der Wert muss einer der für
animation-play-stateverfügbaren Werte sein. Der Anfangswert füranimation-play-stateistrunning. <single-animation-timeline>-
Bestimmt die Timeline, die den Fortschritt der Animation steuert. Der Wert muss einer der für
animation-timelineverfügbaren Werte sein. Der Anfangswert istauto.
Beschreibung
Die Eigenschaft animation wird als eine oder mehrere einzelne Animationen angegeben, die durch Kommas getrennt sind. Jede animation in der durch Kommas getrennten Liste legt animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state und animation-timeline fest. Fehlt eine dieser Komponenten in einer animation-Deklaration, wird sie auf ihren Anfangswert gesetzt.
Hinweis:
Die Kurzschreibweise animation setzt die Eigenschaften animation-range-start, animation-range-end und animation-trigger auf ihre jeweiligen Anfangswerte normal, normal und none zurück. Diese Untereigenschaften können in der Kurzschreibweise animation nicht gesetzt werden; werden sie darin angegeben, ist die gesamte Deklaration ungültig. Da die animation-Deklaration jede dieser Eigenschaften auf ihren Anfangswert setzt, müssen sie entweder nach allen animation-Kurzschreibweisen oder mit höherer Spezifität deklariert werden.
animation-name
Die Komponente <animation-name> jeder Animation bezeichnet den Namen der Animation. Sie kann none, ein <custom-ident> oder ein <string> sein. Der Anfangswert von animation-name ist none. Wird in der Kurzschreibweise animation kein Wert für animation-name angegeben, wird daher auf keine der Eigenschaften eine Animation angewendet.
Die Reihenfolge der übrigen Werte innerhalb einer Animationsdefinition ist wichtig, um einen Wert für animation-name von anderen Werten zu unterscheiden. Kann ein Wert in der Kurzschreibweise animation als Wert für eine andere Animationseigenschaft als animation-name interpretiert werden, wird er zuerst dieser Eigenschaft und nicht animation-name zugewiesen. Daher empfiehlt es sich, bei Verwendung der Kurzschreibweise animation den Wert für animation-name als letzten Wert anzugeben. Das gilt auch, wenn Sie mehrere durch Kommas getrennte Animationen mit der Kurzschreibweise animation angeben.
Zeitwerte
Jede Animation kann den Wert <time> null-, ein- oder zweimal enthalten. Die Reihenfolge der Zeitwerte innerhalb einer Animationsdefinition ist wichtig: Der erste Wert, der als <time> interpretiert werden kann, wird animation-duration zugewiesen, der zweite animation-delay.
Wird in der Kurzschreibweise animation kein Wert für animation-duration angegeben, beträgt die Dauer standardmäßig 0s. In diesem Fall findet die Animation dennoch statt – die Ereignisse animationStart und animationEnd werden ausgelöst –, für Benutzer ist jedoch keine Animation sichtbar.
animation-timeline
Wenn die Kurzschreibweise animation keinen Wert für <animation-timeline> enthält, setzt die Deklaration alle zuvor deklarierten animation-timeline-Werte auf auto zurück. Dadurch wird die Timeline auf die standardmäßige documentTimeline gesetzt.
Wenn ein Wert für <animation-timeline> enthalten ist, der User-Agent solche Werte innerhalb der Kurzschreibweise jedoch nicht unterstützt, ist die gesamte animation-Deklaration ungültig und wird ignoriert. Deklarieren Sie daher beim Erstellen scrollgesteuerter CSS-Animationen die Eigenschaft animation-timeline nach der animation-Kurzschreibweise, damit sie wirksam wird.
Alternativ können Sie <animation-timeline> innerhalb der Kurzschreibweise animation in einem CSS-@supports-Block setzen, zum Beispiel:
@supports (animation: view()) {
/* CSS for browsers supporting <animation-timeline> within `animation` shorthand */
}
animation-fill-mode und neue Stapelkontexte
Beim forwards-Wert von animation-fill-mode verhalten sich animierte Eigenschaften so, als wären sie im Wert der Eigenschaft will-change enthalten. Wird während der Animation ein neuer Stapelkontext erstellt, behält das Zielelement diesen Stapelkontext nach Abschluss der Animation bei.
Barrierefreiheit
Blinkende und flackernde Animationen können für Menschen mit kognitiven Beeinträchtigungen wie einer Aufmerksamkeitsdefizit-/Hyperaktivitätsstörung (ADHS) problematisch sein. Bestimmte Bewegungsarten können außerdem vestibuläre Störungen, Epilepsie, Migräne und eine erhöhte Empfindlichkeit bei schwachem Licht auslösen.
Erwägen Sie, eine Möglichkeit zum Anhalten oder Deaktivieren von Animationen bereitzustellen. Verwenden Sie außerdem die @media-Abfrage für reduzierte Bewegung, um eine passende Alternative für Benutzer zu schaffen, die eine Präferenz für weniger Animationen angegeben haben.
- Sicherere Webanimationen für Menschen mit Bewegungsempfindlichkeit gestalten auf A List Apart (2015)
- Einführung in die Media Query für reduzierte Bewegung auf CSS-Tricks (2017)
- Responsives Design für Bewegung auf WebKit (2017)
- WCAG verstehen, Richtlinie 2.2 – Ausreichend Zeit: Benutzern ausreichend Zeit geben, Inhalte zu lesen und zu verwenden
- WCAG-Erfolgskriterium 2.2.2 verstehen: Pausieren, beenden, ausblenden beim W3C (2026)
Formale Definition
| Anfangswert | wie die jeweiligen Kurzschreibweisen:
|
|---|---|
| Anwendbar auf | alle Elemente |
| Vererbt | Nein |
| Berechneter Wert | wie die jeweiligen Kurzschreibweisen:
|
| Animationstyp | Not animatable |
Formale Syntax
animation =
<single-animation>#
<single-animation> =
<'animation-duration'> ||
<easing-function> ||
<'animation-delay-start'> ||
<single-animation-iteration-count> ||
<single-animation-direction> ||
<single-animation-fill-mode> ||
<single-animation-play-state> ||
[ none | <keyframes-name> ] ||
<single-animation-timeline>
<animation-duration> =
[ auto | <time [0s,∞]> ]#
<easing-function> =
<linear-easing-function> |
<cubic-bezier-easing-function> |
<step-easing-function>
<animation-delay-start> =
<time>#
<single-animation-iteration-count> =
infinite |
<number [0,∞]>
<single-animation-direction> =
normal |
reverse |
alternate |
alternate-reverse
<single-animation-fill-mode> =
none |
forwards |
backwards |
both
<single-animation-play-state> =
running |
paused
<keyframes-name> =
<custom-ident> |
<string>
<single-animation-timeline> =
auto |
none |
<dashed-ident> |
<scroll()> |
<view()>
<linear-easing-function> =
linear |
<linear()>
<cubic-bezier-easing-function> =
ease |
ease-in |
ease-out |
ease-in-out |
<cubic-bezier()>
<step-easing-function> =
step-start |
step-end |
<steps()>
<scroll()> =
scroll( [ <scroller> || <axis> ]? )
<view()> =
view( [ <axis> || <'view-timeline-inset'> ]? )
<linear()> =
linear( [ <number> && <percentage>{0,2} ]# )
<cubic-bezier()> =
cubic-bezier( [ <number [0,1]> , <number> ]#{2} )
<steps()> =
steps( <integer> , <step-position>? )
<scroller> =
root |
nearest |
self
<axis> =
block |
inline |
x |
y
<view-timeline-inset> =
[ [ auto | <length-percentage> ]{1,2} ]#
<integer> =
<number-token>
<step-position> =
jump-start |
jump-end |
jump-none |
jump-both |
start |
end
<length-percentage> =
<length> |
<percentage>
Beispiele
Hinweis: Von der Animation von Eigenschaften des CSS-Boxmodells wird abgeraten, da sie Neuberechnungen des Layouts und erneutes Zeichnen auslöst. Die Animation von Boxmodell-Eigenschaften beansprucht grundsätzlich die CPU stark. Erwägen Sie stattdessen, die Eigenschaft transform zu animieren.
Grundlegende Verwendung: ein Sonnenaufgang
In diesem Beispiel zeigen wir die grundlegende Verwendung der Kurzschreibweise animation, indem wir eine gelbe Sonne vor einem hellblauen Himmel animieren. Die Sonne steigt bis zur Mitte des Viewports auf und sinkt dann aus dem Sichtfeld.
HTML
Wir fügen ein einzelnes <div>-Element ein, das unsere Sonne darstellt.
<div class="sun"></div>
CSS
Zunächst erstellen wir die Sonne und den Himmel. Der Himmel ist das :root-Element des HTML-Dokuments. Inhalte außerhalb des Viewports – in unserem Fall der Teil der Sonne unterhalb des Horizonts – blenden wir aus, indem wir overflow auf hidden setzen. Mit der Eigenschaft justify-content zentrieren wir die Sonne außerdem im Hintergrund. Wir färben die Sonne gelb, legen ihre height auf die Höhe des Viewports (100vh) fest und setzen ihre Breite gleich ihrer Höhe, indem wir aspect-ratio auf 1 setzen. Mit der Eigenschaft border-radius machen wir aus dem quadratischen <div> einen Kreis.
:root {
overflow: hidden;
background-color: lightblue;
display: flex;
justify-content: center;
}
.sun {
background-color: yellow;
border-radius: 50%;
height: 100vh;
aspect-ratio: 1;
animation: 4s linear 0s infinite alternate sunrise;
}
Als Nächstes definieren wir Animations-@keyframes, die das Element, auf das sie angewendet werden, nach unten über den Viewport hinausschieben und es anschließend mithilfe von CSS-Transformationen an seine Ausgangsposition zurückbringen:
@keyframes sunrise {
from {
transform: translateY(110vh);
}
to {
transform: translateY(0);
}
}
Zum Schluss wenden wir die Animation an! Mit der Kurzschreibweise animation wenden wir die Keyframe-Animation sunrise auf das .sun-<div> an. Die Animation wird unendlich oft wiederholt, wobei jeder Durchlauf 4 Sekunden dauert. Die Animationsrichtung wechselt bei jedem Durchlauf:
.sun {
animation: 4s linear 0s infinite alternate sunrise;
}
Ergebnisse
Mehrere Animationen anwenden
Dieses Beispiel zeigt, wie mehrere Animationen auf ein einzelnes Element angewendet werden. Aufbauend auf dem vorherigen Beispiel mit einer Sonne, die vor einem hellblauen Hintergrund auf- und untergeht, lassen wir die Farben der Sonne nun allmählich durch das gesamte Regenbogenspektrum wechseln. Die zeitlichen Verläufe von Position und Farbe der Sonne sind voneinander unabhängig.
Wir verwenden dasselbe HTML und CSS wie im vorherigen Beispiel und fügen einen zweiten Satz von Animations-@keyframes hinzu. Dieser wendet einen filter an, der den Farbton mithilfe der Filterfunktion hue-rotate() durch alle möglichen Werte dreht:
@keyframes psychedelic {
from {
filter: hue-rotate(0deg);
}
to {
filter: hue-rotate(360deg);
}
}
Anschließend wenden wir beide Animationen auf unsere Sonne an. Mehrere Animationen werden durch Kommas getrennt; die Parameter jeder Animation werden unabhängig voneinander festgelegt:
.sun {
animation:
4s linear 0s infinite alternate sunrise,
24s linear 0s infinite psychedelic;
}
Ergebnisse
Kaskadierung mehrerer Animationen
Dieses Beispiel zeigt, was geschieht, wenn mehrere Animationen Werte für dieselbe Eigenschaft definieren. Es erweitert das Beispiel zur grundlegenden Verwendung um zwei Animationen, die beide einen transform-Wert festlegen.
Wir verwenden dasselbe HTML und CSS wie im ersten Beispiel, einschließlich der ursprünglichen Animation sunrise, und fügen eine zweite Animation namens bounce hinzu. Beide Animationen deklarieren Werte für dieselbe Eigenschaft:
@keyframes sunrise {
from {
transform: translateY(110vh);
}
to {
transform: translateY(0);
}
}
@keyframes bounce {
from {
transform: translateX(-50vw);
}
to {
transform: translateX(50vw);
}
}
Wir wenden beide Animationen auf die Sonne an. Wenn zwei Animationen unterschiedliche Werte auf dieselbe Eigenschaft anwenden, überschreiben später in der Kaskade deklarierte Animationen die zuvor deklarierten. In diesem Fall setzt sich der transform-Wert der Animation bounce in der Kaskade durch und überschreibt die von sunrise festgelegte Transformation. Daher bewegt sich die Sonne nur horizontal.
.sun {
animation:
4s linear 0s infinite alternate sunrise,
4s linear 0s infinite alternate bounce;
}
Ergebnisse
Die Sonne bewegt sich zwischen der linken und der rechten Seite des Viewports hin und her. Sie bleibt im Viewport, obwohl die Animation sunrise definiert ist. Die von sunrise festgelegte Eigenschaft transform wird durch die Animation bounce überschrieben.
Spezifikationen
| Spezifikation |
|---|
| CSS Animations Level 1> # animation> |
Browser-Kompatibilität
Siehe auch
- CSS-Animationen verwenden
- Modul CSS-Animationen
- Modul Scrollgesteuerte CSS-Animationen
- JavaScript-API
AnimationEvent