Переходы¶
В этом модуле вы узнаете, как определить переходы между состояниями элемента. Использование переходов позволяет повысить удобство работы пользователя, обеспечивая визуальную обратную связь при взаимодействии с ним.
CSS подкаст
044: Переходы
При взаимодействии с веб-сайтом можно заметить, что многие элементы имеют состояние. Например, выпадающие окна могут находиться в открытом или закрытом состоянии. Кнопки могут менять цвет при фокусировке или наведении. Модальные окна появляются и исчезают.
По умолчанию CSS переключает стиль этих состояний мгновенно.
Используя переходы CSS, мы можем интерполировать между начальным и целевым состоянием элемента. Переход от одного состояния к другому улучшает впечатления пользователя, обеспечивая визуальное направление, поддержку и подсказки о причине и следствии взаимодействия.
Ключевые понятия
Интерполяция — это процесс создания "промежуточных" шагов, плавно переходящих из одного состояния в другое.
Свойства переходов¶
Для использования переходов в CSS можно использовать различные свойства переходов или сокращенное свойство transition.
transition-property¶
Свойство transition-property определяет, к какому стилю (стилям) следует перейти.
1 2 3 | |
Свойство transition-property принимает одно или несколько имен CSS-свойств в виде списка, разделенного запятыми.
Опционально можно использовать transition-property: all, чтобы указать, что переход должен осуществляться для каждого свойства.
transition-duration¶
Свойство transition-duration используется для определения времени, в течение которого будет завершен переход.
transition-duration принимает единицы времени, либо секунды (s), либо миллисекунды (ms) и по умолчанию принимает значение 0s.
transition-timing-function¶
Используйте свойство transition-timing-function для изменения скорости CSS-перехода в течение transition-duration.
По умолчанию CSS переводит элементы с постоянной скоростью (transition-timing-function: linear). Однако линейные переходы могут выглядеть несколько искусственно: в реальной жизни объекты имеют вес и не могут мгновенно останавливаться и стартовать. Облегчение перехода может сделать его более живым и естественным.
В нашем модуле по CSS-анимации есть хороший обзор функций синхронизации.
Вы можете использовать DevTools для экспериментов с различными функциями синхронизации в режиме реального времени.
transition-delay¶
Свойство transition-delay используется для указания времени, через которое начнется переход. Если transition-duration не указано, то переходы будут начинаться мгновенно, так как значение по умолчанию равно 0s. Это свойство принимает единицу времени, например, секунды (s) или миллисекунды (ms).
Это свойство полезно для ступенчатых переходов, достигаемых путем установки большей transition-delay для каждого последующего элемента в группе.
Функция transition-delay также полезна для отладки. Установив отрицательное значение задержки, можно запустить переход дальше по временной шкале.
Сокращенное свойство transition¶
Как и для большинства CSS-свойств, существует сокращенный вариант. transition объединяет transition-property, transition-duration, transition-timing-function и transition-delay.
1 2 3 4 5 6 7 8 9 10 | |
Что может и что не может быть переходом?¶
При написании CSS можно указать, какие свойства должны иметь анимированные переходы. См. этот MDN-список анимируемых CSS-свойств.
В общем случае переход возможен только для тех элементов, которые могут иметь "среднее состояние" между начальным и конечным состояниями. Например, невозможно добавить переходы для font-family, поскольку неясно, как должно выглядеть "среднее состояние" между serif и monospace. С другой стороны, можно добавить переходы для font-size, поскольку его единицей является длина, которая может быть интерполирована между.
Вот некоторые общие свойства, по которым можно осуществлять переход.
Трансформация¶
CSS-свойство transform часто используется для перехода, поскольку это свойство ускоряется на GPU и обеспечивает более плавную анимацию, а также потребляет меньше энергии. Это свойство позволяет произвольно масштабировать, поворачивать, переводить или перекашивать элемент.
Ознакомьтесь с разделом о трансформациях в нашем модуле Функции.
Цвет¶
До, во время и после взаимодействия цвет может быть отличным индикатором состояния. Например, кнопка может менять цвет при наведении на нее курсора. Это изменение цвета может служить сигналом для пользователя о том, что на кнопку можно нажать.
Свойства color, background-color и border-color — это лишь несколько мест, где цвет может быть изменен при взаимодействии.
Цветовые переходы, как правило, не обязательно должны находиться за уменьшенным движением. Используйте свое лучшее суждение.
Ознакомьтесь с нашим модулем по цвету.
Тени¶
Тени часто переходят для обозначения изменения высоты, например, от фокуса пользователя.
Ознакомьтесь с нашим модулем по теням.
Фильтры¶
filter — это мощное CSS-свойство, позволяющее добавлять графические эффекты "на лету". Переход между различными состояниями filter может дать весьма впечатляющие результаты.
Ознакомьтесь с нашим модулем по фильтрам.
Триггеры переходов¶
Для активации CSS-переходов необходимо, чтобы в CSS присутствовало изменение состояния и событие, вызывающее это изменение. Типичным примером такого триггера является псевдокласс :hover. Этот псевдокласс срабатывает, когда пользователь наводит курсор на элемент.
Ниже приведен список некоторых псевдоклассов и событий, которые могут вызывать изменение состояния элементов.
:hover: совпадает, если курсор находится над элементом.:focus: соответствует, если элемент сфокусирован.:focus-within: соответствует, если элемент или любой из его потомков сфокусирован.:target: совпадает, если фрагмент текущего URL совпадает сidэлемента.:active: совпадает, когда элемент активизируется (обычно при нажатии на него мышью).- Изменение
classс помощью JavaScript: когда CSSclassэлемента изменяется с помощью JavaScript, CSS будет переходить к соответствующим свойствам, которые изменились.
Различные переходы для входа или выхода¶
Устанавливая различные свойства transition при наведении/фокусировке, можно создать несколько интересных эффектов.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Вопросы доступности¶
Переходы CSS подходят не всем. У некоторых людей переходы и анимация могут вызывать укачивание или дискомфорт. К счастью, в CSS есть медиафункция prefers-reduced-motion, которая определяет, что пользователь указал, что предпочитает меньше двигаться на своем устройстве.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Более подробную информацию об этой медиафункции см. в нашем блоге prefers-reduced-motion: Иногда меньше движения — лучше.
В модуле Изучаем доступность, посвященном анимации и движению, вы узнаете, как добавить на свой сайт восхищения, не создавая проблем для некоторых пользователей.
Вопросы производительности¶
При работе с переходами CSS могут возникнуть проблемы с производительностью, если добавить переходы для некоторых свойств CSS. Например, при изменении таких свойств, как width или height, происходит смещение содержимого на остальной части страницы. Это заставляет CSS рассчитывать новые позиции для каждого затронутого элемента для каждого кадра перехода. По возможности мы рекомендуем использовать такие свойства, как transform и opacity.
Ознакомьтесь с нашим руководством по высокопроизводительной CSS-анимации для более глубокого изучения этой темы.
Источник: Transitions

