Свойство animation в CSS
Learn about CSS animation property which is used to animate (gradually change from one style to another) CSS properties with discrete values. See examples.
Свойство animation используется для анимации (постепенного изменения одного стиля на другой) CSS-свойств с непрерывными значениями: свойств макета (border, height, width и т. д.), свойств, определяющих положение (left, top), размеров шрифта, цветов и прозрачности.
Свойство animation является одним из CSS3 properties.
В устаревших браузерах для поддержки старых версий может потребоваться префикс -webkit-.
info
Свойства, которые используют ключевое слово в качестве значения, например
display: none;илиvisibility: hidden;, не могут быть анимированы. Свойства со значениями вродеheight: auto;также не могут быть анимированы.
Правило @keyframes
Чтобы использовать анимацию, сначала нужно указать, что должно происходить в определённые моменты анимации. Это задаётся с помощью правила @keyframes.
Правило @keyframes состоит из ключевого слова “@keyframes”, за которым следует animation-name, идентифицирующее анимацию. Затем анимация применяется к элементу с помощью этого идентификатора в качестве значения свойства animation-name.
В фигурных скобках мы задаём селекторы ключевых кадров, которые определяют ключевые кадры (или контрольные точки) в последовательности анимации, когда стили должны быть изменены. Селектор ключевого кадра может начинаться с процента (%) или с ключевых слов “from” (то же самое, что 0%) и “to” (то же самое, что 100%). 0% — это начальная точка анимации, 100% — конечная точка.
Пример анимации с правилом @keyframe:
Пример свойства animation с @keyframes
<!DOCTYPE html>
<html>
<head>
<style>
.element {
padding: 50px;
animation: pulse 4s infinite;
}
@keyframes pulse {
0% {
background-color: #8ebf42;
}
50% {
background-color: #1c87c9;
}
100% {
background-color: #d5dce8;
}
}
</style>
</head>
<body>
<div class="element">Background of this text is animated using CSS3 animation property.</div>
</body>
</html>В этом примере мы привязываем анимацию к элементу <div>. Анимация будет длиться 4 секунды и постепенно изменит цвет фона элемента <div> с "green" на "grey".
Свойства, связанные с анимацией
Animation — это сокращённое свойство, которое используется для задания всех свойств анимации в одном объявлении. Ниже мы перечисляем все стандартные свойства, связанные с анимацией.
Теперь посмотрим на свойства, связанные с анимацией, в действии.
Пример анимации с некоторыми свойствами, связанными с анимацией:
Пример анимации с некоторыми свойствами, связанными с анимацией:
@keyframes pulse {
/* declare animation actions here */
}
.element {
animation-name: pulse;
animation-duration: 3.5s;
animation-timing-function: ease-in;
animation-delay: 1s;
animation-direction: alternate;
animation-iteration-count: infinite;
animation-fill-mode: none;
animation-play-state: running;
}
/*
The same can be declared using the animation shorthand property
*/
.element {
animation: pulse 3.5s ease-in 1s alternate infinite none running;
}Animation-name
Это свойство определяет имя правила @keyframes, которое вы хотите применить.
Синтаксис свойства animation-name
animation-name: keyframe-name | none | initial | inheritПример свойства animation-name:
Пример свойства animation-name
<!DOCTYPE html>
<html>
<head>
<style>
div {
padding: 50px;
animation: element 4s infinite;
}
@keyframes element {
0% {
background-color: #8ebf42;
}
50% {
background-color: #1c87c9;
}
100% {
background-color: #d5dce8;
}
}
</style>
</head>
<body>
<h2>Пример animation-name</h2>
<div>Имя анимации задано как "element".</div>
</body>
</html>Animation-duration
Оно определяет продолжительность времени (в секундах или миллисекундах), за которое анимация завершает один цикл. Если это свойство не указано, анимация не будет выполняться.
Синтаксис свойства animation-duration
animation-duration: time | initial | inheritПример свойства animation-duration:
Пример свойства animation-duration
<!DOCTYPE html>
<html>
<head>
<style>
.element {
padding: 50px;
animation: pulse 7s infinite;
}
@keyframes pulse {
0% {
background-color: #8ebf42;
}
50% {
background-color: #1c87c9;
}
100% {
background-color: #eee
}
}
</style>
</head>
<body>
<div class="element">Background of this text is animated using CSS3 animation property</div>
</body>
</html>Animation-timing-function
Это свойство определяет, как анимация будет изменяться в течение длительности каждого цикла — а не на протяжении всей анимации.
Синтаксис свойства animation-timing-function
animation-timing-function: linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier(n,n,n,n) | initial | inheritПример свойства animation-timing-function со значением “ease”:
Пример свойства animation-timing-function со значением “ease”:
<!DOCTYPE html>
<html>
<head>
<title>The title of the document</title>
<style>
div {
width: 100px;
height: 100px;
border-radius: 50%;
background: #1c87c9;
position: relative;
-webkit-animation: element 5s infinite;
/* Safari 4.0 - 8.0 */
-webkit-animation-timing-function: ease;
/* Safari 4.0 - 8.0 */
animation: element 5s infinite;
animation-timing-function: ease;
}
/* Safari 4.0 - 8.0 */
@-webkit-keyframes element {
from {
left: 0px;
}
to {
left: 200px;
}
}
@keyframes element {
from {
left: 0px;
}
to {
left: 200px;
}
}
</style>
</head>
<body>
<h2>Пример animation-timing-function</h2>
<div></div>
</body>
</html>Animation-delay
Это свойство задаёт время (в секундах или миллисекундах) между загрузкой элемента и началом анимации.
Синтаксис свойства animation-delay
animation-delay: time | initial | inheritПример свойства animation-delay:
Пример свойства CSS animation-delay
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 120px;
height: 120px;
background: #1c87c9;
position: relative;
animation: delay 5s infinite;
animation-delay: 3s;
}
@keyframes delay {
from {
left: 0px;
}
to {
left: 300px;
}
}
</style>
</head>
<body>
<h2>Пример animation-delay</h2>
<p>Здесь анимация начинается через 3 секунды.</p>
<div></div>
</body>
</html>Animation-direction
Это свойство определяет, должна ли анимация воспроизводиться в обратном направлении в чередующихся циклах или нет.
Синтаксис свойства animation-direction
animation-direction: normal | reverse | alternate | alternate-reverse | initial | inheritМожно использовать следующие значения:
- normal — (по умолчанию) анимация воспроизводится вперёд (ключевые кадры 0% - 100%)
- reverse — анимация воспроизводится назад (ключевые кадры 100% - 0%)
- alternate — анимация воспроизводится вперёд, затем в обратном направлении и повторяется.
- alternate-reverse — анимация воспроизводится назад, затем вперёд.
Пример свойства animation-direction:
Пример свойства animation-direction:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 120px;
height: 120px;
background: #ccc;
position: relative;
animation: myfirst 5s 1;
animation-direction: normal;
}
@keyframes myfirst {
0% {
background: #8DC3CF;
left: 0px;
top: 0px;
}
25% {
background: #1c87c9;
left: 200px;
top: 0px;
}
50% {
background: #030E10;
left: 200px;
top: 200px;
}
75% {
background: #666;
left: 0px;
top: 200px;
}
100% {
background: #8ebf42;
left: 0px;
top: 0px;
}
}
</style>
</head>
<body>
<h2>Пример animation-direction</h2>
<p>Здесь анимация воспроизводится вперёд.</p>
<div></div>
</body>
</html>Animation-iteration-count
Задаёт количество раз, которое цикл анимации должен быть воспроизведён перед остановкой. Значение по умолчанию — один, но можно задать любое положительное целое число. Если задать ключевое слово infinite, анимация будет воспроизводиться бесконечно.
warning
Нулевое или отрицательное целое число никогда не запустит анимацию.
Синтаксис свойства animation-iteration-count
animation-iteration-count: number | infinite | initial | inheritПример свойства animation-iteration-count:
Пример свойства CSS <span class="property">animation-iteration-count</span>:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
html,
body {
margin: 0;
padding: 0;
}
div {
position: relative;
width: 100px;
height: 100px;
margin: 30px 0;
border-radius: 50%;
animation-name: pulse;
}
.element-one {
background-color: #1c87c9;
animation-duration: 3s;
animation-iteration-count: 3;
}
.element-two {
margin: 0;
background-color: #83bf42;
animation-duration: 5s;
animation-iteration-count: 2;
}
@keyframes pulse {
0% {
left: 0;
}
50% {
left: 50%;
}
100% {
left: 0;
}
}
</style>
</head>
<body>
<h2>Пример animation-iteration-count</h2>
<p>Свойство animation-iteration-count задаёт количество раз, которое цикл анимации должен быть воспроизведён перед остановкой.</p>
<div class="element-one"></div>
<div class="element-two"></div>
</body>
</html>Animation-fill-mode
Это свойство задаёт стиль для элемента, применяемый до или после выполнения анимации.
Синтаксис свойства animation-fill-mode
animation-fill-mode: none | forwards | backwards | both | initial | inheritОно может принимать следующие значения:
- forwards - указывает, что элемент должен сохранять значения стилей, заданные последним ключевым кадром (зависит от свойств animation-iteration-count и animation-direction).
- backwards - указывает, что элемент должен получить значения стилей, заданные первым ключевым кадром (зависит от animation-direction), и сохранять их в течение периода animation-delay.
- both - указывает, что анимация должна следовать правилам как forwards, так и backwards.
- none - (по умолчанию) указывает, что к элементу не будет применяться никакой стиль до или после выполнения анимации
Пример свойства animation-fill-mode со значением “forwards”:
Пример свойства animation-fill-mode со значением “forwards”:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background: #1c87c9;
position: relative;
-webkit-animation: element 5s;
/* Safari 4.0 - 8.0 */
-webkit-animation-fill-mode: forwards;
/* Safari 4.0 - 8.0 */
animation: element 5s;
animation-fill-mode: forwards;
}
/* Safari 4.0 - 8.0 */
@-webkit-keyframes element {
from {
top: 0px;
}
to {
top: 200px;
background-color: blue;
}
}
@keyframes element {
from {
top: 0px;
}
to {
top: 200px;
background-color: #8ebf42;
}
}
</style>
</head>
<body>
<h2>Пример animation-fill-mode</h2>
<div></div>
</body>
</html>Animation-play-state
Это свойство определяет, воспроизводится анимация или приостановлена.
Синтаксис свойства animation-play-state
animation-play-state: paused | running | initial | inheritЗначение по умолчанию — running.
Пример свойства animation-play-state со значением “running”:
Пример свойства animation-play-state со значением “running”:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 150px;
height: 150px;
background: #ccc;
position: relative;
animation: play 10s;
animation-play-state: running;
}
@keyframes play {
from {
left: 0px;
}
to {
left: 200px;
}
}
</style>
</head>
<body>
<h2>Пример animation-play-state</h2>
<p>Здесь animation-play-state установлено в "running".</p>
<div></div>
</body>
</html>Несколько анимаций
Можно объявить несколько анимаций для селектора, нужно лишь разделить значения запятыми.
Пример нескольких анимаций для селектора:
Пример свойства The Animation Property Multiple Animations
<!DOCTYPE html>
<html>
<head>
<style>
html,
body {
height: 100%;
margin: 0;
}
body {
display: flex;
align-items: center;
justify-content: center;
}
.element {
height: 200px;
width: 200px;
background-color: #1c87c9;
animation: pulse 5s ease infinite alternate, nudge 5s linear infinite alternate;
}
@keyframes pulse {
0%,
100% {
background-color: #8ebf42;
}
50% {
background-color: #1c87c9;
}
}
@keyframes nudge {
0%,
100% {
transform: translate(0, 0);
}
50% {
transform: translate(150px, 0);
}
80% {
transform: translate(-150px, 0);
}
}
</style>
</head>
<body>
<div class="element"></div>
</body>
</html>Практика
Какие из следующих утверждений об анимации CSS верны?