Переходы
Длительность перехода, transition-duration[1/29]
Плавные переходы в CSS или transitions позволяют изменять значения свойств постепенно, «с нежностью».
Обычно эффект от изменения значений CSS-свойств виден мгновенно, но с помощью плавных переходов можно изменить это поведение и сделать процесс изменения значений достаточно длительным.
В отличие от анимаций, которые позволяют управлять любым количеством промежуточных состояний, с помощью transitions можно управлять только переходом между двумя состояниями: начальным и конечным.
Чтобы обозначить плавный переход в CSS, достаточно задать одно свойство:transition-duration— длительность перехода. Значения задаются в секундах (10s,3s), долях секунды (0.1s,0.03s) или миллисекундах (100ms,333ms).
Рассмотрим плавный переход на простом примере с кнопкой, у которой по нажатию меняется цвет. Начальное состояние описано в классе.btn, а конечное — в классе.btn-active.
Достаточно вот такого кода, для плавности вкл и выкл кнопки:
.btn {
background-color: #ffffff;
transition-duration: 1s;
}
.btn-active {
background-color: #ff5252;
}
Достаточно только в одном месте (селекторе .btn) определить свойства transition!!!!
Длительность перехода, шаг 2[2/29]
Плавные переходы и анимацию можно применить только к некоторым CSS-свойствам. В основном это свойства, изменяющие размер, цвет, позицию элементов. В статье на MDNприведен перечень анимируемых свойств и характер их анимирования.
Если задана только длительность переходаtransition-duration, то по умолчанию плавное изменение затрагивает все свойства элемента и для всех свойств происходит одновременно.
Давайте попробуем задать кнопке ещё несколько свойств и посмотрим, как они будут изменяться.
В этом и следующих примерах используются CSS-трансформации, которые подробно разбираются в курсе «Двумерные трансформации».
transition-property: какие свойства изменять плавно?[3/29]
По умолчанию плавный переход действует на все анимируемые свойства элемента. Такое поведение соответствует значениюallсвойстваtransition-property, это значение по умолчанию.
Такое поведение часто нежелательно, особенно когда в правиле много свойств.
Можно указать, какие именно свойства нужно изменять плавно, перечислив их в transition-propertyчерез запятую:
transition-property: width; // плавно меняется только ширина
transition-property: width, height; // плавно меняются только ширина и высота
При этом так же через запятую можно задавать переходам разных свойств разную длительность:
transition-property: width, height;
transition-duration: 1s, 5s; // ширина меняется за 1 секунду, высота за 5
Попробуем применить описанное свойство на практике. В этом примере у кнопки анимируются свойстваbackground-color,transformиfont-size.
Задержка перехода, transition-delay[4/29]
Ещё одно свойство переходов —transition-delay. Оно определяет задержку перед началом перехода и задаётся в секундах или миллисекундах, как иtransition-duration.
«Форма» перехода, transition-timing-function[5/29]
Ещё одно свойство, влияющее на переход —transition-timing-function. Это свойство аналогично свойствуanimation-timing-function, которое разбирается в курсе по анимациям. Свойствоtransition-timing-functionопределяет с какой скоростью и ускорением будут меняться свойства во время перехода.
В предыдущих примерах переходы происходили с одинаковой динамикой. Мы меняли длительность и задержку перехода, но не «форму». Эта «форма» по умолчанию соответствует первому графику, из которого видно, что переход начинается медленно, затем ускоряется и к концу движения опять замедляется.
Так ведёт себя значениеeaseсвойстваtransition-timing-function.
ease
linear
Чтобы сделать переход равномерным, без ускорений и замедлений, используется значениеlinear. «Форма» линейного перехода приведена на втором графике.
transition-timing-function, шаг 2[6/29]
Вот ещё несколько форм переходов:ease-in,ease-outиease-in-out.
ease-in
ease-out
ease-in-out
Из графиков видно, что при значенииease-inпереход медленно начинается, а к концу ускоряется; приease-out— начинается быстро, а к концу замедляется. Значениеease-in-outпохоже наease, то есть переход начинается и заканчивается медленно, но происходит это чуть-чуть интенсивнее.
Испробуем эти значения свойстваtransition-timing-function.
transition-timing-function, шаг 3[7/29]
Названияlinear,ease,ease-inи другие — это «псевдонимы» функций кубическихкривых Безье:
cubic-bezier(0, 0, 1, 1) // это linear
cubic-bezier(0.42, 0, 1, 1) // это ease
В общем представленииcubic-bezier(x1, y1, x2, y2)значенияxиy— это координаты точек кривых на графике. При этом верным считается значениеxтолько в диапазоне от0до1.
Существуетотличный сервис, помогающий разобраться в функциональном представлении кривых Безье без необходимости штудировать учебники по математике.
А вот по этойссылкеможно найти целую коллекцию разных easing-функций на основе кривых Безье.
C помощью функцииcubic-bezierмы можем задавать любые формы переходов.
transition-timing-function, шаг 4[8/29]
Ещё один возможный класс значенийtransition-timing-function— этоsteps.
Они позволяют задать «ступеньки», по которым будет идти переход. Синтаксисstepsследующий:
transition-timing-function: steps(
число_шагов
,
направление
);
Тут всё просто:число\шагов — это целое число, за которое будет выполнен переход;направление_может принимать значениеstartилиend.
При заданномstartпервый шаг выполняется одновременно с началом перехода, а в случае cendпоследний шаг будет выполнен вместе с завершением перехода.
Кстати, переход можно описать в сокращенном виде свойствомtransition. Параметры перехода просто перечисляются через пробел: свойство, длительность, форма и задержка:
transition: width 1s ease-in 2s;
К примеру, переход тут применяется к ширине элемента, будет длиться 1 секунду с формой ease-in и задержкой перед началом в 2 секунды.
Описание перехода для квадрата.squareв этом задании мы тоже перевели в короткую форму.