Генератор cubic-bezier
Перетаскивайте две точки на графике или вводите значения — кривая и анимация обновляются сразу, а ниже появляется готовый transition с cubic-bezier().
.element {
transition: transform 600ms cubic-bezier(0.25, 0.1, 0.25, 1);
}
Как пользоваться
- Выберите пресет (
ease,ease-out,easeOutBackи др.) или начните со стандартной кривой. - Перетащите красную и фиолетовую точки на графике или введите
x1,y1,x2,y2в полях. С клавиатуры: выделите точку и двигайте стрелками (Shift — мелкий шаг). - Задайте длительность и эталонную кривую (
linear,ease…) и нажмите «Запустить»: синий блок едет по вашей кривой, серый — по эталонной. - Нажмите «Копировать» и вставьте
transitionв свой CSS.
Как это работает
Что означает cubic-bezier()
cubic-bezier(x1, y1, x2, y2) описывает кривую Безье, которая начинается в точке (0, 0) и заканчивается в (1, 1). По горизонтали откладывается время, по вертикали — доля выполненного изменения. Четыре числа — координаты двух контрольных точек: P1 «тянет» кривую в начале, P2 — в конце. Чем круче кривая, тем быстрее движение в этот момент.
transition: transform 600ms cubic-bezier(0.25, 0.1, 0.25, 1);
Ключевые слова — это готовые кривые
Каждое ключевое слово — сокращение для фиксированного cubic-bezier(): ease — cubic-bezier(0.25, 0.1, 0.25, 1), ease-in — (0.42, 0, 1, 1), ease-out — (0, 0, 0.58, 1), ease-in-out — (0.42, 0, 0.58, 1), linear — (0, 0, 1, 1). При этом ease — значение по умолчанию для transition-timing-function и animation-timing-function.
transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1); /* = ease-in-out */
Перелёт: y за пределами 0..1
Значения x должны оставаться в диапазоне 0..1, а y может выходить за него. Тогда свойство «перелетает» цель и возвращается — получается эффект back, например cubic-bezier(0.34, 1.56, 0.64, 1). Он хорош для transform и масштаба, но бесполезен для свойств, которые не выходят за свой диапазон, например opacity.
transition: transform 500ms cubic-bezier(0.34, 1.56, 0.64, 1);
Где применять кривую
Задавайте кривую в transition или animation для всей анимации либо внутри @keyframes — отдельно для каждого отрезка. Для плавных 60 кадров в секунду анимируйте transform и opacity. Несколько отскоков одной кривой cubic-bezier не сделать — для этого используйте keyframes или функцию linear().
Частые вопросы
Почему x1 и x2 должны быть от 0 до 1?
Ось x — это время, а время не идёт назад. cubic-bezier() с x вне диапазона 0..1 недопустим, и браузер отбрасывает всё объявление. Генератор ограничивает x за вас.
Может ли y быть меньше 0 или больше 1?
Да. Если y меньше 0, анимация сначала идёт в обратную сторону (замах), если больше 1 — перелетает цель. Заметно это только у числовых свойств, которые принимают такие значения, например у transform.
Чем cubic-bezier() отличается от steps()?
cubic-bezier() даёт плавное непрерывное изменение, а steps() — скачки между заданным числом положений. Его используют для спрайтовой анимации и эффекта печатной машинки.
Какую кривую выбрать для интерфейса?
Обычно ease-out подходит для появляющихся элементов (быстрый старт, мягкая остановка), ease-in — для исчезающих, ease-in-out — для перемещения по экрану. Укладывайтесь в 150–400 мс.