1. Введение
В современном веб-дизайне анимация играет важную роль. Она не только делает сайт визуально привлекательнее, но и помогает улучшить пользовательский опыт (UX), направляя внимание и создавая плавные переходы между состояниями. Однако важно понимать, что чрезмерное увлечение анимацией может привести к перегруженности интерфейса и снижению производительности.
В этой статье мы разберём основы анимации в вебе с помощью CSS и JavaScript, изучим, какие инструменты помогут сделать процесс удобнее, и разберём несколько примеров анимации, которые можно сразу применять в проектах. Для удобства вы можете попробовать все примеры в Редакторе кода: перейти.
2. Основы CSS-анимации: с чего начать?
CSS позволяет создавать простые и эффективные анимации без необходимости писать сложный код. Два основных механизма анимации в CSS — это transition и @keyframes.
Transition — анимируем плавные изменения
Свойство transition позволяет анимировать изменения CSS-свойств при взаимодействии пользователя. Например, давайте сделаем кнопку, которая меняет цвет при наведении:
.button {
background-color: #3498db; /* Задает цвет фона кнопки*/
color: #fff; /* Устанавливает цвет текста внутри кнопки */
padding: 10px 20px; /* Внутренние отступы: 10px сверху/снизу и 20px слева/справа до текста */
border: none; /* Убирает стандартную браузерную рамку (границу) вокруг кнопки */
border-radius: 5px; /* Скругляет углы кнопки на 5 пикселей*/
cursor: pointer; /* Меняет вид курсора мыши на "руку с указательным пальцем" при наведении */
transition: background-color 0.3s ease; /* Плавный переход: изменение цвета фона происходит за 0.3 секунды с эффектом плавного старта и замедления (ease) */
}
.button:hover {
background-color: #2980b9; * Плавно меняет цвет фона на более темный оттенок синего */
}
<button class="button">Нажми на меня</button>
Вы можете попробовать этот код в Редакторе кода: перейти.
Попробуйте изменить время transition или добавить другие свойства, например transform: scale(1.1); при наведении.
@keyframes — создаём сложные анимации
Для более сложных анимаций используется правило @keyframes. Давайте создадим эффект пульсирующей кнопки:
/* Объявление правила анимации с уникальным именем "pulse" (пульсация) */
@keyframes pulse {
/* Начальная точка анимации (0% времени воспроизведения) */
0% {
/* Оставляем объект в исходном, первоначальном размере (масштаб 1:1) */
transform: scale(1);
}
/* Середина цикла анимации (50% времени воспроизведения) */
50% {
/* Увеличиваем объект на 10% от его исходного размера по всем осям */
transform: scale(1.1);
}
/* Конечная точка анимации (100% времени воспроизведения) */
100% {
/* Плавно возвращаем объект к исходному размеру (масштаб 1:1) */
transform: scale(1);
}
}
/* Применение созданной анимации к классу кнопки */
.button {
/* Комплексное свойство для запуска анимации:*/
/* - pulse: имя используемых ключевых кадров (@keyframes)*/
/* - 1.5s: один полный цикл анимации длится ровно полторы секунды*/
/* - infinite: анимация будет повторяться бесконечно по кругу */
animation: pulse 1.5s infinite;
}
<button class="button">Нажми на меня</button>
Вы можете попробовать этот код в Редакторе кода: перейти.
3. Добавляем интерактивность с JavaScript
CSS-анимации хороши для статичных эффектов, но если нужно запускать анимацию по клику или при прокрутке, без JavaScript не обойтись.
Запуск анимации с помощью добавления класса
Простейший способ — добавить CSS-анимацию при клике:
<button id="animateBtn">Нажми меня</button>
<div id="box"></div>
/* Выбираем элемент с уникальным идентификатором id="box" */
#box {
/* Задаем фиксированную ширину блока в 100 пикселей */
width: 100px;
/* Задаем фиксированную высоту блока в 100 пикселей */
height: 100px;
/* Окрашиваем фон блока в красный цвет */
background: red;
/* Включаем плавный переход для свойства transform.
Любые изменения трансформации займут 0.5 секунды */
transition: transform 0.5s;
}
/* Создаем класс .active, который будет добавляться элементу */
.active {
/* Сдвигаем элемент по горизонтальной оси X вправо на 100 пикселей */
transform: translateX(100px);
}
document.getElementById("animateBtn").addEventListener("click", function() {
document.getElementById("box").classList.toggle("active");
});
Вы можете попробовать этот код в Редакторе кода: перейти.
4. Эффект появления элементов при скролле
Скролл-анимации позволяют постепенно показывать элементы при прокрутке страницы. Это можно сделать с помощью Intersection Observer:
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add("visible");
}
});
});
document.querySelectorAll(".animate").forEach(el => observer.observe(el));
.animate {
opacity: 0;
transform: translateY(20px);
transition: all 0.5s;
}
.visible {
opacity: 1;
transform: translateY(0);
}
Этот эффект можно увидеть в Редакторе кода: перейти.
5. Когда CSS недостаточно: обзор мощных библиотек
Иногда анимации на чистом CSS или Web Animations API недостаточно. В таких случаях помогут:
- GSAP — мощная библиотека для анимаций.
- Anime.js — лёгкий и удобный инструмент.
- Three.js — для 3D-анимации.
Пример использования GSAP:
gsap.to("#box", { x: 100, duration: 1, ease: "power2.out" });
6. Ошибки новичков
Избегайте:
- Анимации, влияющие на
layout(width,height,margin). - Одновременного запуска нескольких сложных анимаций.
- Чрезмерного количества
setTimeoutиsetInterval.
7. Полезные инструменты
- CSS Tricks Animation Generator — генератор CSS-анимаций.
- GSAP Playground — тестирование анимаций.
- DevTools Performance — инструмент для проверки производительности.
8. Итоги
Анимация делает сайты живыми и интересными, но важно использовать её с умом. В этой статье мы разобрали основные способы анимации в CSS и JavaScript, а также узнали о мощных библиотеках, которые упрощают создание эффектов.
💡 Какой из приёмов анимации вы используете чаще всего? Делитесь своими находками в комментариях!



