animation-composition CSS property
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2023 browserübergreifend verfügbar.
Die CSS-Eigenschaft animation-composition legt fest, welche Kompositionsoperation verwendet wird, wenn mehrere Animationen gleichzeitig dieselbe Eigenschaft beeinflussen.
Syntax
/* Single animation */
animation-composition: replace;
animation-composition: add;
animation-composition: accumulate;
/* Multiple animations */
animation-composition: replace, add;
animation-composition: add, accumulate;
animation-composition: replace, add, accumulate;
/* Global values */
animation-composition: inherit;
animation-composition: initial;
animation-composition: revert;
animation-composition: revert-layer;
animation-composition: unset;
Werte
Diese Eigenschaft wird durch einen oder mehrere kommagetrennte Schlüsselwortwerte angegeben:
replace-
Der Effektwert überschreibt den zugrunde liegenden Wert der Eigenschaft. Dies ist der Standardwert.
add-
Der Effektwert baut auf dem zugrunde liegenden Wert der Eigenschaft auf. Diese Operation erzeugt einen additiven Effekt. Bei Animationstypen, für die die Addition nicht kommutativ ist, steht zuerst der zugrunde liegende Wert und danach der Effektwert.
accumulate-
Der Effektwert und der zugrunde liegende Wert werden kombiniert. Bei Animationstypen, für die die Addition nicht kommutativ ist, steht zuerst der zugrunde liegende Wert und danach der Effektwert.
Beschreibung
Jeder Eigenschaft, die von der @keyframes-At-Regel angesprochen wird, ist ein Effektstapel zugeordnet. Der Wert des Effektstapels wird berechnet, indem der zugrunde liegende Wert einer Eigenschaft in einer CSS-Stilregel mit dem Effektwert dieser Eigenschaft im Keyframe kombiniert wird. Mit der Eigenschaft animation-composition legen Sie fest, wie diese beiden Werte kombiniert werden.
Im folgenden CSS ist beispielsweise blur(5px) der zugrunde liegende Wert und blur(10px) der Effektwert. Die Eigenschaft animation-composition legt fest, mit welcher Operation aus beiden Werten der endgültige Effektwert entsteht.
.icon:hover {
filter: blur(5px);
animation: 3s infinite pulse;
animation-composition: add;
}
@keyframes pulse {
0% {
filter: blur(10px);
}
100% {
filter: blur(20px);
}
}
Betrachten Sie die verschiedenen Werte für animation-composition im obigen Beispiel. Der endgültige Effektwert wird jeweils wie folgt berechnet:
- Bei
replaceersetztblur(10px)im0%-Keyframe den Wertblur(5px). Dies ist das Standardverhalten der Eigenschaft. - Bei
addlautet der kombinierte Effektwert im0%-Keyframeblur(5px) blur(10px). - Bei
accumulatelautet der kombinierte Effektwert im0%-Keyframeblur(15px).
Hinweis: Eine Kompositionsoperation kann auch in einem Keyframe angegeben werden. In diesem Fall wird die angegebene Kompositionsoperation zuerst auf jede Eigenschaft innerhalb dieses Keyframes und dann auf jede Eigenschaft im nächsten Keyframe angewendet.
Mehrere Werte
Wenn Sie für eine animation-*-Eigenschaft mehrere kommagetrennte Werte angeben, werden diese den Animationen in der Reihenfolge zugeordnet, in der die animation-name-Werte aufgeführt sind. Unterscheidet sich die Anzahl der Animationen von der Anzahl der Kompositionswerte, werden die in animation-composition aufgeführten Werte wiederholt, bis jeder Animation ein animation-composition-Wert zugeordnet ist. Weitere Informationen finden Sie unter Mehrere Werte für Animationseigenschaften festlegen.
Formale Definition
| Anfangswert | replace |
|---|---|
| Anwendbar auf | alle Elemente |
| Vererbt | Nein |
| Berechneter Wert | wie angegeben |
| Animationstyp | Not animatable |
Formale Syntax
animation-composition =
<single-animation-composition>#
<single-animation-composition> =
replace |
add |
accumulate
Beispiele
>Die Werte von animation-composition verstehen
Das folgende Beispiel zeigt die Auswirkungen verschiedener animation-composition-Werte nebeneinander.
HTML
<div class="container">
replace
<div id="replace" class="target"></div>
</div>
<div class="container">
add
<div id="add" class="target"></div>
</div>
<div class="container">
accumulate
<div id="accumulate" class="target"></div>
</div>
CSS
@keyframes slide {
50% {
transform: translateY(30px);
}
100% {
transform: translateX(150px);
}
}
.target {
transform: translateX(30px) rotate(45deg);
animation: slide 5s linear infinite;
}
#replace {
animation-composition: replace;
}
#add {
animation-composition: add;
}
#accumulate {
animation-composition: accumulate;
}
Ergebnis
Der zugrunde liegende Wert der Eigenschaft transform ist in allen Fällen translateX(30px) rotate(45deg). Die verschiedenen Werte von animation-composition wirken sich wie folgt aus:
-
Bei
replaceersetzt dietransform-Eigenschaft in jedem Keyframe vollständig die zugrunde liegendetransform-Eigenschaft des animierten Elements. Der endgültige Effektwert fürtransformist beim50%-KeyframetranslateY(30px)(ohnerotateodertranslateX) und beim100%-KeyframetranslateX(150px)(ohnerotateodertranslateY).Das Zielelement beginnt mit
transform: translateX(30px) rotate(45deg)und wird effektiv zunächst zutransform: translateY(30px)und dann zutransform: translateX(150px)animiert. -
Bei
addbesteht der endgültige Effektwert in jedem Keyframe aus dem zugrunde liegendentransform-Wert, unmittelbar gefolgt vom Effektwert.Das Zielelement beginnt daher mit
transform: translateX(30px) rotate(45deg)und wird effektiv zuerst zutransform: translateX(30px) rotate(45deg) translateY(30px)animiert (also um30pxentlang der gedrehten Y-Achse nach „unten“) und danach zutransform: translateX(30px) rotate(45deg) translateX(150px). Da sich die additive Operation auf den zugrunde liegendentransform-Wert und nicht auf den vorherigen Keyframe bezieht, enthält der Wert bei100%keintranslateY(30px). Das Element wird damit gegenüber seiner ursprünglichen Position um150pxentlang der gedrehten X-Achse verschoben. -
Bei
accumulateergibt sich der endgültige Effektwert aus der Kombination destransform-Effektwerts im Keyframe mit dem zugrunde liegenden ursprünglichen Wert. Bei50%wirdtranslateY(30px)mit dem ursprünglichentranslateX(30px)zu einer einzigen Verschiebung (translate(30px, 30px)) kombiniert. Bei100%wirdtranslateX(150px)mit dem ursprünglichentranslateX(30px)zutranslateX(180px)kombiniert.Das Zielelement beginnt daher mit
transform: translateX(30px) rotate(45deg)und wird effektiv zuerst zutransform: translate(30px, 30px) rotate(45deg)und dann zutransform: translateX(180px) rotate(45deg)animiert.
Spezifikationen
| Spezifikation |
|---|
| CSS Animations Level 2> # animation-composition> |
Browser-Kompatibilität
Siehe auch
- CSS-Animationen verwenden
- Eigenschaft
compositevonKeyframeEffect - Weitere verwandte Animationseigenschaften:
animation,animation-delay,animation-direction,animation-duration,animation-fill-mode,animation-iteration-count,animation-name,animation-play-state,animation-timeline,animation-timing-function