Краткая запись свойства transition
Запись всех свойств по отдельности - transition-property
, transition-duration
, transition-timing-function
- может просто утомить. По этому, все свойства, отвечающие за изменение внешнего вида элемента, можно объединить в одно свойство transition
transition: transition-property transition-duration transition-timing-function transition-delay;
Это свойство связывает все другие свойства в одно. Нужно просто перечислить через запятую свойство, продолжительность, функцию распределения скорости по времени и задержку.
Если воспользоваться значениями по умолчанию, то запись
transition: 1s;
будет эквивалентна
transition: all 1s ease 0s;
Желательно чтобы список состоял из ключевого слова all
или какого-нибудь одного CSS-свойства, а также из продолжительности, а функцию распределения скорости по времени и задержку можно не указывать. По умолчанию в качестве функции распределения задается ease-in
, а задержка не используется. То есть, если нужно просто анимировать переход всех CSS-свойств на 1 секунду, нужно написать следующий код:
transition: all 1s;
Если нужно анимировать сразу несколько CSS-свойств (но не все), можно воспользоваться их списком с запятой в качестве разделителя, где элементами будут являться разделенные пробелами свойства переходов.
transition: color 1s, background-color 1s, border-color .5s 1s;
CSS3 анимация
Переходы выполняют большую работу по созданию визуальных взаимодействий из одного состояния в другое и идеально подходят для этих видов одиночных изменений состояния. Тем не менее, когда требуется больший контроль, для переходов необходимо несколько состояний.
В CSS3 предоставляется еще один, более богатый свойствами механизм создания анимации.
В отличие от CSS3 переходов, создание анимации базируется на ключевых кадрах, которые позволяют автоматически воспроизводить и повторять эффекты на протяжении заданного времени, а также останавливать анимацию внутри цикла.
Итак, переходы в CSS являются специфическим видом анимации, где:
- есть только два состояния: начало и конец;
- анимация не зациклена;
- промежуточные состояния управляются только функцией времени.
Но что если вы хотите:
- иметь контроль над промежуточными состояниями?
- зациклить анимацию?
- сделать разные виды анимаций для одного элемента?
- анимировать определённое свойство только на половину пути?
- имитировать различные функции времени для разных свойств?
Анимация в CSS позволяет всё это, и не только.
CSS3 анимация может применяться практически для всех html-элементов, а также для псевдоэлементов :before
и :after
. При создании анимации не стоит забывать о возможных проблемах с производительностью, так как на изменение некоторых свойств требуется много ресурсов.
Анимация в CSS3 сложнее перехода, но у нее есть дополнительное преимущество в том, что ей не нужен обязательный инициатор. Наряду с тем, что анимацию можно добавить к состоянию :hover
для ее проигрывания при прохождении указателя мыши над элементом, запустить анимацию можно также при загрузке страницы.
При создании анимации первым делом создаются ключевые кадры (keyframes).
Ключевой кадр в анимации - это отдельный кадр анимации, определяющий внешний вид сцены. Предположим, первый ключевой кадр имеет изображение мяча на одной половине футбольного поля. Добавив второй ключевой кадр, можно задать конечную точку анимации, например мяч в воротах на другой половине поля. После этого веб-браузер предоставит анимацию между данными двумя ключевыми кадрами, прорисовывая все промежуточные фазы, отображающие перемещение мяча по полю на его пути к голу в воротах.
Ели вы подумали, что в переходы заложена такая же идея, то так оно и есть. В переходе определяются два стиля, а на браузер возлагается задача анимировать изменения от одного стиля к другому. В этом смысле каждый из этих стилей можно представить в качестве ключевых кадров. Но анимации в CSS3 позволяют определять множество ключевых кадров и создавать более сложные эффекты анимации: например, футбольный мяч, перемещающийся с одной стороны поля к игроку, к другому игроку, а затем в ворота.
Создание анимации проходит в два приема.
- Определение анимации. Включает определение ключевых кадров со списком
анимируемых CSS-свойств.
- Применение анимации к элементу. После определения анимации ее можно
назначить любому количеству элементов страницы. Можно даже задать для
каждого элемента разные распределения скорости выполнения, задержки и
другие свойства анимации. То есть одну и ту же анимацию на странице можно
использовать с немного разными настройками несколько раз.
Правило @keyframes
. Определение ключевых кадров
Перед применением анимации к элементам HTML, вам требуется написать анимацию с помощью ключевых кадров.
Создание анимации начинается с установки ключевых кадров правила @keyframes
. Кадры определяют, какие свойства на каком шаге будут анимированы. Каждый кадр может включать один или более блоков объявления из одного или более пар свойств и значений. Правило @keyframes
содержит имя анимации элемента, которое связывает правило и блок объявления элемента.
@keyframes myAnimation {
from {
box-shadow: 2px 2px 10px rgba(0,0,0, 0.5);
}
to {
box-shadow: 0px 0px 0px rgba(0,0,0, 1);
}
}
Ключевые кадры создаются с помощью ключевых слов from
и to
(эквивалентны значениям 0% и 100%) или с помощью процентных пунктов, которых можно задавать сколько угодно. Также можно комбинировать ключевые слова и процентные пункты.
Вы можете определить столько ключевых кадров, сколько хотите, вроде 33%, 4% или даже 29.86%. На практике вы будете писать только некоторые из них.
Если кадры имеют одинаковые свойства и значения, их можно объединить в одно объявление:
@keyframes move {
from, to {
top: 0;
left: 0;
}
25%, 75% {
top: 100%;
}
50% {
top: 50%;
}
}
animation-name
Когда определение набора ключевых кадров будет завершено, анимация будет готова к применению, и, чтобы заставить ее работать, ее нужно применить к какому-нибудь элементу страницы. Анимацию можно добавить к любому стилю любого элемента страницы.Если просто добавить анимацию к стилю,который тут же применяется к элементу, например к стилю тега h1
, анимация будет применена при загрузке страницы.
Анимацию можно применить к одному из псевдоклассов, включая :hover
, :active
, :target
или :focus
, чтобы, например, запустить анимацию при проходе указателя мыши посетителя над ссылкой или при щелчке на поле формы.
И наконец, анимацию можно применить к стилю класса, и воспользоваться кодом JavaScript для динамического применения этого класса в ответ на щелчок посетителя на кнопке или на каком-нибудь другом элементе страницы.
В CSS3 предоставляется несколько свойств, связанных с анимацией и позволяющих управлять способом и временем проигрывания анимации (а также сокращенная версия, охватывающая все отдельные свойства). Как минимум, чтобы заставить анимацию выполняться, нужно указать имя, которое было дано исходной анимации (в правиле @keyframes
), и продолжительность анимации.
@keyframes myFrame {
from { }
to { }
}
.selector {
animation-name: myFrame;
}
Подобно именам классов CSS, название анимации может включать в себя только: буквы (a-z), цифры (0-9), подчёркивание (_), дефис (-). Название не может начинаться с цифры или с дефисов.
animation-duration
Свойство animation-name
просто сообщает браузеру, какую анимацию нужно применить, а свойство animation-duration
устанавливает продолжительность анимации, задаётся в секундах или миллисекундах, отрицательные значения не допустимы. Не наследуется. Если для элемента задано более одной анимации, то можно установить разное время для каждой, перечислив значения через запятую.
.selector {
animation-duration: 10s;
}
Простой пример анимации →
Длительность анимации задается в секундах s
или миллисекундах ms
animation-timing-function
Как и в случае с переходами, можно указывать функцию распределения скорости анимации по времени animation-timing-function
, которая управляет этой скоростью на заданном времени продолжительности анимации.
Свойство определяет изменение скорости от начала до конца анимации с помощью временных функций. Задаётся при помощи ключевых слов или кривой Безье cubic-bezier(x1, y1, x2, y2). Не наследуется.
Например, анимацию можно начинать медленно и завершать быстро, используя для этого кубическую кривую Безье или одно из встроенных ключевых слов, определяющих метод: linear, ease, ease-in, ease-out, ease-in-out. Все это работает точно так же, как и в ранее рассмотренном случае с переходами.
Но так же доступны и следующие временые функции:
step-start
- задаёт пошаговую анимацию, разбивая анимацию на отрезки, изменения происходят в начале каждого шага. Эквивалентно steps(1, start)
.
step-end
- пошаговая анимация, изменения происходят в конце каждого шага. Эквивалентно steps(1, end).
steps(количество шагов,start|end)
Ступенчатая временная функция, которая принимает два параметра. Количество шагов задается целым положительным числом. Второй параметр необязательный, указывает момент, в котором начинается анимация. Со значением start
анимация начинается в начале каждого шага, со значением end
— в конце каждого шага с задержкой. Задержка вычисляется как результат деления времени анимации на количество шагов. Если второй параметр не указан, используется значение по умолчанию end.
Пример анимации с использованием функции steps
→
animation-iteration-count
С помощью CSSможно контролировать еще несколько аспектов анимации, включая ее повторение, направление ее выполнения, если она выполняется более одного раза, а также порядка форматирования браузером элемента по завершении анимации.
Переходы являются анимациями, выполняемыми однократно, например указатель мыши проходит над кнопкой и она увеличивается в размерах. А вот анимации благодаря свойству animation-iteration-count
могут запускаться один, два и более раза или непрерывно.
.selector {
animation-iteration-count: 3;
}
Свойство animation-iteration-count
позволяет запустить анимацию несколько раз. Значение 0 или любое отрицательное число удаляют анимацию из проигрывания. Не наследуется.
С помощью целого числа задается количество повторов анимации. Значение по умолчанию 1. Дробные значения больше 1 будут воспроизводить анимацию, обрезая её на части следующей итерации.
Если указать в качестве заначение ключевое слово infinite
, то анимация будет проигрывается бесконечно.
animation-direction
Свойство задает направление повтора анимации. Если анимация повторяется только один раз, то это свойство не имеет смысла. Не наследуется.
Свойство animation-direction
определяет, в каком порядке читаются ключевые кадры.
normal
- Значение по умолчанию, анимация проигрывается в обычном направлении, с начала и до конца.
reverse
- Анимация проигрывается с конца.
alternate
- Анимация проигрывается с начала до конца, затем в обратном направлении.
alternate-reverse
- Анимация проигрывается с конца до начала, затем в обратном направлении.
Краткая запись
Все параметры воспроизведения анимации можно объединить в одном свойстве - animation
, перечислив их через пробел:
animation: animation-name
animation-duration
animation-timing-function
animation-delay
animation-iteration-count
animation-direction;
Для воспроизведения анимации достаточно указать только два свойства - animation-name
и animation-duration
, остальные свойства примут значения по умолчанию. Порядок перечисления свойств не имеет значения, единственное, время выполнения анимации animation-duration
обязательно должно стоять перед задержкой animation-delay
.
Множественные анимации
Можно задавать несколько анимаций, перечислив их названия через запятую:
animation: move .3s, back 4s steps(10, start) infinite;