CSS предлагает два основных способа анимации: transition для плавных переходов между состояниями и animation для сложных многократных эффектов. Transition работает при изменении свойств элемента, а animation использует ключевые кадры (keyframes) для контроля над всем процессом. Выбор зависит от сложности задачи: transition для hover-эффектов и простых изменений, animation — для циклических и составных анимаций.

CSS transition: плавные переходы

Transition активируется при изменении значения CSS-свойства. Работает по принципу: было значение А, стало значение Б — браузер плавно интерполирует промежуточные состояния. Основные свойства:

  • : указывает, какое свойство анимировать (width, opacity, transform)
  • : длительность анимации в секундах или миллисекундах
  • : функция скорости (ease, linear, ease-in-out)
  • : задержка перед началом анимации

Пример кнопки с hover-эффектом:

.button { background-color: blue; transition: background-color 0.3s ease;
} .button:hover { background-color: darkblue;
}

Transition срабатывает только при наличии триггера: изменение класса, состояния (:hover, :focus) или JavaScript. Не поддерживает автоматический запуск без внешнего воздействия.

CSS animation: ключевые кадры

Animation основана на keyframes — наборе правил, определяющих состояния элемента в различные моменты времени. Позволяет создавать сложные многократные анимации без постоянных триггеров.

Создание анимации включает два этапа: определение keyframes и применение к элементу.

@keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); }
} .element { animation: pulse 2s infinite;
}

Основные свойства animation:

  • : название keyframes
  • : длительность цикла
  • : функция скорости
  • : задержка перед первым запуском
  • : количество повторений (infinite для бесконечности)
  • : направление (normal, reverse, alternate)
  • : поведение до и после анимации
  • : пауза/воспроизведение

Сравнение transition и animation

Критерий
Сложность анимации Простая (два состояния) Сложная (множество состояний)
Запуск Только при изменении свойства Автоматически или по триггеру
Повторение Однократно Многократно (включая бесконечно)
Обратное воспроизведение Автоматически при отмене триггера Требует отдельной настройки
Контроль промежуточных состояний Ограниченный Полный (через keyframes)

Transition идеален для: hover-эффектов, плавного появления/исчезновения, простых изменений размера или цвета. Animation подходит для: загрузочных индикаторов, циклических анимаций, сложных последовательностей.

Типичные ошибки и ограничения

Обе технологии имеют специфические ограничения, которые важно учитывать при разработке.

Производительность: Анимация свойств, вызывающих перерасчёт layout (width, height, margin), значительно медленнее, чем transform и opacity. Всегда предпочитайте transform для перемещений и масштабирования.

Совместимость: Не все свойства одинаково хорошо анимируются в разных браузерах. Особенно внимательно тестируйте сложные анимации в мобильных браузерах.

Доступность: Избегайте мигающих анимаций (более 3 раз в секунду) — они могут вызывать приступы у людей с фотосенситивной эпилепсией. Предусматривайте возможность отключения анимаций через prefers-reduced-motion.

Распространённые ошибки:

  • Забывают указать transition-duration — анимация не работает
  • Пытаются анимировать display: none → display: block (используйте opacity + visibility)
  • Создают анимации, блокирующие основной поток рендеринга
  • Не учитывают накопление погрешности при бесконечных анимациях

Практическое правило: начинайте с transition для простых задач и переходите к animation только когда нужен полный контроль над процессом. Всегда тестируйте анимации на реальных устройствах, особенно на мобильных.