Spécifier la façon dont les effets d'animation doivent être composés avec la composition d'animation

Remplacer, ajouter ou accumuler du contenu ? Suspense…

Combiner plusieurs effets d'animation

La propriété animation-composition permet de contrôler ce qui doit se passer lorsque plusieurs animations affectent simultanément la même propriété.

Navigateurs pris en charge

  • 112
  • 112
  • 115
  • 16

Source

Supposons que cette transformation de base soit appliquée à un élément:

transform-origin: 50% 50%;
transform: translateX(50px) rotate(45deg);

Vous disposez également de l'ensemble d'images clés suivant:

@keyframes adjust {
  to {
    transform: translateX(100px);
  }
}

Lorsque vous appliquez ces images clés à un élément, la transform de l'image clé to remplace la transform existante. Il s'agit du comportement par défaut.

Avec animation-composition, vous pouvez désormais contrôler ce qui doit se passer au lieu de la replace par défaut. Les valeurs acceptées sont les suivantes :

  • replace: la valeur de l'effet remplace la valeur sous-jacente. (par défaut)
  • add: la valeur de l'effet est ajoutée à la valeur sous-jacente.
  • accumulate: la valeur de l'effet est combinée à la valeur sous-jacente.

La différence entre addition et accumulation est subtile. Prenons l'exemple des deux valeurs blur(2) et blur(3). Si vous les additionnez, vous obtenez blur(2) blur(3), mais lorsque vous les cumulez, vous obtenez blur(5).

Vous pouvez comparer cela avec une tasse remplie de thé. Voici ce qui se produit lorsque vous versez du lait dedans:

  • replace: le thé est retiré et remplacé par le lait.
  • add: le lait est ajouté dans la tasse, mais reste en superposition sur le thé.
  • accumulate: le lait est ajouté au thé et, comme ils sont liquides, ils se marient bien.

Démonstration

Dans la démonstration ci-dessous, trois cases grises sont associées aux valeurs transform et animation de base.

Même si ces cases ont la même animation, elles génèrent un résultat différent, car elles ont un ensemble animation-composition différent:

Le premier champ est défini sur animation-composition: replace. Il s'agit du comportement par défaut. Dans sa position de fin, la valeur translateX(50px) rotate(45deg) d'origine de transform est simplement remplacée par translateX(100px).

La deuxième zone est définie sur animation-composition: add. À sa position de fin, translateX(100px) est ajouté à l'élément translateX(50px) rotate(45deg) d'origine, ce qui génère translateX(50px) rotate(45deg) translateX(100px). Cela permet de déplacer la zone de 50 pixels, puis de la faire pivoter de 45 degrés, puis de la déplacer de 100 pixels.

La troisième zone est définie sur animation-composition: accumulate. Dans sa position de fin, translateX(100px) est mathématiquement ajouté à translateX(50px) à partir de la transformation d'origine, ce qui entraîne une transformation de translateX(150px) rotate(45deg).

Photo par Alex Boyd, publiée sur Unsplash