CSS-анимация на сайте
Разметка и keyframes
Идея
Соберём персонажа из обычных блоков: голова, глаза, тело. Каждый элемент — div с абсолютным позиционированием, а движение задаётся двумя анимациями: покачивание тела и «моргание» глаз.
HTML-разметка
<div class="eve">
<div class="eve-face">
<div class="left-eye"><div class="pupil"></div></div>
<div class="right-eye"><div class="pupil"></div></div>
</div>
<div class="eve-body"></div>
</div>
CSS: фигура и позиции
.eve { position: relative; width: 250px; height: 400px;
animation: motion 2s infinite; }
.eve-face { position: absolute; top: 60px; left: 80px;
width: 90px; height: 70px; background: #fff;
border-radius: 100px 100px 45px 45px; }
.left-eye, .right-eye { position: absolute; top: 30px;
width: 20px; height: 12px; background: #067fe2;
clip-path: ellipse(50% 45% at 50% 50%);
animation: eyeblink 2s infinite; }
CSS: анимация
@keyframes motion {
0% { transform: translateY(0); }
50% { transform: translateY(-60px); }
100% { transform: translateY(0); }
}
@keyframes eyeblink {
0%, 30%, 35%, 100% { transform: scale(1); }
33%, 34% { transform: scale(1, 0); }
}
Второй набор ключевых кадров делает глаза плоскими на два процента времени — этого достаточно, чтобы моргание читалось, но не раздражало.
Что учесть
- Анимируйте
transformиopacity: они не вызывают перерасчёт вёрстки, в отличие отtopиwidth. - Добавьте
prefers-reduced-motion— часть людей отключает анимацию в системе. - Бесконечная анимация жрёт батарею на мобильных: ставьте паузу, когда блок вне экрана.
- Фигуру из десятков
divлучше заменить на SVG, если элементов больше пяти.
Нужен сайт, а не только пример?
Сделаю анимацию аккуратно: чтобы она не мешала читать и не съедала скорость. Проверю на мобильных и учту системную настройку «уменьшить движение». С 2009 года, по договору.
Полезно по теме: кнопка на CSS, обзор CSS, виджет WhatsApp, про Django.