Анимации в CSS — подробное руководство с примерами
Стилизация web страниц давно шагнула вперед, анимации в css возможно применять без использования javascript и его различных библиотек. С помощью css анимацией можно плавно менять размер, цвет, различные переходы и т.д.
Основная идея CSS анимаций — это плавный переход между несколькими наборами стилей, которые называются ключевыми кадрами (keyframes). Каждый ключевой кадр определяет, как должен выглядеть элемент в определённый момент. Анимации используются на сайтах для улучшения визуального восприятия, привлечения внимания, вовлечения пользователя и создания более «живых» интерфейсов.
Как сделать анимацию в CSS
Для того чтоб сделать анимацию в css достаточно двух основных шагов:
- Описать ключевые кадры с помощью @keyframes. В этом блоке задаются изменения которые будут происходить с элементом. Например, можно сделать так чтобы блок плавно перемещался вправо или менял цвет.
- Применить эту анимацию к элементу через свойство animation. Это свойство определяет скорость анимации, время задержки, число повторов, тип ускорения и т.д.
Рассмотрим применение анимации на примере.
/* Описываем ключевые кадры */
@keyframes move {
from { transform: translateX(0); }
to { transform: translateX(200px); }
}
/* Применяем к элементу */
.element {
width: 100px;
height: 100px;
border: 1px solid #cccccc;
background: blue;
animation: move 2s ease-in-out;
}
<div class="element"></div>
Таким образом CSS анимация в HTML получилась в виде синего квадрата, который слева будет перемещен вправо в течении двух секунд, на расстояние в 200 пикселей.
Простая анимация в CSS при наведении
Пример выше показывает что вся анимация будет происходить исключительно при загрузке страницы. Но иногда нам нужна реакция на действия пользователя, то есть, нужна анимация в css при наведении. Такие анимации обычно используют для:
- Кнопок — увеличение, подсветка.
- Ссылок — подчеркивание, смена цвета.
- Карточек товаров — увеличение или поднятие над поверхностью.
- Изображений — масштабирование или затемнение/осветление.
- Меню и различной навигации.
.button {
padding: 12px 20px;
background: #ff6600;
color: white;
transition: transform 0.3s ease, background 0.3s ease;
}
.button:hover {
transform: scale(1.1);
background: #ff8800;
}
.element {
width: 100px;
height: 100px;
border: 1px solid #cccccc;
background: blue;
}
<div class="element button"></div>
Таким образом при наведении мы плавно увеличили наш квадрат и изменили его цвет.
Анимация текста в CSS
Текст можно подсвечивать, выделять, перемещать или анимировать мерцание. Приведем пример мерцающего текста:
.text {
font-size: 34px;
color: #0000ff;
font-size: 24px;
animation: blink 1.5s infinite;
}
@keyframes blink {
0% { opacity: 1; }
50% { opacity: 0.3; }
100% { opacity: 1; }
}
<div class="text">Мерцающий текст</div>
Данный код создает текст размером 34 пикселя синего цвета, который мигает без остановки.
Анимация кнопки в CSS
Очень популярная анимация для кнопки в CSS — эффект пульсации. Кнопка увеличивается и уменьшается по циклу до бесконечности, тем самым делает кнопку более заметной для пользователя:
.pulse {
background: #ff8800;
color: #ffffff;
border: 1px solid #cccccc;
border-radius: 8px;
cursor: pointer;
padding: 15px 25px;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
<button class="pulse">Нажми меня</button>
С помощью этого кода мы получили оранжевую кнопку которая через анимацию изменяет свой размер и возвращается к исходному.
Анимация картинок в CSS
В анимации картинок можно применять разные сценарии, зависит от вашей фантазии и конкретной задачи. Приведем пример покачивания картинки с поворотом влево и вправо:
img {
width: 250px;
animation: sway 3s infinite alternate ease-in-out;
}
@keyframes sway {
from { transform: rotate(-3deg); }
to { transform: rotate(3deg); }
}
<img src="imgCss.png" alt="Img">
Итоги CSS анимации без JS
Выше мы привели некоторые простые приемы анимации которые можно сделать с помощью CSS стилей. Если вам этого недостаточно, просто дайте знать об этом в комментарии мы выпустим более подробную статью и уведомим вас об этом. Покажем и расскажем более детально другие способы анимации. Приведем в пример таблицу со свойствами css анимации:
| Свойство | Описание | Примеры значений и пояснения |
|---|---|---|
| animation-name | Имя анимации, на которую элемент должен ссылаться. Соответствует названию @keyframes. |
animation-name: move; — подключает анимацию move из @keyframes.animation-name: fade, scale; — несколько анимаций одновременно.
|
| animation-duration | Продолжительность выполнения анимации. |
animation-duration: 2s; — анимация длится 2 секунды.animation-duration: 500ms; — полсекунды.
|
| animation-timing-function | Определяет скорость анимации в разные моменты времени. |
ease — плавное начало и конец.linear — одинаковая скорость.ease-in — ускорение.ease-out — замедление.cubic-bezier() — точная настройка кривой.
|
| animation-delay | Задержка перед началом анимации. |
animation-delay: 1s; — старт через секунду.animation-delay: 0; — без задержки.
|
| animation-iteration-count | Количество повторений. |
3 — анимация выполнится 3 раза.infinite — бесконечно.
|
| animation-direction | Определяет направление анимации при повторе. |
normal — каждый раз вперед.reverse — каждый раз назад.alternate — туда и обратно.alternate-reverse — обратно и туда.
|
| animation-fill-mode | Определяет, как должны применяться стили до и после анимации. |
none — элемент возвращается к исходному стилю.forwards — сохраняет конечный кадр.backwards — применяет первый кадр до начала анимации.both — объединяет forwards + backwards.
|
| animation-play-state | Определяет, проигрывается или приостановлена анимация. |
running — воспроизведение.paused — пауза (например, при наведении).
|
| @keyframes | Блок, в котором описываются ключевые кадры анимации. |
0% — начальное состояние.50% — средняя точка.100% — окончательное состояние.
|
| animation | Сокращенное свойство для записи всех параметров анимации в одну строку. |
animation: move 2s ease-in-out infinite;Имя — время — тайминг — количество повторов. |