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 animation-composition CSS Eigenschaft gibt die composite operation an, die verwendet werden soll, 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;
Hinweis:
Wenn Sie mehrere durch Kommas getrennte Werte bei einer animation-* Eigenschaft angeben, werden diese in der Reihenfolge angewendet, in der die animation-names erscheinen. Wenn die Anzahl der Animationen und Zusammensetzungen unterschiedlich ist, werden die im animation-composition-Eigenschaft aufgeführten Werte von der ersten bis zur letzten animation-name durchlaufen, bis alle Animationen einen zugewiesenen animation-composition-Wert haben. Weitere Informationen finden Sie unter Festlegen mehrerer Animationswerte.
Werte
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. Für Animationstypen, bei denen die Addition nicht kommutativ ist, ist die Reihenfolge der Operanden der zugrunde liegende Wert gefolgt vom Effektwert.
accumulate-
Der Effekt- und der zugrunde liegende Wert werden kombiniert. Für Animationstypen, bei denen die Addition nicht kommutativ ist, ist die Reihenfolge der Operanden der zugrunde liegende Wert gefolgt vom Effektwert.
Beschreibung
Jede Eigenschaft, die durch die @keyframes At-Regel angesprochen wird, ist mit einem Effekt-Stack verbunden. Der Wert des Effekt-Stacks wird berechnet, indem der zugrunde liegende Wert einer Eigenschaft in einem CSS-Stilregel mit dem Effektwert dieser Eigenschaft im Keyframe kombiniert wird. Die animation-composition-Eigenschaft hilft dabei, anzugeben, wie der zugrunde liegende Wert mit dem Effektwert kombiniert werden soll.
Zum Beispiel ist im untenstehenden CSS blur(5px) der zugrunde liegende Wert und blur(10px) der Effektwert. Die animation-composition-Eigenschaft gibt die Operation an, die durchgeführt werden soll, um den endgültigen Effektwert nach der Zusammensetzung des Effekts des zugrunde liegenden Werts und des Effektwerts zu erzeugen.
.icon:hover {
filter: blur(5px);
animation: 3s infinite pulse;
animation-composition: add;
}
@keyframes pulse {
0% {
filter: blur(10px);
}
100% {
filter: blur(20px);
}
}
Berücksichtigen Sie unterschiedliche Werte für die animation-composition-Eigenschaft im obigen Beispiel. Der endgültige Effektwert in jedem dieser Fälle wird wie folgt berechnet:
- Mit
replacewirdblur(10px)im0%Keyframeblur(5px)ersetzen. Dies ist das Standardverhalten der Eigenschaft. - Mit
addwird der zusammengesetzte Effektwert im0%Keyframeblur(5px) blur(10px)sein. - Mit
accumulatewird der zusammengesetzte Effektwert im0%Keyframeblur(15px)sein.
Hinweis: Eine Zusammensetzungsoperation kann auch in einem Keyframe angegeben werden. In diesem Fall wird die angegebene Zusammensetzungsoperation zuerst für jede Eigenschaft innerhalb dieses Keyframes und dann auf jede Eigenschaft im nächsten Keyframe verwendet.
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
>Verständnis der Werte von animation-composition
Das Beispiel unten zeigt den Effekt 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 für die transform-Eigenschaft in allen Fällen ist translateX(30px) rotate(45deg). Die Effekte der verschiedenen animation-composition-Werte sind wie folgt:
-
Mit
replaceersetzt dietransform-Eigenschaft in jedem Keyframe vollständig die zugrunde liegendetransform-Eigenschaft, die auf dem animierten Element gesetzt ist. Der endgültige Effektwert für dietransform-Eigenschaft am50%Keyframe isttranslateY(30px)(keinrotateodertranslateX); am100%Keyframe ist estranslateX(150px)(keinrotateodertranslateY).Das Ziel beginnt mit
transform: translateX(30px) rotate(45deg)und animiert effektiv zutransform: translateY(30px), dann zutransform: translateX(150px). -
Mit
addist der endgültige Effektwert an jedem Keyframe der zugrunde liegendetransform-Wert mit dem Effektwert, der unmittelbar danach platziert wird.Daher beginnt das Ziel mit
transform: translateX(30px) rotate(45deg)und animiert effektiv zuerst zutransform: translateX(30px) rotate(45deg) translateY(30px)(was30px"nach unten" auf der gedrehten Y-Achse ist), und dann zutransform: translateX(30px) rotate(45deg) translateX(150px). Da die additive Operation relativ zum zugrunde liegendentransformund nicht zum vorherigen Keyframe ist, gibt es keintranslateY(30px)bei100%, wodurch das Element150pxentlang der gedrehten X-Achse von der ursprünglichen Position ist. -
Mit
accumulateist der endgültige Effektwert der Effekt-transformdes Keyframes kombiniert mit dem zugrunde liegenden Original. Bei50%kombinierttranslateY(30px)mit dem OriginaltranslateX(30px)in eine einzelne Übersetzung (translate(30px, 30px)). Bei100%kombinierttranslateX(150px)mit dem OriginaltranslateX(30px)zutranslateX(180px).Daher beginnt das Ziel mit
transform: translateX(30px) rotate(45deg)und animiert effektiv zuerst zutransform: translate(30px, 30px) rotate(45deg), und dann zutransform: translateX(180px) rotate(45deg).
Spezifikationen
| Spezifikation |
|---|
| CSS Animations Level 2> # animation-composition> |
Browser-Kompatibilität
Siehe auch
- Verwendung von CSS-Animationen
- Komposit-Eigenschaft von KeyFrameEffect
- Andere verwandte Animations-Eigenschaften:
animation,animation-delay,animation-direction,animation-duration,animation-fill-mode,animation-iteration-count,animation-name,animation-play-state,animation-timeline,animation-timing-function