Сочетайте несколько анимационных эффектов с помощью композиции анимации.

Свойство animation-composition позволяет управлять тем, что должно происходить, когда несколько анимаций одновременно влияют на одно и то же свойство.

Browser Support

  • Chrome: 112.
  • Край: 112.
  • Firefox: 115.
  • Сафари: 16.

Source

Допустим, к элементу применено следующее базовое преобразование:

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

И у вас также есть этот набор ключевых кадров:

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

При применении этих ключевых кадров к элементу transform в to кадре заменяет существующее transform . Это поведение по умолчанию.

С помощью animation-composition вы теперь можете контролировать происходящее вместо стандартной replace . Допустимые значения:

  • replace : Значение эффекта заменяет базовое значение. (по умолчанию)
  • add : Значение эффекта добавляется к базовому значению.
  • accumulate : значение эффекта объединяется с базовым значением.

Разница между сложением и накоплением невелика. Например, возьмем два значения blur(2) и blur(3) . При сложении это даст blur(2) blur(3) , а при накоплении — blur(5) .

Это можно сравнить с чашкой, наполненной чаем. Когда в неё наливают молоко, происходит следующее:

  • replace : Чай убирают, и вместо него добавляют молоко.
  • add : Молоко добавляется в чашку, но оно остается слоем поверх чая.
  • accumulate : В чай добавляют молоко, и, поскольку это жидкости, они хорошо смешиваются.

Демо

В демонстрации показаны три серых прямоугольника, к которым применены базовое transform и animation .

Несмотря на то, что эти блоки имеют одинаковую анимацию, результат получается разным, поскольку у них разные наборы animation-composition :

Для первого блока установлено значение animation-composition: replace . Это поведение по умолчанию. В его конечной позиции исходное значение translateX(50px) rotate(45deg) для transform заменяется на translateX(100px) .

Для второго блока задана animation-composition: add . В его конечной позиции к исходному значению translateX(100px) translateX(50px) rotate(45deg) translateX(50px) rotate(45deg) translateX(100px) . Это перемещает блок на 50px, затем поворачивает его на 45deg, а затем перемещает на 100px.

Третий блок имеет параметр animation-composition: accumulate . В его конечной позиции значение translateX(100px) будет математически прибавлено к значению translateX(50px) из исходного преобразования, в результате чего получится преобразование translateX(150px) rotate(45deg) .