Пружинная анимация CSS
Пружинная анимация имитирует движение пружины: элемент может перелететь конечное положение и вернуться к нему
с затухающими колебаниями. Настройте жёсткость, затухание и массу — генератор рассчитает длительность
и готовый CSS с функцией linear().
Как пользоваться
- Выберите готовую пружину: «Мягкая», «Упругая», «Колебания» или «Без перелёта».
- При остальных неизменных настройках увеличение жёсткости ускоряет отклик, а увеличение массы замедляет его. Затухание подавляет колебания, но слишком большое значение замедляет подход к цели. Под ползунками показаны длительность, число точек и количество пересечений цели в расчётной модели.
- Длительность рассчитывается автоматически: к её концу отклонение модели от цели остаётся меньше 0,1%. Её стоит использовать вместе с кривой: с другой длительностью колебания станут быстрее или медленнее задуманного.
- Кнопка «Проиграть» запускает движение шарика с той же функцией и длительностью, что в CSS.
- Скопируйте CSS и задайте элементу с классом
boxновое значениеtransform, например при наведении: сам по себеtransitionдвижение не запускает.
Как устроена функция linear()
linear() перечисляет значения прогресса и соединяет их отрезками: linear(0, 1.08 31%, 1)
значит «к 31% времени пройти 108% пути, а к концу вернуться к 100%».
Скорость постоянна между соседними точками и может меняться на их стыках.
Генератор использует до 40 точек: при большом числе колебаний приближение становится грубее.
Ключевое слово linear без скобок задаёт равномерное изменение и соответствует linear(0, 1).
Функция подходит для transition-timing-function и animation-timing-function и
применяется в CSS-анимации отдельно между ключевыми кадрами соответствующего свойства.
Подробнее о переходах — в статье
«Переходные эффекты».
Если вам нужен разгон, торможение или одиночный перелёт, воспользуйтесь
редактором cubic-bezier().
Параметры пружины
Настройте жёсткость, затухание и массу. Генератор приблизит движение пружины функцией linear() и рассчитает длительность. При большом числе колебаний ограничение в 40 точек снижает точность кривой.
Пружина
:root {
--spring-easing: linear(0, 0.01 0.8%, 0.026 1.3%, 0.049 1.8%, 0.096 2.5%, 0.178 3.5%, 0.25 4.3%, 0.329 5%, 0.7 8.3%, 0.836 9.5%, 0.958 10.8%, 1.062 12%, 1.147 13.3%, 1.211 14.5%, 1.254 15.8%, 1.277 17%, 1.283 17.8%, 1.281 18.8%, 1.257 20.5%, 1.207 22.5%, 1.056 27.3%, 0.995 29.5%, 0.964 31%, 0.944 32.3%, 0.931 33.5%, 0.922 35%, 0.92 36.8%, 0.927 38.5%, 1.001 47.5%, 1.015 50%, 1.022 52.8%, 1.021 56.5%, 1 65.5%, 0.994 70.5%, 1.002 87.5%, 1);
--spring-duration: 1.397s;
}
.box {
transition: transform var(--spring-duration) var(--spring-easing);
}