Propriété CSS animation-composition
Baseline
Large disponibilité
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2023.
La propriété CSS animation-composition définit une opération composite à utiliser lorsque plusieurs animations touchent simultanément la même propriété.
Syntaxe
/* Une seule animation */
animation-composition: replace;
animation-composition: add;
animation-composition: accumulate;
/* Plusieurs animations */
animation-composition: replace, add;
animation-composition: add, accumulate;
animation-composition: replace, add, accumulate;
/* Valeurs globales */
animation-composition: inherit;
animation-composition: initial;
animation-composition: revert;
animation-composition: revert-layer;
animation-composition: unset;
Note :
Lorsqu'on indique plusieurs valeurs, séparées par des virgules, à une propriété animation-*, celles-ci sont appliquées aux animations selon leur ordre d'apparition dans animation-name. Si le nombre d'animations et de compositions est différent, les valeurs de animation-composition sont réutilisées en bouclant depuis le début, jusqu'à ce que toutes les animations aient reçue une valeur animation-composition. Pour plus d'informations, voir définir plusieurs valeurs de propriétés d'animation.
Valeurs
replace-
La valeur d'effet remplace la valeur sous-jacente de la propriété. Il s'agit de la valeur par défaut.
add-
La valeur d'effet est construite à partir de la valeur sous-jacente de la propriété. L'opération produit un effet additif. Pour les types d'animation pour lesquels l'opération d'addition n'est pas commutative, le premier opérande est la valeur sous-jacente et le second opérande est la valeur d'effet.
accumulate-
La valeur d'effet et la valeur sous-jacente sont combinées. Pour les types d'animation où l'opération d'addition n'est pas commutative, le premier opérande est la valeur sous-jacente et le second opérande est la valeur d'effet.
Description
Chaque propriété ciblée par une règle @keyframes est associée avec une pile d'effets. La valeur de la pile d'effets est calculée en combinant la valeur sous-jacente d'une propriété CSS dans une règle de style avec la valeur d'effet de cette propriété dans l'image-clé (keyframe). La propriété animation-composition aide à indiquer la façon dont sont combinées la valeur sous-jacente et la valeur d'effet.
Par exemple, dans le fragment CSS qui suit, blur(5px) est la valeur sous-jacente, et blur(10px) est la valeur d'effet. La propriété filter est modifiée par les deux animations, pulse et brightness-pulse. La propriété animation-composition indique l'opération à réaliser afin de produire l'effet final, après avoir combiné l'effet de la valeur sous-jacente et de la valeur d'effet.
.icon:hover {
filter: blur(5px);
animation: 3s infinite pulse;
animation-composition: add;
}
@keyframes pulse {
0% {
filter: blur(10px);
}
100% {
filter: blur(20px);
}
}
Prenons l'hypothèse d'autres valeurs que celle utilisée avant pour animation-composition afin d'illustrer l'impact final :
- Avec
animation-composition: replace;,blur(10px)a remplacéblur(5px)pour l'image-clé à0%. C'est le comportement par défaut de la propriété. - Avec
animation-composition: add;, l'effet de la valeur composite pour l'image-clé à0%a étéblur(5px) blur(10px). - Avec
animation-composition: accumulate, l'effet de la valeur composite pour l'image-clé à0%a étéblur(15px).
Note : Une opération composite peut également être indiquée dans une image-clé donnée. Dans ce cas, l'opération composite indiquée est utilisée pour chaque propriété, d'abord pour celles de l'image-clé courante, puis sur chaque propriété de l'image-clé suivante.
Définition formelle
| Valeur initiale | replace |
|---|---|
| Applicabilité | tous les éléments |
| Héritée | non |
| Valeur calculée | comme défini |
| Type d'animation | Non animable |
Syntaxe formelle
animation-composition =
<single-animation-composition>#
<single-animation-composition> =
replace |
add |
accumulate
Exemples
>Comprendre les valeurs de animation-composition
L'exemple qui suit illustre les effets des différentes valeurs de animation-composition.
HTML
<div class="conteneur">
<code>replace</code>
<div id="remplacer" class="cible"></div>
</div>
<div class="conteneur">
<code>add</code>
<div id="ajouter" class="cible"></div>
</div>
<div class="conteneur">
<code>accumulate</code>
<div id="accumuler" class="cible"></div>
</div>
CSS
@keyframes slide {
50% {
transform: translateY(30px);
}
100% {
transform: translateX(150px);
}
}
.cible {
transform: translateX(30px) rotate(45deg);
animation: slide 5s linear infinite;
}
#remplacer {
animation-composition: replace;
}
#ajouter {
animation-composition: add;
}
#accumuler {
animation-composition: accumulate;
}
Résultat
La valeur sous-jacente de la propriété transform est, dans tous les cas, translateX(30px) rotate(45deg). Les effets des différentes valeurs de animation-composition sont les suivants :
-
Avec
replace, la propriététransformde chaque image clé remplace entièrement la propriététransformsous-jacente définie sur l'élément animé. La valeur finale de la propriététransformà l'image clé50%esttranslateY(30px)(sansrotatenitranslateX) ; à l'image clé100%, elle esttranslateX(150px)(sansrotatenitranslateY).La cible commence à
transform: translateX(30px) rotate(45deg)et s'anime effectivement verstransform: translateY(30px), puis verstransform: translateX(150px). -
Avec
add, la valeur finale de l'effet à chaque image clé correspond à la valeurtransformsous-jacente, suivie immédiatement de la valeur de l'effet.Ainsi, la cible commence à
transform: translateX(30px) rotate(45deg)et s'anime effectivement d'abord verstransform: translateX(30px) rotate(45deg) translateY(30px)(ce qui correspond à30px"vers le bas" sur l'axe Y tourné), puis verstransform: translateX(30px) rotate(45deg) translateX(150px). Comme l'opération additive est relative autransformsous-jacent et non à l'image clé précédente, il n'y a pas detranslateY(30px)à100%, plaçant l'élément à150pxle long de l'axe X tourné par rapport à la position d'origine. -
Avec
accumulate, la valeur finale de l'effet est la combinaison dutransformde l'image clé avec letransformsous-jacent. À50%,translateY(30px)se combine avec letranslateX(30px)d'origine pour former une seule translation (translate(30px, 30px)). À100%, letranslateX(150px)se combine avec letranslateX(30px)d'origine pour créertranslateX(180px).Ainsi, la cible commence à
transform: translateX(30px) rotate(45deg)et s'anime effectivement d'abord verstransform: translate(30px, 30px) rotate(45deg), puis verstransform: translateX(180px) rotate(45deg).
Spécifications
| Spécification |
|---|
| CSS Animations Level 2> # animation-composition> |
Compatibilité des navigateurs
Voir aussi
- Utiliser des animations CSS
- La propriété
compositede l'interfaceKeyFrameEffectde l'API Web Animations - Les autres propriétés d'animation associées :
animation,animation-delay,animation-direction,animation-duration,animation-fill-mode,animation-iteration-count,animation-name,animation-play-state,animation-timeline,animation-timing-function