CSS-свойство `animation`
Базовая поддержка Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она поддерживается браузерами с сентября 2015 года.
Сокращённое свойство animation CSS задаёт анимацию перехода между стилями. Оно является сокращённой записью для свойств animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state и animation-timeline.
Попробуйте
animation: 3s ease-in 1s infinite reverse both running slide-in;
animation: 3s linear 1s infinite running slide-in;
animation: 3s linear 1s infinite alternate slide-in;
animation: 0.5s linear 1s infinite alternate slide-in;
<section class="flex-column" id="default-example"> <div id="example-element"></div> </section>
#example-element {
background-color: #1766aa;
margin: 20px;
border: 5px solid #333333;
width: 150px;
height: 150px;
border-radius: 50%;
}
@keyframes slide-in {
from {
margin-left: -20%;
}
to {
margin-left: 100%;
}
}
Составные свойства
Это свойство является сокращённой записью для следующих свойств CSS:
animation-nameanimation-durationanimation-timing-functionanimation-delayanimation-directionanimation-iteration-countanimation-fill-modeanimation-play-stateanimation-timeline
Синтаксис
/* @keyframes duration | easing-function | delay | iteration-count | direction | fill-mode | play-state | name */ animation: 3s ease-in 1s 2 reverse both paused slide-in; /* @keyframes duration | easing-function | delay | name */ animation: 3s linear 1s slide-in; /* two animations */ animation: 3s linear slide-in, 3s ease-out 5s slide-out;
Значения
Это свойство задаётся списком значений <animation>, разделённых запятыми. Каждое значение представляет собой список следующих значений, разделённых пробелами:
-
<keyframes-name>илиnone - Имя директивы
@keyframes, задающей анимацию, применяемую к элементу. Начальное значениеanimation-name—none. -
<animation-duration> - Определяет время, необходимое для завершения одного цикла анимации. Значение должно быть одним из допустимых для свойства
animation-duration. Начальное значение —0s. -
<easing-function> - Определяет тип перехода. Значение должно быть одним из допустимых для свойства
animation-timing-function. Начальное значение —ease. -
<animation-delay> - Определяет время ожидания между применением анимации к элементу и её началом. Значение должно быть одним из допустимых для свойства
animation-delay. Начальное значение —0s. -
<single-animation-direction> - Направление воспроизведения анимации. Значение должно быть одним из допустимых для свойства
animation-direction. Начальное значениеanimation-direction—normal. -
<single-animation-iteration-count> - Количество воспроизведений анимации. Значение должно быть одним из допустимых для свойства
animation-iteration-count. Начальное значениеanimation-iteration-count—1. -
<single-animation-fill-mode> - Определяет, как применять стили к целевому элементу анимации до и после её выполнения. Значение должно быть одним из допустимых для свойства
animation-fill-mode. Начальное значениеanimation-fill-mode—none. -
<single-animation-play-state> - Определяет, воспроизводится ли анимация. Значение должно быть одним из допустимых для свойства
animation-play-state. Начальное значениеanimation-play-state—running. -
<single-animation-timeline> - Определяет временную шкалу, используемую для управления ходом анимации. Значение должно быть одним из допустимых для свойства
animation-timeline. Начальное значение —auto.
Описание
Свойство animation задаётся одной или несколькими отдельными анимациями, разделёнными запятыми. Каждая animation в списке анимаций, разделённых запятыми, задаёт свойства animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state и animation-timeline. Если какие-либо компоненты не указаны в объявлении animation, их значения устанавливаются равными начальным значениям соответствующих компонентов.
animation-name
Компонент <animation-name> каждой анимации задаёт её имя, которым может быть none, <custom-ident> или <string>. Начальное значение animation-name — none. Это означает, что если в сокращённом свойстве animation не указано значение animation-name, ни к одному из свойств не применяется анимация.
Порядок других значений в определении анимации важен для того, чтобы отличить значение animation-name от других значений. Если значение в сокращённой записи animation можно интерпретировать как значение свойства анимации, отличного от animation-name, сначала оно будет применено к этому свойству, а не к animation-name. Поэтому рекомендуется указывать значение animation-name последним в списке значений при использовании сокращённой записи animation; это правило действует и при указании нескольких анимаций, разделённых запятыми, с помощью сокращённой записи animation.
Значения времени
Каждая анимация может содержать ноль, одно или два значения <time>. Порядок значений времени в определении каждой анимации важен: первое значение, которое можно интерпретировать как <time>, присваивается свойству animation-duration, а второе — свойству animation-delay.
Если в сокращённом свойстве animation не указано значение animation-duration, длительность по умолчанию равна 0s. В этом случае анимация всё равно будет выполняться (будут вызваны события animationStart и animationEnd), но пользователь не увидит анимацию.
animation-timeline
Если в сокращённой записи animation не указано значение <animation-timeline>, объявление сбросит все ранее заданные значения animation-timeline до auto, которое устанавливает временную шкалу по умолчанию — documentTimeline.
Если значение <animation-timeline> указано, но пользовательский агент не поддерживает значения <animation-timeline> в сокращённой записи, всё объявление animation считается недействительным и игнорируется. Поэтому при создании анимаций CSS, управляемых прокруткой, свойство animation-timeline необходимо объявить после любой сокращённой записи animation, чтобы оно вступило в силу.
Также <animation-timeline> можно задать в сокращённой записи animation внутри блока CSS @supports, например:
@supports (animation: view()) {
/* CSS for browsers supporting <animation-timeline> within `animation` shorthand */
}
animation-fill-mode и новые контексты наложения
При значении animation-fill-mode forwards анимированные свойства ведут себя так, как если бы они были включены в заданное значение свойства will-change. Если во время анимации создаётся новый контекст наложения, целевой элемент сохраняет этот контекст после завершения анимации.
Доступность
Мигание и вспышки при анимации могут создавать трудности для людей с когнитивными нарушениями, такими как синдром дефицита внимания и гиперактивности (СДВГ). Кроме того, некоторые виды движения могут провоцировать вестибулярные расстройства, эпилепсию, мигрень и повышенную светочувствительность.
Предусмотрите возможность приостанавливать или отключать анимацию, а также используйте медиазапрос reduced motion @media, чтобы обеспечить альтернативный интерфейс для пользователей, предпочитающих уменьшенное количество анимации.
- Создание более безопасной веб-анимации для людей с повышенной чувствительностью к движению — A List Apart (2015)
- Введение в медиазапрос reduced motion — CSS-Tricks (2017)
- Адаптивный дизайн для движения — WebKit (2017)
- Руководство WCAG: пункт 2.2 — Достаточное время: предоставьте пользователям достаточно времени для чтения и использования содержимого
- Понимание критерия успеха WCAG 2.2.2: Пауза, остановка, скрытие — W3C (2026)
Формальное определение
| Начальное значение | как у каждого из свойств сокращённой записи: |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как у каждого из свойств сокращённой записи: |
| Тип анимации | не анимируется |
Формальный синтаксис
animation = <single-animation># <single-animation> = <'animation-duration'> || <easing-function> || <'animation-delay'> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> || [ none | <keyframes-name> ] || <single-animation-timeline> <easing-function> = <linear-easing-function> | <cubic-bezier-easing-function> | <step-easing-function> <single-animation-iteration-count> = infinite | <number> <single-animation-direction> = normal | reverse | alternate | alternate-reverse <single-animation-fill-mode> = none | forwards | backwards | both <single-animation-play-state> = running | paused <keyframes-name> = <custom-ident> | <string> <single-animation-timeline> = auto | none | <dashed-ident> | <scroll()> | <view()> <linear-easing-function> = linear | <linear()> <cubic-bezier-easing-function> = ease | ease-in | ease-out | ease-in-out | <cubic-bezier()> <step-easing-function> = step-start | step-end | <steps()> <scroll()> = scroll( [ <scroller> || <axis> ]? ) <view()> = view([<axis> || <'view-timeline-inset'>]?) <linear()> = linear( [ <number> && <percentage>{0,2} ]# ) <cubic-bezier()> = cubic-bezier( [ <number [0,1]>, <number> ]#{2} ) <steps()> = steps( <integer>, <step-position>? ) <scroller> = root | nearest | self <axis> = block | inline | x | y <integer> = <number-token> <step-position> = jump-start | jump-end | jump-none | jump-both | start | end
Примеры
Примечание: Не рекомендуется анимировать свойства блочной модели CSS, поскольку это приводит к перерасчёту макета и перерисовке. Анимация любого свойства блочной модели создаёт значительную нагрузку на процессор; вместо этого рассмотрите возможность анимации свойства transform.
Основы: восход солнца
В этом примере мы показываем основы использования сокращённого свойства animate: жёлтое солнце движется по светло-голубому небу. Солнце поднимается к центру области просмотра, а затем скрывается из виду.
HTML
Для изображения солнца мы добавляем один элемент <div>.
<div class="sun"></div>
CSS
Сначала создадим солнце и небо. Небо — это :root HTML-документа. Мы скрываем содержимое, выходящее за пределы области просмотра: в нашем случае это часть солнца ниже горизонта. Для этого задаём свойству overflow значение hidden. Также мы используем свойство justify-content, чтобы расположить солнце по центру фона. Мы делаем солнце жёлтым, задаём его height равной высоте области просмотра (100vh), а ширину приравниваем к высоте, задавая свойству aspect-ratio значение 1. С помощью свойства border-radius превращаем квадрат <div> в круг.
:root {
overflow: hidden;
background-color: lightblue;
display: flex;
justify-content: center;
}
.sun {
background-color: yellow;
border-radius: 50%;
height: 100vh;
aspect-ratio: 1;
animation: 4s linear 0s infinite alternate sunrise;
}
Затем мы задаём несколько директив анимации @keyframes, которые перемещают элемент за пределы области просмотра, а затем возвращают его в исходное положение с помощью CSS-трансформаций:
@keyframes sunrise {
from {
transform: translateY(110vh);
}
to {
transform: translateY(0);
}
}
Осталось применить анимацию! С помощью сокращённого свойства animation мы применяем ключевую анимацию sunrise к .sun <div>. Анимация настроена на бесконечное число повторений, каждое длится 4 секунды; направление анимации меняется при каждом повторении:
.sun {
animation: 4s linear 0s infinite alternate sunrise;
}
Результат
Применение нескольких анимаций
В этом примере показано, как применить несколько анимаций к одному элементу. Расширим предыдущий пример с солнцем, восходящим и заходящим на светло-голубом фоне: теперь мы будем постепенно поворачивать солнце через все цвета радуги. Положение солнца и его цвет изменяются независимо друг от друга.
<div class="sun"></div>
:root {
overflow: hidden;
background-color: lightblue;
display: flex;
justify-content: center;
}
.sun {
background-color: yellow;
border-radius: 50%;
height: 100vh;
aspect-ratio: 1 / 1;
}
@keyframes sunrise {
from {
transform: translateY(110vh);
}
to {
transform: translateY(0);
}
}
Мы используем те же HTML и CSS, что и в предыдущем примере, и добавляем второй набор директив анимации @keyframes, чтобы применить filter, который проходит через все возможные значения оттенка с помощью функции фильтра hue-rotate():
@keyframes psychedelic {
from {
filter: hue-rotate(0deg);
}
to {
filter: hue-rotate(360deg);
}
}
Затем применим к солнцу обе анимации. Несколько анимаций разделяются запятыми, а параметры каждой из них задаются независимо:
.sun {
animation:
4s linear 0s infinite alternate sunrise,
24s linear 0s infinite psychedelic;
}
Результат
Каскадирование нескольких анимаций
В этом примере показано, что происходит, когда несколько анимаций задают значения одного и того же свойства. Пример основан на примере основного использования: применяются две анимации, обе задающие значение свойства transform.
<div class="sun"></div>
:root {
overflow: hidden;
background-color: lightblue;
display: flex;
justify-content: center;
}
.sun {
background-color: yellow;
border-radius: 50%;
height: 100vh;
aspect-ratio: 1 / 1;
}
Мы используем те же HTML и CSS, что и в первом примере, включая исходную анимацию sunrise, и добавляем вторую анимацию с именем bounce. Обе анимации задают значения одного и того же свойства:
@keyframes sunrise {
from {
transform: translateY(110vh);
}
to {
transform: translateY(0);
}
}
@keyframes bounce {
from {
transform: translateX(-50vw);
}
to {
transform: translateX(50vw);
}
}
Мы применяем к солнцу обе анимации. Если две анимации задают разные значения одного свойства, анимации, объявленные позже в каскаде, переопределяют объявленные ранее. В этом случае значение transform в анимации bounce «побеждает» в каскаде и переопределяет трансформацию, заданную sunrise, поэтому солнце будет двигаться только по горизонтали.
.sun {
animation:
4s linear 0s infinite alternate sunrise,
4s linear 0s infinite alternate bounce;
}
Результат
Солнце перемещается между левой и правой сторонами области просмотра. Солнце остаётся в области просмотра, несмотря на то что задана анимация sunrise. Свойство transform анимации sunrise переопределяется анимацией отскока.
Спецификации
| Спецификация |
|---|
| CSS Animations Level 1 # animation |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
animation |
43
3
|
12
12
|
16
49
5
|
30
15
12.1–15
12–15
|
9
4
|
43
18
|
16
49
5
|
30
14
12.1–14
12–14
|
9
3.2
|
4.0
1.0
|
43
2Свойствоanimation-fill-mode не поддерживается в браузерах Android ниже версии 2.3. |
9
3.2
|
alternate |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
alternate-reverse |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
animation-timeline_included |
115В настоящее время поддерживается только сброс. Включениеanimation сбрасывает ранее объявленное значение animation-timeline до auto, но animation-timeline нельзя задать с помощью animation. |
115В настоящее время поддерживается только сброс. Включениеanimation сбрасывает ранее объявленное значение animation-timeline до auto, но animation-timeline нельзя задать с помощью animation. |
Нет |
101В настоящее время поддерживается только сброс. Включениеanimation сбрасывает ранее объявленное значение animation-timeline до auto, но animation-timeline нельзя задать с помощью animation. |
Нет |
115В настоящее время поддерживается только сброс. Включениеanimation сбрасывает ранее объявленное значение animation-timeline до auto, но animation-timeline нельзя задать с помощью animation. |
Нет |
77В настоящее время поддерживается только сброс. Включениеanimation сбрасывает ранее объявленное значение animation-timeline до auto, но animation-timeline нельзя задать с помощью animation. |
Нет |
23.0В настоящее время поддерживается только сброс. Включениеanimation сбрасывает ранее объявленное значение animation-timeline до auto, но animation-timeline нельзя задать с помощью animation. |
115В настоящее время поддерживается только сброс. Включениеanimation сбрасывает ранее объявленное значение animation-timeline до auto, но animation-timeline нельзя задать с помощью animation. |
Нет |
auto |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
backwards |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
both |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
ease |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
ease-in |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
ease-in-out |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
ease-out |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
forwards |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
infinite |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
linear |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
none |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
normal |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
paused |
3 |
79 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
reverse |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
running |
3 |
79 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
step-end |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
step-start |
3 |
12 |
5 |
15 |
4 |
18 |
5 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
См. также
- Использование CSS-анимаций
- API
AnimationEventJavaScript
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation