Свойство CSS `transition-timing-function`
Базовая поддержка Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.
Свойство transition-timing-function CSS задаёт способ вычисления промежуточных значений для свойств CSS, на которые влияет эффект перехода.
Попробуйте
transition-timing-function: linear;
transition-timing-function: ease-in;
transition-timing-function: steps(6, end);
transition-timing-function: cubic-bezier(0.29, 1.01, 1, -0.68);
<section id="default-example"> <div id="example-element">Hover to see<br />the transition.</div> </section>
#example-element {
background-color: #e4f0f5;
color: black;
padding: 1rem;
border-radius: 0.5rem;
font: 1em monospace;
width: 100%;
transition: margin-right 2s;
}
#default-example:hover > #example-element {
background-color: #990099;
color: white;
margin-right: 40%;
}
По сути, это позволяет задать кривую ускорения, чтобы скорость перехода могла меняться в течение его продолжительности.
Эта кривая ускорения задаётся с помощью одной <easing-function> для каждого свойства, к которому применяется переход.
Можно указать несколько функций плавности; каждая из них будет применена к соответствующему свойству, заданному свойством transition-property, которое действует как список transition-property. Если указано меньше функций плавности, чем значений в списке transition-property, пользовательский агент должен определить используемое значение, повторяя список значений, пока для каждого свойства перехода не будет найдено значение. Если функций плавности больше, список обрезается до нужного размера. В обоих случаях объявление CSS остаётся допустимым.
Синтаксис
/* Keyword values */ transition-timing-function: ease; transition-timing-function: ease-in; transition-timing-function: ease-out; transition-timing-function: ease-in-out; transition-timing-function: linear; transition-timing-function: step-start; transition-timing-function: step-end; /* Function values */ transition-timing-function: steps(4, jump-end); transition-timing-function: cubic-bezier(0.1, 0.7, 1, 0.1); /* Steps Function keywords */ transition-timing-function: steps(4, jump-start); transition-timing-function: steps(10, jump-end); transition-timing-function: steps(20, jump-none); transition-timing-function: steps(5, jump-both); transition-timing-function: steps(6, start); transition-timing-function: steps(8, end); /* Multiple easing functions */ transition-timing-function: ease, step-start, cubic-bezier(0.1, 0.7, 1, 0.1); /* Global values */ transition-timing-function: inherit; transition-timing-function: initial; transition-timing-function: revert; transition-timing-function: revert-layer; transition-timing-function: unset;
Значения
-
<easing-function> -
Каждая
<easing-function>представляет функцию плавности, связанную с соответствующим свойством, к которому применяется переход, как указано вtransition-property.Каждое значение из ключевых слов без пошагового перехода (ease, linear, ease-in-out и т. д.) представляет собой кубическую кривую Безье с фиксированными значениями четырёх точек; функция cubic-bezier() позволяет задать произвольное значение. Пошаговые функции плавности делят входное время на заданное число равных интервалов. Они задаются количеством шагов и положением шага.
-
ease - Эквивалентно
cubic-bezier(0.25, 0.1, 0.25, 1.0), значению по умолчанию: скорость увеличивается к середине перехода, а затем снижается к его завершению. -
linear - Эквивалентно
cubic-bezier(0.0, 0.0, 1.0, 1.0): переход выполняется с постоянной скоростью. -
ease-in - Эквивалентно
cubic-bezier(0.42, 0, 1.0, 1.0): переход начинается медленно, а его скорость постепенно увеличивается до завершения. -
ease-out - Эквивалентно
cubic-bezier(0, 0, 0.58, 1.0): переход начинается быстро, а затем постепенно замедляется. -
ease-in-out - Эквивалентно
cubic-bezier(0.42, 0, 0.58, 1.0): переход начинается медленно, ускоряется, а затем снова замедляется. -
cubic-bezier(p1, p2, p3, p4) - Кубическая кривая Безье, заданная автором; значения p1 и p3 должны находиться в диапазоне от 0 до 1.
-
steps(n, <jump-term>) - Отображает переход с n остановками на протяжении перехода, показывая каждую остановку в течение одинакового промежутка времени. Например, если n равно 5, переход состоит из 5 шагов. То, будет ли переход временно останавливаться на отметках 0%, 20%, 40%, 60% и 80%, на отметках 20%, 40%, 60%, 80% и 100%, совершать 5 остановок между 0% и 100% перехода или совершать 5 остановок, включая отметки 0% и 100% (на отметках 0%, 25%, 50%, 75% и 100%), зависит от используемого термина перехода:
-
jump-start - Обозначает левосторонне-непрерывную функцию, поэтому первый скачок происходит в начале перехода;
-
jump-end - Обозначает правосторонне-непрерывную функцию, поэтому последний скачок происходит в момент завершения анимации;
-
jump-none - На обоих концах скачков нет. Вместо этого выполняется задержка на отметках 0% и 100%, каждая длительностью 1/n от общей продолжительности.
-
jump-both - Включает паузы на отметках 0% и 100%, фактически добавляя шаг во время перехода.
-
start - То же, что
jump-start. -
end - То же, что
jump-end.
-
-
step-start - Эквивалентно
steps(1, jump-start) -
step-end - Эквивалентно
steps(1, jump-end)
-
Доступность
Некоторые анимации могут быть полезны, например, чтобы помочь пользователям понять, какие действия ожидаются, показать взаимосвязи в пользовательском интерфейсе и сообщить, какие действия уже произошли. Анимации могут снижать когнитивную нагрузку, предотвращать слепоту к изменениям и улучшать запоминание пространственных взаимосвязей. Однако некоторые анимации могут создавать трудности для людей с когнитивными нарушениями, такими как синдром дефицита внимания и гиперактивности (СДВГ), а определённые виды движения могут провоцировать вестибулярные расстройства, эпилептические приступы, мигрень и скотопическую чувствительность.
Рекомендуется предусмотреть возможность приостановки или отключения анимации, а также использовать медиазапрос для уменьшения движения (или эквивалентную подсказку клиенту User Agent Sec-CH-Prefers-Reduced-Motion), чтобы обеспечить альтернативный интерфейс для пользователей, которые предпочитают меньше анимации.
Формальное определение
| Начальное значение | ease |
|---|---|
| Применяется к | всем элементам, ::before и ::after <a href="/en-US/docs/Web/CSS/Reference/Selectors/Pseudo-elements">псевдоэлементам</a> |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | Не анимируется |
Формальный синтаксис
transition-timing-function = <easing-function># <easing-function> = <linear-easing-function> | <cubic-bezier-easing-function> | <step-easing-function> <linear-easing-function> = linear | <linear()> <cubic-bezier-easing-function> = ease | ease-in | ease-out | ease-in-out | <cubic-bezier()> <step-easing-function> = step-start | step-end | <steps()> <linear()> = linear( [ <number> && <percentage>{0,2} ]# ) <cubic-bezier()> = cubic-bezier( [ <number [0,1]>, <number> ]#{2} ) <steps()> = steps( <integer>, <step-position>? ) <integer> = <number-token> <step-position> = jump-start | jump-end | jump-none | jump-both | start | end
Примеры
Примеры с кубической кривой Безье
<div class="parent"> <div class="ease">ease</div> <div class="ease-in">ease-in</div> <div class="ease-out">ease-out</div> <div class="ease-in-out">ease-in-out</div> <div class="linear">linear</div> <div class="cb">cubic-bezier(0.2,-2,0.8,2)</div> </div>
.parent {
}
.parent > div[class] {
width: 12em;
min-width: 12em;
margin-bottom: 4px;
background-color: black;
border: 1px solid red;
color: white;
transition-property: all;
transition-duration: 7s;
}
.parent > div.box1 {
width: 90vw;
min-width: 24em;
background-color: magenta;
color: yellow;
border: 1px solid orange;
transition-property: all;
transition-duration: 2s;
}
function updateTransition() {
const els = document.querySelectorAll(".parent > div[class]");
for (const el of els) {
el.classList.toggle("box1");
}
}
const intervalID = setInterval(updateTransition, 10000);
.ease {
transition-timing-function: ease;
}
.ease-in {
transition-timing-function: ease-in;
}
.ease-out {
transition-timing-function: ease-out;
}
.ease-in-out {
transition-timing-function: ease-in-out;
}
.linear {
transition-timing-function: linear;
}
.cb {
transition-timing-function: cubic-bezier(0.2, -2, 0.8, 2);
}
Примеры пошаговых переходов
<div class="parent"> <div class="jump-start">jump-start</div> <div class="jump-end">jump-end</div> <div class="jump-both">jump-both</div> <div class="jump-none">jump-none</div> <div class="step-start">step-start</div> <div class="step-end">step-end</div> </div>
.parent {
}
.parent > div[class] {
width: 12em;
min-width: 12em;
margin-bottom: 4px;
background-color: black;
border: 1px solid red;
color: white;
transition-property: all;
transition-duration: 7s;
}
.parent > div.box1 {
width: 90vw;
min-width: 24em;
background-color: magenta;
color: yellow;
border: 1px solid orange;
transition-property: all;
transition-duration: 2s;
}
function updateTransition() {
const els = document.querySelectorAll(".parent > div[class]");
for (const el of els) {
el.classList.toggle("box1");
}
}
const intervalID = setInterval(updateTransition, 10000);
.jump-start {
transition-timing-function: steps(5, jump-start);
}
.jump-end {
transition-timing-function: steps(5, jump-end);
}
.jump-none {
transition-timing-function: steps(5, jump-none);
}
.jump-both {
transition-timing-function: steps(5, jump-both);
}
.step-start {
transition-timing-function: step-start;
}
.step-end {
transition-timing-function: step-end;
}
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
transition-timing-function |
26
1
|
12
12
|
16
49
4–126
|
12.1
15
11.6–15
|
9
3.1
|
26
18
|
16
49
4–126
|
12.1
14
12–14
|
9
2
|
1.5
1.0
|
4.4
4.4
|
9
2
|
ease |
1 |
12 |
4 |
15 |
3.1 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
ease-in |
1 |
12 |
4 |
15 |
3.1 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
ease-in-out |
1 |
12 |
4 |
15 |
3.1 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
ease-out |
1 |
12 |
4 |
15 |
3.1 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
jump |
77 |
79 |
65 |
64 |
14 |
77 |
65 |
55 |
14 |
12.0 |
77 |
14 |
linear |
1 |
12 |
4 |
15 |
3.1 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
step-end |
1 |
12 |
4 |
15 |
3.1 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
step-start |
1 |
12 |
4 |
15 |
3.1 |
18 |
4 |
14 |
2 |
1.0 |
4.4 |
2 |
См. также
- Использование переходов CSS
<easing-function>- Модуль функций плавности CSS
transitiontransition-propertytransition-durationtransition-delayTransitionEvent
© 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/Properties/transition-timing-function