Анимации стали неотъемлемой частью современного веба, улучшая пользовательский опыт и делая интерфейсы более живыми. Однако перед разработчиками часто встаёт вопрос: какие технологии использовать для анимаций — CSS или JavaScript? В этой статье мы детально разберём оба подхода, их сильные и слабые стороны, а также рассмотрим популярные библиотеки для сложных анимаций.
1. CSS-анимации
CSS предоставляет два основных способа создания анимаций: transitions для простых переходов и animations для более сложных последовательностей.
CSS Transition (плавные переходы)
.button {
background-color: #4285f4;
transition: background-color 0.3s ease, transform 0.2s ease-out;
}
.button:hover {
background-color: #34a853;
transform: scale(1.05);
}
CSS Animation (ключевые кадры)
@keyframes bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-20px); }
}
.element {
animation: bounce 2s ease-in-out infinite;
}
Преимущества CSS-анимаций:
- Производительность: Анимации выполняются на GPU, особенно transform и opacity
- Простота использования: Не требует JavaScript-кода
- Декларативный синтаксис: Легко читать и поддерживать
- Автоматическая обработка браузером
Ограничения:
- Ограниченный контроль над анимацией во время выполнения
- Сложные последовательности трудно реализовать
- Трудности с цепочками анимаций
- Ограниченная обратная связь о состоянии анимации
Когда использовать CSS-анимации?
- Простые hover-эффекты и переходы состояний
- Анимации загрузки (лоадеры)
- Микроанимации интерфейса
- Эффекты при прокрутке (с Intersection Observer)
- Когда важна максимальная производительность
"Для 80% анимаций интерфейса достаточно возможностей CSS. Они будут работать плавно и не нагружают основной поток." — Sarah Drasner, автор "SVG Animations"
2. JavaScript-анимации (GSAP, Anime.js)
Когда возможностей CSS недостаточно, на помощь приходят JavaScript-библиотеки анимаций. Две самые популярные — GSAP (GreenSock Animation Platform) и Anime.js.
Пример с GSAP
import { gsap } from "gsap";
// Простая анимация
gsap.to(".box", {
duration: 1,
x: 100,
rotation: 360,
ease: "bounce.out"
});
// Сложная последовательность
const timeline = gsap.timeline();
timeline
.to(".element1", { x: 100, duration: 1 })
.to(".element2", { y: 50, duration: 0.5 }, "-=0.5")
.from(".element3", { opacity: 0, duration: 2 });
Пример с Anime.js
import anime from 'animejs';
anime({
targets: '.element',
translateX: 250,
rotate: '1turn',
backgroundColor: '#FFF',
duration: 2000,
loop: true,
direction: 'alternate',
easing: 'easeInOutSine'
});
Преимущества JavaScript-анимаций:
- Полный контроль над анимацией в реальном времени
- Сложные последовательности и цепочки анимаций
- Гибкость: анимация любых свойств, включая кастомные
- Богатые API для управления анимацией
- Кросс-браузерная совместимость
Недостатки:
- Производительность может быть ниже, чем у CSS
- Размер бандла увеличивается за счёт библиотек
- Сложнее в освоении и использовании
- Требует JavaScript-кода
Когда использовать JavaScript-анимации?
- Сложные анимационные последовательности
- Интерактивные анимации, реагирующие на пользовательский ввод
- Анимации, зависящие от сложной логики приложения
- Продвинутые эффекты (параллакс, физическое движение)
- Когда нужен точный контроль над временем и состоянием анимации
"GSAP — это самый мощный инструмент для анимации в вебе. Он может анимировать всё что угодно, с потрясающей производительностью и точностью." — Chris Gannon, анимационный дизайнер
3. Сравнение подходов
Производительность
CSS-анимации обычно более производительны, так как выполняются в композитном слое браузера. Особенно это касается свойств transform и opacity. Однако современные библиотеки вроде GSAP оптимизированы и могут приближаться к производительности CSS.
Контроль и гибкость
JavaScript-библиотеки предоставляют гораздо больше контроля над анимацией: возможность паузы, перемотки, изменения параметров на лету, сложные цепочки и последовательности.
Сложность анимаций
CSS подходит для относительно простых анимаций с предсказуемым поведением. Для сложных, составных анимаций с множеством элементов JavaScript-библиотеки незаменимы.
Рекомендации по выбору
- Начинайте с CSS для простых анимаций и переходов
- Используйте will-change для оптимизации производительности
- Переходите на JavaScript когда CSS недостаточно
- GSAP для сложных, высококачественных анимаций
- Anime.js для более лёгких, но всё же мощных анимаций
- Избегайте анимаций свойств, вызывающих перерасчёт макета (width, height, margin и т.д.)



