Анимации¶
Анимация — это отличный способ выделить интерактивные элементы и придать дизайну интерес и увлекательность. В этом модуле вы узнаете, как добавлять и управлять эффектами анимации с помощью CSS.
CSS подкаст
022: Анимации
Иногда на интерфейсах встречаются маленькие помощники, которые при нажатии на них предоставляют полезную информацию о конкретном разделе. Часто они имеют пульсирующую анимацию, чтобы ненавязчиво дать понять, что информация здесь и с ней нужно взаимодействовать. Но как это сделать с помощью CSS?
В CSS такой тип анимации можно реализовать с помощью CSS-анимации, которая позволяет задать последовательность анимации, используя ключевые кадры. Анимация может быть простой, состоящей из одного состояния, или даже сложной, основанной на времени.
Что такое ключевой кадр?¶
В программах анимации, CSS и большинстве других инструментов, позволяющих анимировать что-либо, ключевые кадры — это механизм, который используется для назначения состояний анимации временным меткам, расположенным на временной шкале.
Давайте рассмотрим "пульсатор" в качестве контекста. Вся анимация длится 1 секунду и состоит из 2 состояний.
Существует определенная точка, в которой начинается и заканчивается каждое из этих состояний анимации. Они обозначаются на временной шкале с помощью ключевых кадров.
@keyframes¶
Теперь вы знаете, что такое ключевой кадр, и это знание должно помочь вам понять, как работает правило CSS @keyframes. Здесь представлено базовое правило с двумя состояниями.
1 2 3 4 5 6 7 8 | |
Первая часть, на которую следует обратить внимание, — это custom ident (пользовательский идентификатор), или, говоря более человеческим языком, название правила ключевых кадров. Идентификатор этого правила — my-animation. Пользовательский идентификатор работает как имя функции. Это, как вы узнали из модуля Функции, позволяет ссылаться на правило ключевых кадров в других местах вашего CSS-кода.
Идентификатор <custom-ident> используется в различных местах CSS и позволяет задать собственное имя для объектов. Эти идентификаторы чувствительны к регистру, и в некоторых случаях есть слова, которые нельзя использовать. Например, при именовании строк в CSS Grid нельзя использовать слово span.
Внутри правила ключевых кадров from и to — это ключевые слова, обозначающие 0% и 100%, которые являются началом и концом анимации. Можно переделать это правило следующим образом:
1 2 3 4 5 6 7 8 | |
Можно добавить сколько угодно позиций на таймфрейме. В контексте примера с "пульсатором" имеется 2 состояния, которые соответствуют 2 ключевым кадрам. Это означает, что внутри правила ключевых кадров у вас есть 2 позиции для представления изменений для каждого из этих ключевых кадров.
1 2 3 4 5 6 7 8 9 | |
Свойства animation¶
Чтобы использовать свои @keyframes в CSS-правилах, определите различные свойства анимации или используйте сокращенное свойство animation.
animation-duration¶
1 2 3 | |
Свойство animation-duration определяет, насколько длинной должна быть временная шкала @keyframes. Это должно быть значение времени. По умолчанию оно равно 0 секунд, т. е. анимация будет продолжаться, но будет слишком быстрой для восприятия. Отрицательные значения времени добавлять нельзя.
animation-timing-function¶
Для воссоздания естественного движения в анимации можно использовать функции синхронизации, которые рассчитывают скорость анимации в каждой точке. Вычисляемые значения часто бывают кривыми, заставляя анимацию работать с переменной скоростью в течение animation-duration, а если вычисляемое значение превышает значение, заданное в @keyframes, то элемент кажется подпрыгивающим.
В CSS существует несколько ключевых слов, доступных в виде предустановок, которые используются в качестве значения для animation-timing-function: linear, ease, ease-in, ease-out, ease-in-out.
1 2 3 | |
Значения выглядят кривыми при использовании функций ослабления, поскольку ослабление рассчитывается с помощью кривой Безье, которая используется для моделирования скорости. Каждое из ключевых слов функции смягчения, например ease, ссылается на заранее определенную кривую Безье. В CSS кривую Безье можно задать напрямую, используя функцию cubic-bezier(), которая принимает четыре числовых значения: x1, y1, x2, y2.
1 2 3 4 5 6 7 8 | |
Эти значения строят график каждой части кривой по осям X и Y.
Понимание кривых Безье довольно сложно, поэтому очень полезны визуальные инструменты, такие как этот генератор от Lea Verou.
Функция смягчения steps¶
Иногда требуется более детальный контроль над анимацией, и вместо движения по кривой требуется перемещение по интервалам. Функция ослабления steps() позволяет разбить временную шкалу на определенные, равные интервалы.
1 2 3 | |
Первый аргумент — количество шагов. Если шаги определены как 10 и имеется 10 ключевых кадров, то каждый ключевой кадр будет воспроизводиться последовательно в течение точного количества времени, без перехода между состояниями. Если ключевых кадров для шагов недостаточно, то в зависимости от второго аргумента добавляются шаги между ключевыми кадрами.
Второй аргумент — это направление. Если он установлен в end, что является значением по умолчанию, то шаги завершаются в конце временной шкалы. Если же он имеет значение start, то первый шаг анимации завершается сразу после начала, то есть заканчивается на один шаг раньше, чем end.
animation-iteration-count¶
1 2 3 | |
Свойство animation-iteration-count определяет, сколько раз должна выполняться временная шкала @keyframes. По умолчанию это значение равно 1, что означает, что когда анимация достигнет конца временной шкалы, она остановится в конце. Число не может быть отрицательным.
Вы можете использовать ключевое слово infinite, которое зацикливает анимацию, как это делает демонстрация "пульсатора" из начала этого урока.
animation-direction¶
1 2 3 | |
С помощью параметра animation-direction можно задать направление движения временной шкалы по ключевым кадрам:
normal: значение по умолчанию — вперед.reverse: движение по временной шкале в обратном направлении.alternate: для каждой итерации анимации временная шкала будет последовательно двигаться вперед или назад.alternate-reverse: обратный вариантalternate.
animation-delay¶
1 2 3 | |
Свойство animation-delay определяет время ожидания перед началом анимации. Как и свойство animation-duration, оно принимает значение времени.
В отличие от свойства animation-duration, вы можете задать его как отрицательное значение. Если задать отрицательное значение, то временная шкала в @keyframes будет начинаться с этого момента. Например, если длительность анимации составляет 10 секунд, а для animation-delay задано значение -5s, то она начнется с половины временной шкалы.
animation-play-state¶
1 2 3 | |
Свойство animation-play-state позволяет воспроизводить и приостанавливать анимацию. По умолчанию используется значение running, а если установить значение paused, то это приведет к приостановке анимации.
animation-fill-mode¶
Свойство animation-fill-mode определяет, какие значения на временной шкале @keyframes сохраняются до начала анимации или после ее окончания. По умолчанию используется значение none, что означает, что после завершения анимации значения на временной шкале будут удалены. Другими опциями являются:
forwards: Сохраняется последний ключевой кадр в зависимости от направления анимации.backwards: Сохраняется первый ключевой кадр в соответствии с направлением анимации.both: следует правилам как дляforwards, так и дляbackwards.
Короткое обозначение animation¶
Вместо того чтобы определять все свойства по отдельности, можно задать их в скороговорке animation, которая позволяет определять свойства анимации в следующем порядке:
animation-nameanimation-durationanimation-timing-functionanimation-delayanimation-iteration-countanimation-directionanimation-fill-modeanimation-play-state
1 2 3 4 | |
Особенности работы с анимацией¶
Пользователи могут указать в своей операционной системе, что при работе с приложениями и веб-сайтами они предпочитают уменьшать количество движений. Это предпочтение можно определить с помощью медиазапроса prefers-reduced-motion.
1 2 3 4 5 | |
Не обязательно, чтобы анимация отсутствовала, скорее, лучше сократить количество анимаций — особенно неожиданных. Подробнее об этом предпочтении и общей производительности можно узнать из этого руководства по анимации.
Источник — Animations