Cubic bezier css: CSS 3 Timing Functions и с чем их едят / Хабр

Содержание

transition-timing-function | htmlbook.ru

Internet ExplorerChromeOperaSafariFirefoxAndroidiOS
10.0+4.0+26.0+10.5+12.10+3.0+4.0+16.0+4.02.0+

Краткая информация

Версии CSS

Описание

Устанавливает, насколько быстро должно изменяться значение стилевого свойство для которого применяется эффект перехода.

transition-timing-function представляет собой математическую функцию, показывающую, как быстро по времени меняется указанное через transition-property значение свойства. Начальная точка имеет координаты 0.0, 0.0, конечная — 1.0, 1.0, при этом функция по оси ординат может превышать эти значения в большую или меньшую сторону (рис. 1).

Рис. 1. Вид функции

Синтаксис

transition-timing-function: ease|ease-in|ease-out|ease-in-out|linear|step-start|step-end|steps|cubic-bezier

Значения

ease
Анимация начинается медленно, затем ускоряется и к концу движения опять замедляется. Аналогично cubic-bezier(0.25,0.1,0.25,1).
ease-in
Анимация медленно начинается, к концу ускоряется. Аналогично cubic-bezier(0.42,0,1,1).
ease-out
Анимация начинается быстро, к концу замедляется. Аналогично cubic-bezier(0,0,0.58,1).
ease-in-out
Анимация начинается и заканчивается медленно. Аналогично cubic-bezier(0.42,0,0.58,1).
linear
Одинаковая скорость от начала и до конца.
step-start
Как таковой анимации нет. Стилевые свойства сразу же принимают конечное значение.
step-end
Как таковой анимации нет. Стилевые свойства находятся в начальном значении заданное время, затем сразу же принимают конечное значение.
steps
Ступенчатая функция, имеющая заданное число шагов.

transition-timing-function: steps(<число>, start | end)

 
Здесь: <число> — целое число больше нуля; start — задаёт полунепрерывную снизу функцию; end — задаёт полунепрерывную сверху функцию.
 
cubic-bezier
Задаёт функцию движения в виде кривой Безье.

ease

ease-in

ease-out

ease-in-out

linear

step-start

step-end

steps(2, start)

Чтобы посмотреть результат действия разных значений, наведите курсор на поле ниже. Время эффект перехода установлено как 3s.

ease

ease-in

ease-out

ease-in-out

linear

step-start

step-end

steps(5, end)

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

Пример

HTML5CSS3IE 10+CrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>transition-timing-function</title>
  <style>
   .progress {
    background: #333; /* Фон */
    border: 2px solid #333; /* Рамка */
    height: 20px; /* Высота */
    position: relative; /* Относительное позиционирование */
   }
   .progress:hover::before{
    width: 100%;
   }
   .progress::before{
    transition-timing-function: linear;
    transition-duration: 5s;
    content: '';
    position: absolute; /* Абсолютное позиционирование */
    height: 100%; width: 0;
    background: #FFA600; /* Фон */
   }
  </style>
 </head>
 <body>
  <div></div>
 </body>
</html>

Объектная модель

[window. ]document.getElementById(«elementID»).style.transitionTimingFunction

Браузеры

Chrome до версии 26.0, Safari и iOS поддерживают нестандартное свойство -webkit-transition-timing-function.

Opera до версии 12.10 поддерживает нестандартное свойство -o-transition-timing-function.

Firefox до версии 16.0 поддерживает нестандартное свойство -moz-transition-timing-function.

Safari поддерживает значение steps только с версии 5.1.

Свойство animation-timing-function | CSS справочник

CSS свойства

Определение и применение

CSS свойство animation-timing-function определяет кривую скорости для анимации (используется математическая функция — кубическая кривая Безье). Кривая скорости определяет время анимации, используемое, чтобы изменить один набор стилей CSS на другой.

Обращаю Ваше внимание на то, что, как правило, удобнее использовать сокращенное обозначение свойства анимации — animation, чтобы установить все свойства анимации в одном объявлении.

Поддержка браузерами

CSS синтаксис:

animation-timing-function:"linear | ease | ease-in | ease-out | ease-in-out | step-start | step-end | steps(int, start | end) | cubic-bezier(n,n,n,n) | initial | inherit";

/* несколько значений указываются через запятую */
/* каждое значение в этом случае соответствует отдельной анимации */
animation-name:"animationName1, animationName2, animationName3";
animation-timing-function:"linear, ease, ease-in";

/* Если для конкретного кадра вам необходимо определить собственную временную функцию,
то определите её в коде этого кадра: */
@keyframes iliketomoveit {
	0%   {left: 0px;} 
	25%  {left: 400px; animation-timing-function:: linear;} 
	75%  {left: 200px;} 
	100% {left: 0px; } 
	} 

JavaScript синтаксис:

object.style.animationTimingFunction = "ease"

Значения свойства

ЗначениеОписание
easeЭффект анимации начинается медленно, затем незначительно ускоряется и в конце опять замедляется. Значение эквивалентно cubic-bezier(0.25,0.1,0.25,1). Это значение по умолчанию.
linearОпределяет эффект анимации с одинаковой скоростью от начала до конца. Значение эквивалентно cubic-bezier(0,0,1,1). Точка 1 расположена на 0 по оси x и по оси y, точка 2 — на 1 по оси x и по оси y.
ease-inОпределяет эффект анимации с медленного старта. Значение эквивалентно cubic-bezier(0.42,0,1,1).
ease-outОпределяет эффект анимации с медленным окончанием. Значение эквивалентно cubic-bezier(0,0,0.58,1).
ease-in-outОпределяет эффект анимации с медленного старта и медленным окончанием (симметричная кривая Безье). Значение эквивалентно cubic-bezier(0.42,0,0.58,1). Точка 1 расположена на 0,42 по оси x и на 0 по оси y, точка 2 — на 0,58 по оси x и на 1 по оси y.
cubic-bezier(n,n,n,n)Определяет пользовательские значения в кубической функции Безье. Она допускает 4 числовых значения от 0 до 1 ( Первые два значения — координаты x и y первой точки, а вторые два значения — координаты x и y второй точки). На данном сайте вы сможете подобрать оптимальные для Вас значения.
steps(int,start|end)Указывает пошаговую функцию, с двумя параметрами. Первый параметр задает число интервалов в функции (целое положительное число (больше 0)). Второй параметр является необязательным и имеет значения «start» или «end» и указывает точку, в которой изменение значений происходит в пределах интервала. Если второй параметр опущен, то присваивается значение «end». Значение «start» осуществляет переход в начале каждого шага, а «end» в конце каждого шага.
step-startЗначение эквивалентно steps(1, start). Свойство сразу принимает конечное значение шага в ключевом кадре.
step-endЗначение эквивалентно steps(1, end). Свойство принимает конечное значение в конце шага.
initialУстанавливает свойство в значение по умолчанию.
inheritУказывает, что значение наследуется от родительского элемента.

Версия CSS

CSS3

Наследуется

Нет.

Анимируемое

Нет.

Пример использования

<!DOCTYPE html>
<html>
<head>
	<title>Скорость анимации в CSS</title>
<style> 
div {
width: 45px; /* устанавливаем ширину блока */
height: 45px;  /* устанавливаем высоту блока */
color : white; /* устанавливаем цвет шрифта белый */
background : green; /* устанавливаем цвет заднего фона */
margin-bottom : 5px; /* устанавливаем отступ от нижнего края элемента */
position: relative;  /* элемент с относительным позиционированием */
animation-name: iliketomoveit;  /* задаём имя анимации (соответствует имени назначенному в ключевых кадрах)  */
animation-duration: 5s;  /* задаём продолжительность анимации */
animation-iteration-count: infinite;  /* указываем, что анимация будет повторяться бесконечно  */
} 
.test
{ animation-timing-function: ease; /* эффект анимации начинается медленно, затем незначительно ускоряется и в конце опять замедляется */ } . test2 { animation-timing-function: linear; /* эффект анимации с одинаковой скоростью от начала до конца */ } .test3 { animation-timing-function: ease-in; /* эффект анимации с медленного старта */ } .test4 { animation-timing-function: ease-out; /* эффект анимации с медленным окончанием */ }
.test5
{ animation-timing-function: ease-in-out; /* эффект перехода с медленным стартом и медленным окончанием */ } .test6 { animation-timing-function: cubic-bezier(.94,.06,.83,.67); /* пользовательские значения в кубической функции Безье */ } @keyframes iliketomoveit { 0% {left: 0px;} 25% {left: 400px;} 75% {left: 200px;} 100% {left: 0px;} } </style> </head> <body> <div class = "test">ease</div> <div class = "test2">linear</div> <div class = "test3">ease-in</div> <div class = "test4">ease-out</div> <div class = "test5">ease-in-out</div> <div class = "test6">cubic-bezier</div> </body> </html>
Пример использования CSS свойства animation-timing-function.

Рассмотрим пример пошаговой анимации и укажем, что на каждую часть ключевого кадра будет произведено 3 шага (начало точки ключевого кадра/конец точки ключевого кадра), либо 1 шаг (точки ключевого кадра/конец точки ключевого кадра):

<!DOCTYPE html>
<html>
<head>
<title>Пример пошаговой анимация в CSS</title>
<style> 
div {
width: 70px; /* устанавливаем ширину блока */
height: 70px;  /* устанавливаем высоту блока */
color : white; /* устанавливаем цвет шрифта белый */
background : green; /* устанавливаем цвет заднего фона */
margin-bottom : 5px; /* устанавливаем отступ от нижнего края элемента */
position: relative;  /* элемент с относительным позиционированием */
animation-name: iliketomoveit;  /* задаём имя анимации (соответствует имени назначенному в ключевых кадрах)  */
animation-duration: 5s;  /* задаём продолжительность анимации */
animation-iteration-count: infinite;  /* указываем, что анимация будет повторяться бесконечно  */
} 
.
test
{ animation-timing-function: steps(3, end); /* указывает пошаговую функцию */ } .test2 { animation-timing-function: steps(3, start); /* указывает пошаговую функцию */ } .test3 { animation-timing-function: step-start; /* указывает пошаговую функцию - эквивалент steps(1, start) */ } .test4 { animation-timing-function: step-end; /* указывает пошаговую функцию - steps(1, end) */ } @keyframes iliketomoveit { 0% {left: 0px;} 25% {left: 400px;} 75% {left: 200px;} 100% {left: 0px;} } </style> </head> <body> <div class = "test">steps(3, end)</div> <div class = "test2">steps(3, start)</div> <div class = "test3">step-start</div> <div class = "test4">step-end</div> </body> </html>
Пример использования CSS свойства animation-timing-function.CSS свойства

CSS свойство transition-timing-function

Свойство transition-timing-function определяет кривую скорости для анимации перехода.

Кривая скорости определяет время анимации использующееся для перехода от одного набора стилей к другому. Данное свойство используется, чтобы сделать изменения плавными.

В этом свойстве используется математическая функция, называемая кубической кривой Безье, чтобы сделать кривую скорости. Вы можете использовать ваши собственные значения в этой функции, или использовать одно из предопределенных значений.

Можно через запятую указывать более одного значения. Каждое новое значение применяется к соответствующему свойству в том порядке, который определён в свойстве transition-property. Если список значений меньше, чем количество свойств в transition-property, значения для оставшихся свойств начнут применяться по второму кругу. Если список значений больше, чем указано свойств, то список просто усекается до нужного количества значений.

CSS синтаксис

transition-timing-function: linear | ease | ease-in | ease-out | ease-in-out | step-start | step-end | steps(

int, start | end) | cubic-bezier(n,n,n,n) | initial | inherit;

Возможные значения

ЗначениеОписание
linearСкорость анимации одинаковая от начала и до конца. Аналогично cubic-bezier(0, 0, 1, 1).
easeЗначение по умолчанию. Анимация начинается медленно, затем ускоряется и к концу опять замедляется. Аналогично cubic-bezier(0.25,0.1,0.25,1).
ease-inАнимация медленно начинается, к концу ускоряется. Аналогично cubic-bezier(0.42,0,1,1).
ease-outАнимация начинается быстро, к концу замедляется. Аналогично cubic-bezier(0,0,0.58,1).
ease-in-outАнимация начинается и заканчивается медленно. Аналогично cubic-bezier(0.42,0,0.58,1).
step-startПлавная анимация отсутствует. Стилевые свойства сразу же принимают конечное значение. Аналогично steps(1, start).
step-endПлавная анимация отсутствует. Стилевые свойства находятся в начальном значении заданное время, затем сразу же принимают конечное значение. Аналогично steps(1, end).
steps(int, start | end)Ступенчатая функция с двумя параметрами. Первый параметр определяет количество интервалов в функции. Это должно быть положительное целое число больше 0. Второй необязательный параметр — это либо ключевое слово «start», либо «end». Этот параметр определяет точку, где происходит изменение значения внутри интервала. Если второй параметр не используется, то его значением по умолчанию будет «end».
cubic-bezier(n,n,n,n)Пользовательское определение кривой скорости в функции кубической кривой Безье. Параметрами функции могут быть числовые значения в диапазоне от 0 до 1.
inheritЗначение наследуется от родительского элемента.
initialУстанавливает значение по умолчанию.

Пример использования

Устанавливаем одинаковую скорость от начала до конца для эффекта перехода


div {
    -webkit-transition-timing-function: linear; /* Safari и Chrome */
    transition-timing-function: linear;
}

— CSS: каскадные таблицы стилей

Тип данных CSS обозначает математическую функцию, которая описывает скорость, с которой изменяется числовое значение.

Этот переход между двумя значениями может применяться в разных ситуациях. Его можно использовать для описания того, как быстро меняются значения во время анимации. Это позволяет вам изменять скорость анимации в течение ее продолжительности. Его также можно использовать для интерполяции между двумя цветами в цветовом градиенте.

Функции плавности в подмножестве функций плавности кубической кривой Безье часто называют «плавными» функциями плавности, поскольку их можно использовать для сглаживания начала и конца интерполяции. Они коррелируют коэффициент входа и коэффициент выхода, оба выражаются как <число> с. Для этих значений 0,0 представляет начальное состояние, а 1,0 представляет конечное состояние.

В зависимости от конкретной используемой функции вычисленный выход иногда может превышать 1.0 или меньше 0,0 во время анимации. Это приводит к тому, что значение уходит дальше конечного состояния, а затем возвращается. В анимации для некоторых свойств, таких как слева или справа , это создает своего рода эффект «подпрыгивания».

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

Существует три типа функций замедления: линейные, кубические кривые Безье и лестничные функции. Значение типа описывает функцию ослабления с использованием одного из этих трех типов.

Функции замедления

CSS поддерживает три вида функций замедления: линейные, подмножество кубических кривых Безье, которые являются функциями, и функции лестницы. Наиболее полезные из этих функций получают ключевое слово, позволяющее легко ссылаться на них.

Линейный класс функций ослабления
линейный

Интерполяция выполняется с постоянной скоростью от начала до конца. Это ключевое слово представляет функцию ослабления cubic-bezier (0.0, 0.0, 1.0, 1.0) .

Класс cubic-bezier () функций ослабления

Функциональная нотация cubic-bezier () определяет кубическую кривую Безье. Поскольку эти кривые являются непрерывными, они часто используются для сглаживания начала и конца интерполяции и поэтому иногда называются функциями плавности , .

Кубическая кривая Безье определяется четырьмя точками P 0 , P 1 , P 2 и P 3 . P 0 и P 3 — это начало и конец кривой, и в CSS эти точки фиксированы, поскольку координаты являются отношениями (абсцисса — отношение времени, ордината — отношение выходного диапазона). P 0 равно (0, 0) и представляет начальное время или положение и начальное состояние, P 3 равно (1, 1) и представляет конечное время или положение и конечное состояние.

Не все кубические кривые Безье подходят в качестве функций ослабления, поскольку не все являются математическими функциями; т.е. кривые, которые для данной абсциссы имеют нулевое или одно значение. При фиксированных P 0 и P 3 , как определено CSS, кубическая кривая Безье является функцией и, следовательно, действительна, если и только если абсциссы P 1 и P 2 находятся в [0, 1] диапазон.

Кубические кривые Безье с ординатой P 1 или P 2 вне диапазона [0, 1] могут генерировать , отражающие эффекты .

Когда вы указываете недопустимую кривую кубической кривой Безье , CSS игнорирует все свойство.

Синтаксис
  кубическая Безье (x1, y1, x2, y2)
  

где:

x 1 , y 1 , x 2 , y 2
<число> значений, представляющих абсциссы и ординаты точек P 1 и P 2 , определяющих кубическую кривую Безье. x 1 и x 2 должны находиться в диапазоне [0, 1], иначе значение недействительно.
Ключевые слова для обычных функций плавности кубического Безье
легкость

Интерполяция начинается медленно, резко ускоряется, а затем постепенно замедляется к концу. Это ключевое слово представляет функцию ослабления кубической кривой Безье (0,25, 0,1, 0,25, 1,0) . Он похож на easy-in-out , но вначале ускоряется более резко.

легкость в

Интерполяция начинается медленно, а затем постепенно увеличивается до конца, после чего резко останавливается.Это ключевое слово представляет функцию ослабления кубической кривой Безье (0,42, 0,0, 1,0, 1,0) .

легкость ввода-вывода

Интерполяция начинается медленно, ускоряется, а затем замедляется к концу. Это ключевое слово представляет функцию ослабления кубической кривой Безье (0,42, 0,0, 0,58, 1,0) . Вначале он ведет себя как функция easy-in ; в конце она похожа на функцию easy-out .

выдвижной

Интерполяция начинается резко, а затем постепенно замедляется к концу.Это ключевое слово представляет функцию ослабления кубической кривой Безье (0,0, 0,0, 0,58, 1,0) .

Класс steps () функций замедления

Функциональная нотация steps () определяет ступенчатую функцию, разделяющую область выходных значений на эквидистантные шаги. Этот подкласс ступенчатых функций иногда также называют ступенчатыми функциями .

Синтаксис
  шага (количество_шагов, направление)
  

где:

количество_шагов
— строго положительное <целое число> , представляющее количество равноотстоящих ступеней, составляющих ступенчатую функцию.
направление
Ключевое слово, указывающее, является ли функция непрерывной слева или справа:
  • скачок-старт обозначает непрерывную влево функцию, так что первый шаг или скачок происходит, когда начинается интерполяция;
  • конец скачка обозначает непрерывную вправо функцию, так что последний шаг или переход происходит, когда интерполяция заканчивается;
  • jump-both обозначает непрерывную функцию справа и слева, включает паузы как на отметках 0%, так и на 100%, эффективно добавляя шаг во время итерации интерполяции;
  • jump-none Нет скачка ни с одной стороны. Вместо этого, удерживая как отметку 0%, так и отметку 100%, каждая в течение 1 / n продолжительности
  • start эквивалентно скачку
  • конец эквивалентно перемычке
конец — значение по умолчанию.
шагов (n,
<направление>)
  • шага (2, запуск от внешнего источника)
    шага (2, старт)

  • шага (4, откидной)
    шаг (4, конец)

  • шага (5, без скачка)

  • шага (3, оба прыжка)

шаг-старт

Интерполяция немедленно переходит в свое конечное состояние, где остается до конца.Это ключевое слово представляет функцию замедления шага (1, скачок) или шага (1, начало) .

ступенчатая

Интерполяция остается в исходном состоянии до конца, после чего она переходит непосредственно в свое конечное состояние. Это ключевое слово представляет функцию замедления шага (1, конец скачка) или шага (1, конец) .

Сравнение функций замедления

В этом примере создается анимация, которую можно запускать и останавливать снова с помощью предоставленной кнопки, и меню выбора, которое можно использовать для переключения его функции замедления между доступными ключевыми словами, плюс пара кубических безье () и ступеней () вариантов.Идея состоит в том, чтобы обеспечить простое сравнение различных функций замедления.

HTML
  
  • <выбор> <опция> кубическая шкала Безье (0. 1, -0,6, 0,2, 0)
CSS
  body> div {
  положение: относительное;
  высота: 100 пикселей;
}

div> div {
  позиция: абсолютная;
  ширина: 50 пикселей;
  высота: 50 пикселей;
  цвет фона: синий;
  background-image: radial-gradient (круг размером 10 пикселей 10 пикселей, rgba (25,255,255,0.8), rgba (25,255,255,0,4));
  радиус границы: 50%;
  верх: 25 пикселей;
  анимация: бесконечная альтернатива 1,5 с;
}

@keyframes move-right {
  из {
    осталось: 10%;
  }

  к {
    осталось: 90%;
  }
}

li {
  дисплей: гибкий;
  align-items: center;
  justify-content: center;
  нижнее поле: 20 пикселей;
}  
JavaScript
  const selectElem = document.querySelector ('выбрать');
const startBtn = document.querySelector ('кнопка');
const divElem = document.querySelector ('div> div');

startBtn.addEventListener ('клик', () => {
  if (startBtn.textContent === 'Начать анимацию') {
    divElem.style.animationName = 'двигаться вправо';
    startBtn.textContent = 'Остановить анимацию';
    divElem.style.animationTimingFunction = selectElem.value;
  } еще {
    divElem.style.animationName = 'не задано';
    startBtn.textContent = 'Начать анимацию';
  }
});

selectElem.addEventListener ('изменить', () => {
  divElem.style.animationTimingFunction = selectElem.value;
});  
Результат

Примеры функции cubic-bezier ()

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

 
кубическая Безье (0.1, 0,7, 1,0, 0,1)


кубическая Безье (0, 0, 1, 1)


кубическая Безье (0,1, -0,6, 0,2, 0)


кубическая Безье (0, 1.1, 0.8, 4)
  

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

 
кубическая Безье (0,1, красный, 1,0, зеленый)


кубическая Безье (2,45, 0,6, 4, 0,1)


кубическая Безье (0,3, 2,1)


cubic-bezier (-1.9, 0.3, -0.2, 2.1)  

примеры функций steps ()

Эти функции замедления действительны:

 
шаги (5, конец)


шаги (2, начало)


ступеньки (2)
  
Примечание:

Если анимация содержит несколько остановок, то шаги, указанные в функции steps () , будут применяться к каждому разделу.Поэтому анимация с тремя сегментами и шагами (2) будет содержать всего 6 шагов, по 2 на сегмент.

Эти функции ослабления недействительны:

 
ступеньки (2.0, откидной конец)


шаги (-3, начало)


steps (0, jump-none)  

Таблицы BCD загружаются только в браузере

Повышение уровня анимации CSS с помощью кубической кривой Безье

Переходы и анимация вызывают фурор в веб-разработке, и это справедливо. Они потрясающие, удобные в использовании (и злоупотребления), и они могут улучшить ваши компоненты и интерфейсы переднего плана.Анатомия объявления переходов и анимации аналогична, и требуются только две вещи:

  1. В случае переходов вы выбираете свойство, которое хотите перенести. Для анимации вы выбираете блок ключевого кадра.
  2. Затем вы объявляете продолжительность анимации или перехода.

Некоторые типичные CSS могут выглядеть так:

  .box {
  непрозрачность: 0;
  переход: непрозрачность 0,3 с;
}

.Кот {
  анимация: fadeIn 0,3 с;
}

@keyframes fadeIn {
  0% {непрозрачность: 0; }
  100% {непрозрачность: 1; }
}
  

Переходы и анимация также имеют другое общее свойство, которое управляет вычислением промежуточных значений между состояниями, и это называется функцией времени перехода.Это необязательно, по умолчанию , легкость . По умолчанию нам доступны следующие временные функции:

  • легкость — немного ускоряется в середине, а затем замедляется к концу
  • easy-in — начинает медленно и ускоряется до конца
  • easy-out — быстрое начало и торможение до конца easy-in-out — начинает медленно, ускоряется до середины, затем замедляется до конца
  • linear — постоянная скорость анимации на всем протяжении
  • step-start — переход к конечному состоянию в первом кадре анимации
  • step-end — переход к конечному состоянию в последнем кадре анимации
  • шагов (n, начало | конец) — проходит через n кадров в течение анимации, «съедая» кадр либо в начале, либо в конце

При работе с простой анимацией и переходами маловероятно, что вы коснулись функций step — они больше ориентированы на анимацию в мультяшном стиле по ключевым кадрам, что является очень специфическим вариантом использования.Однако вы, вероятно, использовали множество других встроенных функций синхронизации для разумного эффекта при создании более удобных кнопок, меню, модальных окон и других компонентов с отслеживанием состояния. Вы когда-нибудь думали, что, несмотря на наведенный эффект анимации, это выглядит не совсем правильно?

Кубический Безье спешит на помощь!

Давайте немного отвлечемся. Любой, у кого есть опыт анимации, знает, что программное обеспечение, такое как Flash и After Effects, содержит массу функций замедления — easyInQuint , easyOutSine , easyInOutCubic , и это всего лишь 3 из многих.Эти функции времени недоступны для нас через ключевые слова CSS, такие как легкость и линейная . Однако важно отметить, что все этих функций, включая те, которые имеют допустимые ключевые слова в CSS, являются просто кубическими функциями Безье. Но что такое кубическая Безье? Давайте посмотрим на изображение ниже:

Это график на оси 1×1, представляющий декартову кубическую систему координат Безье. Боковое примечание: точки на этом графике могут располагаться выше и ниже 1 по оси Y (ось свойств), но не по оси X (ось времени).Серая линия представляет оси, оранжевая линия представляет кривую функции синхронизации, а синие линии и точки представляют контрольные точки и линии кривой Безье. Эти контрольные точки отвечают за формирование самой кривой и являются одной из фундаментальных концепций, лежащих в основе программного обеспечения векторной графики, такого как Adobe Illustrator.

В области анимации нам доступен особый тип кривой Безье — кубическая кривая Безье, и ее можно математически определить с помощью четырех контрольных точек на плоскости графика, показанного выше.Однако в мире CSS-анимации нас интересуют только контрольные точки p1 и p2 , и это потому, что p0 всегда будет 0, 0 и p3 всегда будет . 1, 1 . Так как же тогда определить кубическую функцию Безье в CSS? Выглядит это так:

  кубическая шкала Безье (x1, y1, x2, y2)
  

где:

  • x1 — координата x контрольной точки p1
  • y1 — координата y контрольной точки p1
  • x2 — координата x контрольной точки p2
  • y2 — координата y контрольной точки p2

Я создал приведенный выше график только в качестве демонстрации, но вы можете представить, что кубическое объявление Безье для него может выглядеть примерно так:

  кубик-безье (0.5, 0,31, 0,84, 0,05)
  

Если вы хорошо разбираетесь в числах или имеете представление о кривых Безье или функциях анимации в типичном программном обеспечении для анимации, вы можете сразу увидеть огромную мощь, которую это дает нам. Подумайте об этом так: анимация должна рассказывать историю и давать контекст и настроение состоянию, в которое мы анимируем. Если бы все анимации были линейными или обычными, все они выглядели бы одинаково и вызывали одно и то же настроение. Если после действия пользователя должно было появиться очень важное диалоговое окно, и вы действительно хотели привлечь к нему внимание, вам, вероятно, потребовалась бы настраиваемая функция времени.Кубические кривые Безье дают нам этот точный контроль.

Я не разбираюсь в числах — справка

Если вы плохо разбираетесь в числах или вам трудно представить себе, как будет выглядеть конечный результат, не бойтесь. Есть много ресурсов, которые могут вам помочь. Прежде всего, быстрый поиск в Google даст массу результатов по традиционным функциям ослабления, перенесенным в их эквиваленты кубической кривой Безье в CSS. Однако я использую два отличных ресурса:

  1. ослабления.net — Коллекция традиционных динамиков (функций синхронизации) и соответствующих им реализаций кубической кривой Безье в CSS
  2. cubic-bezier.com — игровая площадка и визуальный интерфейс для создания ваших собственных кубических функций Безье и просмотра результатов в реальном времени.

Оба отличные, и вы, вероятно, будете использовать их вместе.

Маленький пример

Давайте продемонстрируем небольшой пример для сравнения двух функций синхронизации. Ниже два синих прямоугольника одинакового размера.Когда вы нажимаете кнопку анимации, они переводят 20 бэр слева направо в течение 600 мс. В них все то же самое, кроме функций плавности. Первый берет на себя функцию easy в , которая доступна через ключевое слово CSS easy-in . Второй берет на себя функцию easy вместо , и вы можете получить кубическую функцию Безье с easings.net. Ниже результат:

Не знаю, как вы, но, на мой взгляд, вторая анимация намного более характерна! Немного больше усилий дало потрясающие результаты.

Заключение

Понимание кубических кривых Безье — одна из составляющих мастерства CSS-анимации. Их использование — другая часть. Однако всегда помните, что анимация — это не просто инструмент, и вы не должны злоупотреблять ею. Анимация — это давно практикуемое искусство, и мы должны относиться к нему с уважением и соответственно исследовать. Все функции синхронизации придают теме разные значения, и вы должны убедиться, что отправляете правильное сообщение. Кубические Безье могут в этом кардинально помочь, так что знакомьтесь.Еще раз спасибо за чтение, и если у вас есть вопросы, комментарии или отзывы, не стесняйтесь присылать мне твит.

CSS функция cubic-bezier () — javatpoint

Это встроенная функция в CSS, которая определяет кубическую кривую Безье. Кривая Безье — это математически определенная кривая, используемая в 2D-графических приложениях, таких как (Inkspace, Adobe Illustrator и т. Д.). Эта функция CSS является функцией времени перехода, которая используется для плавных и настраиваемых переходов.

Он определяется четырьмя точками (то есть P0, P1, P2 и P3). Точки P0 и P3 (называемые якорями ) являются начальной и конечной точками, а точки P1 и P2 (называемые маркерами ) являются средними точками.

Для кривых Безье CSS точки P0 и P3 всегда находятся в одном месте. P0 находится в точке (0,0), которая представляет начальное состояние и начальное время, а P3 находится в точке (1,1), которая представляет конечное состояние и конечное время. Это означает, что параметры, передаваемые в функцию cubic-bezier (), могут быть только от 0 до 1.

Синтаксис

кубическая Безье (x1, y1, x2, y2)

Эта функция CSS принимает четыре обязательных числовых значения. Значение x1 и x2 должно находиться в диапазоне от 0 до 1, иначе значение будет недействительным. Если мы передадим параметры, которых нет в этом интервале, функция установит значение по умолчанию, то есть линейный переход, который имеет значение кубической кривой Безье (0, 0, 1, 1) .

Мы можем понять эту функцию CSS, используя следующую иллюстрацию.

Пример

Эту функцию можно использовать со свойством animation-time-function и transition-time-function .

Здесь мы используем свойство transition-time-function .

функция cubic-bezier () <стиль> .jtp { ширина: 200 пикселей; высота: 50 пикселей; фон: синий; переход: ширина 3с; анимация-функция-тайминги: кубический-Безье (.59,1.01,0, 0,01) } div: hover { ширина: 300 пикселей; } п{ размер шрифта: 20 пикселей; цвет: темно-фиолетовый; }

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

Наведите указатель мыши на элемент div ниже, чтобы увидеть эффект перехода.

Проверить это сейчас

Выход


Почему важно знать CSS Cubic Bezier

Свойство перехода, присутствующее в CSS, используется для воздействия на наведение курсора на элемент, присутствующий на вашей странице.Это свойство очень важно, поскольку оно применяет к вашей странице различные эффекты, делая ее привлекательной.

Свойство перехода — это сокращенное свойство, используемое для обозначения до четырех полных свойств, связанных с переходом:

  .example {
    переход: [свойство-перехода] [длительность-перехода] [функция-времени перехода]
                [задержка перехода];
}  

Эти свойства перехода позволяют компонентам изменять оценку в течение заранее определенного срока, оживляя изменения свойств вместо того, чтобы они происходили быстро.

Вот простой прецедент, который меняет основной оттенок элемента

на: hover:

  div {
  переход: цвет фона 0,5 с легкостью;
  цвет фона: красный;
}
div: hover {
  цвет фона: зеленый;
}  

В приведенном выше примере создается эффект, подобный анимации, в котором при наведении указателя мыши на конкретный определенный

создается эффект, в котором
меняет свой цвет фона.

Вы можете указать конкретное свойство, как указано выше, или использовать значение «все» для ссылки на свойства перехода.

  div {
  переход: легкость всего 0,5 с;
  фон: красный;
  отступ: 10 пикселей;
}
div: hover {
  фон: зеленый;
  отступ: 20 пикселей;
}  

Пример выше, как и предыдущий, создает эффект, подобный анимации, где конкретный

меняет свой цвет фона, а также его отступы.

Но в этом примере и заполнение, и его фон изменяют свои свойства в течение одного и того же периода времени и задержки.

Чтобы избежать этого и применить эффекты к определенным свойствам по отдельности, вы можете разделять наборы значений запятыми для выполнения различных переходов:

  div {
  переход: фон 0.2с легкость,
              Padding 0.8s linear;
}  

Параметры функции синхронизации в CSS

Некоторые стандартные параметры функции синхронизации: легкость, легкость входа, легкость выхода, легкость выхода, линейность. Помимо этого, можно даже указать кубический безье внутри свойства функции времени.

Эти стандартные параметры подходят, но если вы хотите, чтобы ваша анимация была наилучшей, вам нужно понять свой кубический безье. Легкость анимации — хороший способ задать тон и даже выделить бренд.

Если вы не анимируете интуитивно, ваш продукт не будет «ощущаться» правильным.

Подумайте о том, как Apple добавляет блеска к своим продуктам, тщательно выбирая внешний вид их анимации.

Я увлекаюсь визуальным пространством, поэтому мне нужно было найти инструмент, чтобы я мог легко создавать эти кривые Безье. Итак, передайте привет www.cubic-bezier.com.

Этот инструмент веб-сайта помогает нам с легкостью построить кривую Безье с использованием графических представлений, а не вычислять все значения самостоятельно.Хотя свойство transition само по себе довольно полезно, но возможности его использования обширны.

Итак, продолжайте практиковаться и до следующего раза.

Вы ищете компанию по разработке мобильных приложений?

У вас есть идея приложения, которое может творить чудеса? Вам понадобится помощь компании, занимающейся разработкой приложений, и ваш поиск завершится с Terasol Technologies. Будь то Android или iOS, у нас есть опыт в обоих сегментах. Просто пролистайте наш сайт и узнайте о нашей предыдущей работе.

В чем ваша задача? Давайте решим это с помощью технологий. Свяжитесь с нами сейчас.

Экспериментируя с переходами CSS

Если вы не слышали, добавить анимацию с помощью CSS довольно просто. В наши дни для этого не нужны jQuery или Javascript.

  / *
.div {
  transition:    
}
* /

/* Пример */

.div {
  переход: 100 мс ширина 500 мс легкость;
}
  

В приведенном выше примере:

  • 500 мс — время, необходимое для завершения перехода (500 мс == 0.5с)
  • ширина — свойство, к которому мы хотим перейти
  • легкость — функция синхронизации, легкость по умолчанию, которая начинается медленно, затем быстро, а затем заканчивается медленно
  • 100 мс — время задержки перед запуском (100 мс == 0,1 с)

В DC / OS у нас есть поток для создания новой службы. В этом потоке вы можете переключиться в «Режим JSON», после чего появится текстовый редактор. Чтобы экспериментировать в команде с разными скоростями и методами, я собрал этот Codepen.

См. Эксперимент Pen CSS Transitions Experiment от Ли Манро (@leemunroe) на CodePen.

Там есть настраиваемая опция, где вы можете попробовать свои собственные временные функции и скорость, например

  • легкость выхода 400 мс
  • куб. Безье (.17, .67, .83, .67) 1000 мс
  • куб. Безье (0,05, 0,34, 0,96, 0,67) 400 мс
  • Дополнительные примеры на сайте cubic-bezier.com

Еще несколько советов по переходам CSS

Изменение определенных свойств, таких как left и margin, заставляет браузер пересчитывать стили каждый кадр.Это довольно дорого и может привести к ненужной перерисовке, особенно если на экране много элементов. Подробнее о подводных камнях от Alex Maccaw.

Вместо того, чтобы придерживаться стандартных функций синхронизации, которые могут быть «скучными», поскольку каждая анимация в этом случае выглядит одинаково, рассмотрите возможность использования пользовательского кубического безье для управления кривой движения. Больше о кубическом безье в Smashing Magazine.

От 200 мс до 500 мсек — хороший диапазон для начала анимации интерфейса.100 мс воспринимаются как мгновенные. 1 секунда — это предел. Подробнее о скорости анимации от Val Head.

Transition Timing Function — Tailwind CSS

Использование

Используйте утилиты easy- {time} для управления кривой плавности элемента.

Отзывчивый

Чтобы управлять функцией времени перехода элемента в определенной точке останова, добавьте префикс {screen}: к любой существующей утилите функции времени перехода. Например, используйте md: easy-in-out , чтобы применить утилиту easy-in-out только для средних размеров экрана и выше.

Для получения дополнительной информации о функциях адаптивного дизайна Tailwind ознакомьтесь с документацией по адаптивному дизайну.

Настройка

Значения времени

По умолчанию Tailwind предоставляет четыре универсальные служебные программы с функцией синхронизации перехода. Вы изменяете, добавляете или удаляете их, настраивая раздел transitionTimingFunction в конфигурации темы Tailwind.

 
  module.exports = {
    тема: {
      продлевать: {
        transitionTimingFunction: {
+ 'in-expo': 'кубический безье (0.95, 0,05, 0,795, 0,035) ',
+ 'out-expo': 'кубический безье (0,19, 1, 0,22, 1)',
        }
      }
    }
  }  

Дополнительные сведения о настройке темы по умолчанию см. В документации по настройке темы.

Варианты

По умолчанию для утилит функции времени перехода генерируются только ответные варианты.

Вы можете контролировать, какие варианты генерируются для утилит функции времени перехода, изменив свойство transitionTimingFunction в разделе вариантов вашего попутного ветра .config.js файл.

Например, эта конфигурация также будет генерировать варианты наведения и фокусировки:

 
  module.exports = {
    варианты: {
      продлевать: {
        
+ transitionTimingFunction: ['hover', 'focus'],
      }
    }
  }  

Если вы не планируете использовать в своем проекте утилиты функции перехода по времени, вы можете полностью отключить их, установив для свойства transitionTimingFunction значение false в разделе corePlugins вашего файла конфигурации:

 
  модуль.export = {
    corePlugins: {
      
+ transitionTimingFunction: false,
    }
  }  

Easing · React Native

Модуль Easing реализует стандартные функции замедления. Этот модуль используется Animated.timing () для передачи физически правдоподобного движения в анимации.

Вы можете найти визуализацию некоторых общих функций замедления на http://easings.net/

Предопределенные анимации #

Модуль Easing предоставляет несколько предопределенных анимаций с помощью следующих методов:

  • назад предоставляет базовая анимация, при которой объект немного уходит назад перед движением вперед
  • bounce обеспечивает анимацию отскока
  • легкость обеспечивает базовую инерционную анимацию
  • упругий обеспечивает базовое взаимодействие пружины

Стандартные функции #

Три стандартных Предоставляются функции ослабления:

Функцию poly можно использовать для реализации функций четвертой, пятой и других более высоких степеней.

Дополнительные функции #

Дополнительные математические функции предоставляются следующими методами:

  • Безье обеспечивает кубическую кривую Безье
  • круг обеспечивает круговую функцию
  • sin обеспечивает синусоидальную функцию
  • предоставляет экспоненциальную функцию

Следующие помощники используются для изменения других функций замедления.

  • в запускает функцию плавности вперед
  • inOut делает любую функцию плавности симметричной
  • out запускает функцию плавности в обратном направлении

Пример #


Методы #

4

Пошаговая функция возвращает 1 для любого положительного значения n .


step1 () #

Пошаговая функция, возвращает 1, если n больше или равно 1.


linear () #

Линейная функция, f (t) = т . Положение соотносится с истекшим временем один к одному.

http://cubic-bezier.com/#0,0,1,1


easy () #

Базовое инерционное взаимодействие, похожее на объект, медленно ускоряющийся до скорости.

http: // cubic-bezier.com / #. 42,0,1,1


quad () #

Квадратичная функция, f (t) = t * t . Позиция равна квадрату прошедшего времени.

http://easings.net/#easeInQuad


cubic () #

Кубическая функция, f (t) = t * t * t . Позиция равна кубу прошедшего времени.

http://easings.net/#easeInCubic


poly () #

Степенная функция. Положение равно N-й степени прошедшего времени.

n = 4: http://easings.net/#easeInQuart n = 5: http://easings.net/#easeInQuint


sin () #

Синусоидальная функция.

http://easings.net/#easeInSine


circle () #

Круговая функция.

http://easings.net/#easeInCirc


exp () #

Показательная функция.

http://easings.net/#easeInExpo


elastic () #

Базовое упругое взаимодействие, подобное пружине, колеблющейся вперед и назад.

По умолчанию упругость равна 1, что немного выше одного значения. 0 подпрыгивание вообще не перескакивает, а подпрыгивание N> 1 будет перескакивать примерно в N раз.

http://easings.net/#easeInElastic


back () #

Используйте с Animated.parallel () , чтобы создать базовый эффект, при котором объект слегка анимируется в начале анимации.


bounce () #

Обеспечивает базовый эффект отскока.

http: // easings.net / # easyInBounce


bezier () #

Предоставляет кубическую кривую Безье, эквивалентную функции перехода CSS Transitions.

Полезный инструмент для визуализации кубических кривых Безье можно найти по адресу http://cubic-bezier.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *