CSS свойство animation-direction

Определение и применение

Свойство animation-direction задаёт направление воспроизведения каждого цикла анимации элемента: прямое, обратное или чередующееся.

Основы и примеры — в уроке об анимациях CSS. Несколько настроек можно объединить сокращённым свойством animation.

В генераторе анимаций можно сравнить все четыре направления и настроить повторения.

Попробуйте значения animation-direction

Сравните направление проходов. alternate меняет его после каждого прохода.

Значение свойства

animation-direction: normal

HTML и CSS примера
HTML
<div class="stage">
  <div class="demo-target">CSS</div>
</div>
CSS
* {
  box-sizing: border-box;
}
.stage {
  width: 100%;
  max-width: 300px;
  height: 210px;
  display: grid;
  place-items: center;
  padding: 20px;
  border: 2px dashed #607589;
  background: #edf2f5;
  color: #172c3d;
  font: 16px/1.4 system-ui;
}
.demo-target {
  width: 100px;
  height: 80px;
  display: grid;
  place-items: center;
  border: 3px solid #245a85;
  background: #ffe4bd;
  animation-name: travel;
  animation-duration: 2s;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: normal;
}
@keyframes travel {
  from {
    transform: translateX(-55px);
  }
  to {
    transform: translateX(55px);
  }
}
@keyframes turn {
  from {
    transform: rotate(-30deg);
  }
  to {
    transform: rotate(30deg);
  }
}

Поддержка браузерами

Спецификация: CSS animations

Поддерживается во всех основных браузерах с 2016 года.

Показать браузеры
Совместимостьcss.properties.animation-direction
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
animation-direction✓43

Версия 43 выпущена в 2015 г.

Версия 3 выпущена в 2009 г. — Префикс -webkit-

✓12

Версия 12 выпущена в 2015 г.

Версия 12 выпущена в 2015 г. — Префикс -webkit-

✓16

Версия 16 выпущена в 2012 г.

Версия 49 выпущена в 2016 г. — Префикс -webkit-

Версия 5 выпущена в 2011 г. — Префикс -moz-

✓30

Версия 30 выпущена в 2015 г.

Версия 15 выпущена в 2013 г. — Префикс -webkit-

Версия 12.1 выпущена в 2012 г. — Удалено в 15

Версия 12 выпущена в 2012 г. — Удалено в 15; Префикс -o-

✓9

Версия 9 выпущена в 2015 г.

Версия 4 выпущена в 2009 г. — Префикс -webkit-

✓43

Версия 43 выпущена в 2015 г.

Версия 18 выпущена в 2012 г. — Префикс -webkit-

✓16

Версия 16 выпущена в 2012 г.

Версия 49 выпущена в 2016 г. — Префикс -webkit-

Версия 5 выпущена в 2011 г. — Префикс -moz-

✓30

Версия 30 выпущена в 2015 г.

Версия 14 выпущена в 2013 г. — Префикс -webkit-

Версия 12.1 выпущена в 2012 г. — Удалено в 14

Версия 12 выпущена в 2012 г. — Удалено в 14; Префикс -o-

✓9

Версия 9 выпущена в 2015 г.

Версия 3.2 выпущена в 2010 г. — Префикс -webkit-

✓4.0

Версия 4.0 выпущена в 2016 г.

Версия 1.0 выпущена в 2013 г. — Префикс -webkit-

✓43

Версия 43 выпущена в 2015 г.

Версия 4.4 выпущена в 2013 г. — Префикс -webkit-

✓9

Версия 9 выпущена в 2015 г.

Версия 3.2 выпущена в 2010 г. — Префикс -webkit-

alternate✓3✓12✓5✓15✓4✓18✓5✓14✓3.2✓1.0✓4.4✓3.2
alternate-reverse✓19✓12✓16✓12.1✓6✓25✓16✓12.1✓6✓1.5✓4.4✓6
normal✓3✓12✓5✓15✓4✓18✓5✓14✓3.2✓1.0✓4.4✓3.2
reverse✓19✓12✓16✓12.1✓6✓25✓16✓12.1✓6✓1.5✓4.4✓6

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

CSS синтаксис:

CSS
animation-direction: [ normal | reverse | alternate | alternate-reverse ]#;

/* Глобальные значения */
animation-direction: initial | inherit | unset | revert | revert-layer;

Знак # означает одно или несколько значений через запятую. Знак | разделяет варианты. Квадратные скобки группируют варианты.

JavaScript синтаксис:

JavaScript
element.style.animationDirection = "alternate";

Начальное значение свойства

normal.

Значения свойства

Значения animation-direction
Значение Описание
normal Каждый цикл идёт от начального кадра к конечному. При повторе начинается новый прямой проход. Начальное значение.
reverse Каждый цикл идёт от конечного кадра к начальному.
alternate Нечётные циклы идут прямо, чётные — в обратную сторону. Первый цикл прямой.
alternate-reverse Нечётные циклы идут в обратную сторону, чётные — прямо. Первый цикл обратный.
initial Устанавливает начальное значение свойства.
inherit Наследует вычисленное значение свойства у родительского элемента.
unset Для ненаследуемого свойства animation-direction устанавливает его начальное значение.
revert Отменяет заданное в коде значение свойства для этого элемента: применяются пользовательские или стандартные стили браузера. Если они не задают значение, свойство наследуется или получает начальное значение по обычным правилам. Не возвращает значение из предыдущей строки CSS.
revert-layer Сбрасывает значение свойства для текущего слоя каскада @layer. Применяется значение из другого слоя по правилам каскада; если подходящего значения нет, возможен откат к стилям пользователя или браузера.

Значения через запятую соответствуют именам в animation-name по порядку. Если значений меньше, список повторяется; лишние значения не используются.

Направление и функция времени

Обратный проход разворачивает и функцию времени: например, ускорение ease-in превращается в замедление. Один проход считается одним циклом, поэтому движение туда и обратно при alternate требует двух циклов. Количество задаёт animation-iteration-count.

Спецификация

CSS Animations Level 1.

Наследуется

Нет.

Анимируемое

Нет.

Примеры, попробуйте сами

Направление движения

Сравните normal и alternate. Замените alternate на reverse или alternate-reverse и посмотрите, откуда начинается движение и что происходит между повторами. Затем замените linear на ease-in и сравните характер движения при прямом и обратном проходе.

base.css
CSS
* {
    box-sizing: border-box;
}
body {
    margin: 16px;
    font:
        16px/1.4 system-ui,
        sans-serif;
    color: #172c3d;
}
.track {
    position: relative;
    height: 70px;
    margin-top: 16px;
    border: 1px dashed #607589;
    background: #edf2f5;
}
.box {
    position: absolute;
    top: 12px;
    left: 0;
    width: 42px;
    height: 42px;
    display: grid;
    place-items: center;
    border-radius: 6px;
    background: #245a85;
    color: white;
}
.run:not(:checked) ~ .track .box {
    animation-name: none;
}
index.html
HTML
<input class="run" type="checkbox" id="run" checked />
<label for="run">Запустить анимацию</label>
<div class="track"><span class="box">A</span></div>
<div class="track second"><span class="box">B</span></div>
style.css
CSS
.box {
    animation-name: travel;
    animation-duration: 3s;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
    animation-direction: normal;
}
.second .box {
    animation-direction: alternate;
}

/* Длина пути зависит от ширины дорожки: пример помещается на телефоне. */
@keyframes travel {
    from {
        left: 0;
        background: #a64400;
    }
    to {
        left: calc(100% - 42px);
        background: #16703c;
    }
}