Spec-Zone.ru › CSS

Функция CSS `cubic-bezier()`

Базовая поддержка Широко доступна

Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в разных версиях браузеров. Она доступна в браузерах с июля 2015 года.

cubic-bezier() CSS-функция создаёт плавный переход с использованием кубической кривой Безье. В качестве <easing-function> она может использоваться для сглаживания начала и конца интерполяции.

Синтаксис

cubic-bezier(0.25, 0.1, 0.25, 1)
cubic-bezier(0.1, -0.6, 0.2, 0)
cubic-bezier(0, 0, 1, 1)

Параметры

Функция принимает следующие четыре параметра, которые задают координаты двух контрольных точек:

<x1>
<number>, задающее координату первой контрольной точки по оси x. Значение должно находиться в диапазоне [0, 1].
<y1>
<number>, задающее координату первой контрольной точки по оси y.
<x2>
<number>, задающее координату второй контрольной точки по оси x. Значение должно находиться в диапазоне [0, 1].
<y2>
<number>, задающее координату второй контрольной точки по оси y.

Описание

Кубические функции Безье, часто называемые функциями плавного перехода, сопоставляют входной прогресс выходному. Оба значения выражаются в <number>ах, где 0.0 обозначает начальное состояние, а 1.0 — конечное. Если кубическая кривая Безье недопустима, CSS игнорирует всё свойство.

Кубическая кривая Безье задаётся четырьмя точками: P0, P1, P2 и P3. Точки P0 и P3 обозначают начало и конец кривой. В CSS начальная точка P0 фиксирована в (0, 0), а конечная точка P3 — в (1, 1); промежуточные точки P1 и P2 задаются соответственно параметрами функции (<x1>, <y1>) и (<x2>, <y2>). Ось x представляет входной прогресс, а ось y — выходной прогресс.

Graph of Input progress to Output progress showing an S-shaped line curving from the origin to (1, 1) with the Bezier control points P1(0.1, 0.6) and P2(0.7, 0.2).

Не все кубические кривые Безье подходят в качестве функций плавного перехода, поскольку не все они являются математическими функциями, то есть кривыми, для которых каждой координате по оси x соответствует ноль или одно значение. При фиксированных, как определено в CSS, P0 и P3 кубическая кривая Безье является функцией и допустима, если координаты точек P1 и P2 по оси x обе находятся в диапазоне [0, 1].

Кубические кривые Безье, у которых ордината P1 или P2 находится за пределами диапазона [0, 1], могут привести к тому, что значение превысит конечное состояние, а затем вернётся к нему. В анимациях это создаёт эффект «отскока».

Graphs of the easing function cubic-bezier(0.3, 0.2, 0.2, 1.4), one of which shows the output progress going above 1 starting from a certain input progress, the other shows the output progress reaching and then staying at 1.

Однако некоторые свойства ограничивают выходное значение, если оно выходит за допустимый диапазон. Например, компонент цвета, превышающий 255 или меньший 0 в rgb(), будет ограничен ближайшим допустимым значением (соответственно 255 и 0). Некоторые значения cubic-bezier() ведут себя таким же образом.

Формальный синтаксис

<cubic-bezier()> = 
  cubic-bezier( [ <number [0,1]>, <number> ]#{2} )

Примеры

Эффект отскока

В этом примере красный шарик выскакивает из рамки при переходе из исходного положения. Это происходит потому, что одно из значений P2, 2.3, выходит за пределы диапазона [0, 1].

<div tabindex="0">
  <span></span>
</div>
div {
  margin: 8px auto;
  padding: 8px;
  width: 256px;
  border-radius: 40px;
  background-color: wheat;
}

span {
  display: block;
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: tomato;
}

div:hover span,
div:focus span {
  translate: 192px 0;
}
span {
  transition: translate 0.3s cubic-bezier(0.3, 0.8, 0.3, 2.3);
}

Использование функции cubic-bezier()

Эти кубические кривые Безье допустимы для использования в CSS:

/* The canonical Bézier curve with four <number> in the [0,1] range */
cubic-bezier(0.1, 0.7, 1.0, 0.1)

/* Using <integer> is valid because any <integer> is also a <number> */
cubic-bezier(0, 0, 1, 1)

/* Negative values for ordinates are valid, leading to bouncing effects */
cubic-bezier(0.1, -0.6, 0.2, 0)

/* Values greater than 1.0 for ordinates are also valid */
cubic-bezier(0, 1.1, 0.8, 4)

Эти определения кубических кривых Безье недопустимы:

/* Parameters must be numbers */
cubic-bezier(0.1, red, 1.0, green)

/* X coordinates must be in the [0, 1] range */
cubic-bezier(2.45, 0.6, 4, 0.1)

/* There must be exactly four parameters */
cubic-bezier(0.3, 2.1)

/* X coordinates must be in the [0, 1] range */
cubic-bezier(-1.9, 0.3, -0.2, 2.1)

Спецификации

Спецификация
Функции плавного перехода CSS, уровень 1
# cubic-bezier-easing-functions

Совместимость с браузерами

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
cubic-bezier
16
12
4
12.1
6
18
4
14
6
1.0
4.4
6

См. также

  • Другие функции плавного перехода: linear() и steps()
  • Модуль функций плавного перехода CSS
  • cubic-bezier.com — проект Леа Веру

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/easing-function/cubic-bezier

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API