В предыдущей главе мы разобрали, как создавать простые анимации, такие как переход из одного состояния в другое с помощью CSS3-функции transition. Тем не менее, переходы CSS3 обеспечивают небольшой контроль над тем, как анимация прогрессирует с течением времени.
CSS3-анимации делают на основе ключевых кадров (@keyframes), которые позволяют указывать изменения CSS-свойств с течением времени. Создание CSS-анимации представляет собой двухэтапный процесс:
- Первым шагом построения CSS-анимации является определение отдельных ключевых кадров и присвоение им названия с объявлением ключевых кадров.
- Вторым шагом является обращение к ключевым кадрам по имени с использованием свойства
animation-name, а также добавление продолжительности анимацииanimation-durationи других необязательных свойств анимации для управления ее поведением.
Однако порядок их объявления не важен. В следующем примере показано, как анимировать блок <div> по горизонтали из одной позиции в другую, используя функцию CSS3-анимации.
.box {
width: 50px;
height: 50px;
background: red;
position: relative;
/* Chrome, Safari, Opera */
-webkit-animation-name: moveit;
-webkit-animation-duration: 2s;
/* Standard syntax */
animation-name: moveit;
animation-duration: 2s;
}
/* Chrome, Safari, Opera */
@-webkit-keyframes moveit {
from {left: 0;}
to {left: 50%;}
}
/* Standard syntax */
@keyframes moveit {
from {left: 0;}
to {left: 50%;}
}
Вы должны указать как минимум два свойства animation-name и animation-duration (больше 0), чтобы анимация работала. Все остальные свойства анимации являются необязательными, так как их значения по умолчанию не предотвращают анимацию.
Не все CSS-свойства являются анимируемыми. Как правило, любое CSS-свойство, которое принимает значения в виде чисел, длин, процентов или цветов, является анимируемым.
Список всех анимируемых свойств есть в Списки анимируемых свойств в CSS.
Определение ключевых кадров keyframes
Ключевые кадры используются для указания значений свойств анимации на разных этапах анимации. Ключевые кадры указываются с использованием специального CSS-правила — @keyframes.
Селектор ключевого кадра для правила ключевого кадра начинается с процента (%) или ключевого слова from (0%) до to (100%). 0% представляет начальную точку анимации, 100% представляет конечную точку, 50% представляет среднюю точку и т. д.
.box {
width: 50px;
height: 50px;
margin: 100px;
background: red;
position: relative;
left: 0;
/* Chrome, Safari, Opera */
-webkit-animation-name: shakeit;
-webkit-animation-duration: 2s;
/* Standard syntax */
animation-name: shakeit;
animation-duration: 2s;
}
/* Chrome, Safari, Opera */
@-webkit-keyframes shakeit {
12.5% {left: -50px;}
25% {left: 50px;}
37.5% {left: -25px;}
50% {left: 25px;}
62.5% {left: -10px;}
75% {left: 10px;}
}
/* Standard syntax */
@keyframes shakeit {
12.5% {left: -50px;}
25% {left: 50px;}
37.5% {left: -25px;}
50% {left: 25px;}
62.5% {left: -10px;}
75% {left: 10px;}
}
Сокращенное свойство animation
Есть много свойств, которые следует учитывать при создании анимации. Однако также возможно указать все свойства анимации в одном отдельном свойстве, чтобы сократить код.
CSS-свойство animation является сокращенным свойством для animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode и animation-play-state.
.box {
width: 50px;
height: 50px;
background: red;
position: relative;
/* Chrome, Safari, Opera */
-webkit-animation: repeatit 2s linear 0s infinite alternate;
/* Standard syntax */
animation: repeatit 2s linear 0s infinite alternate;
}
/* Chrome, Safari, Opera */
@-webkit-keyframes repeatit {
from {left: 0;}
to {left: 50%;}
}
/* Standard syntax */
@keyframes repeatit {
from {left: 0;}
to {left: 50%;}
}
Если какое-либо значение отсутствует или не указано, вместо него будет использоваться значение по умолчанию для этого свойства. Это означает, что если значение свойства animation-duration отсутствует, переход не произойдет, поскольку его значение по умолчанию равно 0.
Свойства анимации CSS3
В следующей таблице приведен краткий обзор всех свойств, связанных с анимацией.
| Значение | Описание |
|---|---|
animation |
Сокращенное свойство для установки всех свойств анимации в одном объявлении. |
animation-name |
Задает имя анимации, определенной @keyframes, которая должна применяться к выбранному элементу. |
animation-duration |
Определяет, сколько секунд или миллисекунд требуется анимации для завершения одного цикла анимации. |
animation-timing-function |
Определяет, как анимация будет развиваться в течение каждого цикла, то есть функции замедления. |
animation-delay |
Определяет задержку перед началом анимации. |
animation-iteration-count |
Определяет, сколько раз цикл анимации должен быть воспроизведен перед остановкой. |
animation-direction |
Определяет, должна ли анимация воспроизводиться в обратном порядке при чередующихся циклах. |
animation-fill-mode |
Определяет, как CSS-анимация должна применять стили к своей цели до и после ее выполнения. |
animation-play-state |
Указывает, запущена ли анимация или приостановлена. |
@keyframes |
Указывает значения для свойств анимации в различных точках во время анимации. |















