Spec-Zone.ru › CSS

animation-timeline

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Экспериментально: Это экспериментальная технология экспериментальная технология
Перед использованием в производственной среде внимательно изучите таблицу совместимости браузеров таблица совместимости браузеров.

Свойство animation-timeline CSS задаёт временную шкалу, используемую для управления прогрессом анимации CSS.

Следующие типы временных шкал могут быть заданы с помощью animation-timeline:

  • Временная шкала по умолчанию документа, которая прогрессирует со временем с момента загрузки документа в браузере. Это временная шкала, традиционно связанная с анимациями CSS, и выбирается со значением auto, или без указания animation-timeline значения вообще.
  • Временная шкала прогресса прокрутки, которая прогрессирует за счёт прокрутки прокручиваемого элемента (прокручивателя) между верхним и нижним (или левым и правым) краем. Положение в диапазоне прокрутки преобразуется в процент прогресса — 0% в начале и 100% в конце. Элемент, предоставляющий временную шкалу прогресса прокрутки, может быть указан двумя способами:
    • Именованная временная шкала прогресса прокрутки — это временная шкала, где прокручиватель, предоставляющий временную шкалу прогресса прокрутки, явно называется с помощью свойства scroll-timeline-name (или сокращённого свойства scroll-timeline). Затем имя связывается с элементом, подлежащим анимации, задавая его как значение свойства animation-timeline этого элемента.
    • Безымянная временная шкала прогресса прокрутки — это временная шкала, где элементу, подлежащему анимации, задаётся функция scroll() в качестве animation-timeline значения, которая выбирает прокручиватель, предоставляющий временную шкалу прогресса прокрутки, и ось прокрутки, которая будет использоваться, на основе параметров, которые вы передаёте в неё.
  • Временная шкала прогресса видимости, которая прогрессирует в зависимости от изменения видимости элемента (известного как объект) внутри прокручивателя. Следуется за видимостью объекта внутри прокручивателя — по умолчанию, временная шкала находится на 0%, когда объект впервые виден на одном краю прокручивателя, и на 100%, когда он достигает противоположного края. В отличие от временных шкал прогресса прокрутки, вы не можете указать прокручиватель — видимость объекта всегда отслеживается внутри ближайшего предка-прокручивателя. Объект, предоставляющий временную шкалу прогресса видимости, может быть указан двумя способами:
    • Именованная временная шкала прогресса видимости — это временная шкала, где объект явно называется с помощью свойства view-timeline-name (или сокращённого свойства view-timeline). Затем имя связывается с элементом, подлежащим анимации, задавая его как значение свойства animation-timeline этого элемента. Важно отметить, что с именованными временными шкалами прогресса видимости, элемент, подлежащий анимации, не обязательно должен быть таким же, как объект.
    • Безымянная временная шкала прогресса видимости — это временная шкала, где объекту задаётся функция view() в качестве animation-timeline значения, что приводит к его анимации на основе его положения внутри ближайшего родительского прокручивателя.

Примечание: animation-timeline включено в сокращённое свойство animation в качестве значения только для сброса. Это означает, что включение animation сбрасывает ранее объявленное значение animation-timeline до auto, но конкретное значение не может быть установлено через animation. При создании анимаций CSS, управляемых прокруткой, вам необходимо объявить animation-timeline после объявления любого сокращённого свойства animation для его активации.

Синтаксис

/* Keyword */
animation-timeline: none;
animation-timeline: auto;

/* Single animation named timeline */
animation-timeline: --timeline_name;

/* Single animation anonymous scroll progress timeline */
animation-timeline: scroll();
animation-timeline: scroll(scroller axis);

/* Single animation anonymous view progress timeline */
animation-timeline: view();
animation-timeline: view(axis inset);

/* Multiple animations */
animation-timeline: --progressBarTimeline, --carouselTimeline;
animation-timeline: none, --slidingTimeline;

/* Global values */
animation-timeline: inherit;
animation-timeline: initial;
animation-timeline: revert;
animation-timeline: revert-layer;
animation-timeline: unset;

Значения

none

Анимация не связана с временной шкалой.

auto

Временная шкала анимации — это стандартная временная шкала документа DocumentTimeline.

scroll()

Безымянная временная шкала прогресса прокрутки предоставляется ближайшим прокручивателем. Параметры функции позволяют выбрать прокручиватель и ось прокрутки, по которой будет измеряться временная шкала.

См. scroll() для получения дополнительной информации.

view()

Безымянная временная шкала прогресса видимости предоставляется объектом, на котором задано это свойство. Параметры функции позволяют выбрать ось прокрутки, по которой будет отслеживаться прогресс временной шкалы, и отступ, корректирующий положение области, в которой считается, что объект виден.

См. view() для получения дополнительной информации.

<dashed-ident>

Идентификатор <dashed-ident>, идентифицирующий именованную временную шкалу, предварительно объявленную с помощью свойства scroll-timeline-name или view-timeline-name (или сокращённого свойства scroll-timeline или view-timeline).

Примечание: Если две или более временные шкалы имеют одинаковое имя, будет использоваться последняя, объявленная в каскаде. Также, если не найдена временная шкала, соответствующая заданному имени, анимация не связана с временной шкалой.

Примечание: Значения <dashed-ident> должны начинаться с --. Это помогает избежать конфликтов имён со стандартными ключевыми словами CSS.

Формальное определение

Начальное значение auto
Применимо к всем элементам
Наследуется нет
Вычисленное значение список, каждый элемент — это чувствительный к регистру идентификатор CSS или ключевые слова none, auto
Тип анимации Не анимируемо

Формальный синтаксис

animation-timeline = 
<single-animation-timeline>#

<single-animation-timeline> =
auto |
none |
<dashed-ident> |
<scroll()> |
<view()>

<scroll()> =
scroll( [ <scroller> || <axis> ]? )

<view()> =
view( [ <axis> || <'view-timeline-inset'> ]? )

<scroller> =
root |
nearest |
self

<axis> =
block |
inline |
x |
y

<view-timeline-inset> =
[ [ auto | <length-percentage> ]{1,2} ]#

<length-percentage> =
<length> |
<percentage>

Примеры

Настройка именованной временной шкалы прогресса прокрутки

Временная шкала прогресса прокрутки с именем --squareTimeline определяется с помощью свойства scroll-timeline-name на элементе с id значением container. Затем она устанавливается как временная шкала для анимации элемента #square с помощью animation-timeline: --squareTimeline.

HTML

HTML для примера показан ниже.

<div id="container">
  <div id="square"></div>
  <div id="stretcher"></div>
</div>

CSS

CSS для контейнера устанавливает его как источник временной шкалы прогресса прокрутки с именем --squareTimeline с помощью свойства scroll-timeline-name (мы могли бы явно указать ось прокрутки с помощью scroll-timeline-axis, но здесь есть только полоса вертикальной прокрутки, и она будет использоваться по умолчанию).

Высота контейнера установлена в 300px, и мы также настроили контейнер на создание вертикальной полосы прокрутки при переполнении (ниже мы будем использовать CSS для элемента "stretcher", чтобы убедиться, что он действительно переполняется).

#container {
  height: 300px;
  overflow-y: scroll;
  scroll-timeline-name: --squareTimeline;
  position: relative;
}

CSS ниже определяет квадрат, вращающийся в противоположных направлениях в соответствии со временной шкалой, предоставленной свойством animation-timeline , которое установлено на временную шкалу --squareTimeline с указанным выше именем.

#square {
  background-color: deeppink;
  width: 100px;
  height: 100px;
  margin-top: 100px;
  animation-name: rotateAnimation;
  animation-duration: 1ms; /* Firefox requires this to apply the animation */
  animation-direction: alternate;
  animation-timeline: --squareTimeline;

  position: absolute;
  bottom: 0;
}

@keyframes rotateAnimation {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

CSS для "stretcher" устанавливает высоту блока в 600px, что заставляет элемент контейнера переполняться и создавать полосы прокрутки. Без этого элемента не было бы полосы прокрутки, а следовательно, и временной шкалы прогресса прокрутки, которую можно было бы связать со временной шкалой анимации.

#stretcher {
  height: 600px;
}

Результат

Прокрутите, чтобы увидеть анимированный элемент квадрата.

END_OF_DOCUMENT_MARKER

Установка анонимной временной шкалы прогресса прокрутки

В этом примере элемент #square анимируется с помощью анонимной временной шкалы прогресса прокрутки, которая применяется к анимируемому элементу с помощью функции scroll(). Временная шкала в этом конкретном примере предоставляется ближайшим родительским элементом, имеющим полосу прокрутки (любую), из полосы прокрутки в направлении блока.

HTML

HTML-код для примера показан ниже.

<div id="container">
  <div id="square"></div>
  <div id="stretcher"></div>
</div>

CSS

CSS ниже определяет квадрат, который вращается в разные стороны в соответствии с временной шкалой, предоставляемой свойством animation-timeline. В данном случае временная шкала предоставляется scroll(block nearest), что означает, что она выберет полосу прокрутки в направлении блока ближайшего предкового элемента, имеющего полосы прокрутки; в данном случае вертикальную полосу прокрутки элемента «container».

Примечание: block и nearest фактически являются значениями параметров по умолчанию, поэтому мы могли использовать просто scroll().

#square {
  background-color: deeppink;
  width: 100px;
  height: 100px;
  margin-top: 100px;
  position: absolute;
  bottom: 0;

  animation-name: rotateAnimation;
  animation-duration: 1ms; /* Firefox requires this to apply the animation */
  animation-direction: alternate;
  animation-timeline: scroll(block nearest);
}

@keyframes rotateAnimation {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

CSS для контейнера устанавливает его высоту в 300 пикселей, а также настраивает контейнер для создания вертикальной полосы прокрутки при переполнении. CSS «stretcher» устанавливает высоту блока в 600 пикселей, что заставляет элемент контейнера переполняться. Вместе эти настройки обеспечивают наличие у контейнера вертикальной полосы прокрутки, которая может быть использована в качестве источника анонимной временной шкалы прогресса прокрутки.

#container {
  height: 300px;
  overflow-y: scroll;
  position: relative;
}

#stretcher {
  height: 600px;
}

Результат

Прокрутите, чтобы увидеть анимированный элемент-квадрат.

Установка именованной временной шкалы прогресса просмотра

Именованная временная шкала прогресса просмотра с именем --subjectReveal определяется с помощью свойства view-timeline-name на элементе-объекте со значением class animation. Затем она устанавливается как временная шкала для того же элемента с помощью animation-timeline: --subjectReveal;. В результате элемент-объект анимируется при перемещении вверх по документу при прокрутке.

HTML

HTML-код для примера показан ниже.

<div class="content">
  <h1>Content</h1>

  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. Risus quis varius quam
    quisque id. Et ligula ullamcorper malesuada proin libero nunc consequat
    interdum varius. Elit ullamcorper dignissim cras tincidunt lobortis feugiat
    vivamus at augue.
  </p>

  <p>
    Dolor sed viverra ipsum nunc aliquet. Sed sed risus pretium quam vulputate
    dignissim. Tortor aliquam nulla facilisi cras. A erat nam at lectus urna
    duis convallis convallis. Nibh ipsum consequat nisl vel pretium lectus.
    Sagittis aliquam malesuada bibendum arcu vitae elementum. Malesuada bibendum
    arcu vitae elementum curabitur vitae nunc sed velit.
  </p>

  <div class="subject animation"></div>

  <p>
    Adipiscing enim eu turpis egestas pretium aenean pharetra magna ac. Arcu
    cursus vitae congue mauris rhoncus aenean vel. Sit amet cursus sit amet
    dictum. Augue neque gravida in fermentum et. Gravida rutrum quisque non
    tellus orci ac auctor augue mauris. Risus quis varius quam quisque id diam
    vel quam elementum. Nibh praesent tristique magna sit amet purus gravida
    quis. Duis ultricies lacus sed turpis tincidunt id aliquet. In egestas erat
    imperdiet sed euismod nisi. Eget egestas purus viverra accumsan in nisl nisi
    scelerisque. Netus et malesuada fames ac.
  </p>
</div>

CSS

Элемент subject и содержащий его элемент content стилизованы минимально, и текстовому содержимому заданы базовые настройки шрифта:

.subject {
  width: 300px;
  height: 200px;
  margin: 0 auto;
  background-color: deeppink;
}

.content {
  width: 75%;
  max-width: 800px;
  margin: 0 auto;
}

p,
h1 {
  font-family: Arial, Helvetica, sans-serif;
}

h1 {
  font-size: 3rem;
}

p {
  font-size: 1.5rem;
  line-height: 1.5;
}

Элементу <div> с классом subject также задан класс animation — здесь устанавливается view-timeline-name для определения именованной временной шкалы прогресса просмотра. Ему также задано имя animation-timeline со значением, чтобы указать, что этот элемент будет анимирован по мере продвижения по временной шкале прогресса просмотра.

Наконец, для элемента задана анимация, которая анимирует его непрозрачность и масштаб, заставляя его постепенно появляться и увеличиваться в размерах при перемещении вверх по прокручиваемой области.

.animation {
  view-timeline-name: --subjectReveal;
  animation-timeline: --subjectReveal;

  animation-name: appear;
  animation-fill-mode: both;
  animation-duration: 1ms; /* Firefox requires this to apply the animation */
}

@keyframes appear {
  from {
    opacity: 0;
    transform: scaleX(0);
  }

  to {
    opacity: 1;
    transform: scaleX(1);
  }
}

Результат

Прокрутите, чтобы увидеть анимированный элемент-объект.

Установка анонимной временной шкалы прогресса просмотра

Анонимная временная шкала прогресса просмотра устанавливается для элемента с классом subject с помощью animation-timeline: view(). В результате элемент subject анимируется при перемещении вверх по документу при прокрутке.

HTML

HTML-код для примера показан ниже.

<div class="content">
  <h1>Content</h1>

  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. Risus quis varius quam
    quisque id. Et ligula ullamcorper malesuada proin libero nunc consequat
    interdum varius. Elit ullamcorper dignissim cras tincidunt lobortis feugiat
    vivamus at augue.
  </p>

  <p>
    Dolor sed viverra ipsum nunc aliquet. Sed sed risus pretium quam vulputate
    dignissim. Tortor aliquam nulla facilisi cras. A erat nam at lectus urna
    duis convallis convallis. Nibh ipsum consequat nisl vel pretium lectus.
    Sagittis aliquam malesuada bibendum arcu vitae elementum. Malesuada bibendum
    arcu vitae elementum curabitur vitae nunc sed velit.
  </p>

  <div class="subject animation"></div>

  <p>
    Adipiscing enim eu turpis egestas pretium aenean pharetra magna ac. Arcu
    cursus vitae congue mauris rhoncus aenean vel. Sit amet cursus sit amet
    dictum. Augue neque gravida in fermentum et. Gravida rutrum quisque non
    tellus orci ac auctor augue mauris. Risus quis varius quam quisque id diam
    vel quam elementum. Nibh praesent tristique magna sit amet purus gravida
    quis. Duis ultricies lacus sed turpis tincidunt id aliquet. In egestas erat
    imperdiet sed euismod nisi. Eget egestas purus viverra accumsan in nisl nisi
    scelerisque. Netus et malesuada fames ac.
  </p>
</div>

CSS

Элемент subject и содержащий его элемент content стилизованы минимально, и текстовому содержимому заданы базовые настройки шрифта:

.subject {
  width: 300px;
  height: 200px;
  margin: 0 auto;
  background-color: deeppink;
}

.content {
  width: 75%;
  max-width: 800px;
  margin: 0 auto;
}

p,
h1 {
  font-family: Arial, Helvetica, sans-serif;
}

h1 {
  font-size: 3rem;
}

p {
  font-size: 1.5rem;
  line-height: 1.5;
}

Элементу <div> с классом subject также задан класс animation — здесь animation-timeline: view() устанавливает, что он будет анимирован по мере продвижения по временной шкале прогресса просмотра, предоставляемой его прокручиваемым предком (в данном случае корневым элементом документа).

Наконец, для элемента задана анимация, которая анимирует его непрозрачность и масштаб, заставляя его постепенно появляться и увеличиваться в размерах при перемещении вверх по прокручиваемой области.

.animation {
  animation-timeline: view();

  animation-name: appear;
  animation-fill-mode: both;
  animation-duration: 1ms; /* Firefox requires this to apply the animation */
}

@keyframes appear {
  from {
    opacity: 0;
    transform: scaleX(0);
  }

  to {
    opacity: 1;
    transform: scaleX(1);
  }
}

Результат

Прокрутите, чтобы увидеть анимированный элемент-объект.

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

Спецификация
CSS Анимации Уровень 2
# animation-timeline

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
animation-timeline 115 115 110 101 Нет 115 Нет 77 Нет 23.0 115
scroll 115 115
110["Диапазон прокрутки ноль обрабатывается как 100%, но должен быть 0% (см. ошибку 1780865).", "Поддерживает устаревшие значения осей horizontal и vertical, а не значения x и y."]
101 Нет 115 Нет 77 Нет 23.0 115
view 115 115 114 101 Нет 115 Нет 77 Нет 23.0 115

См. также

  • animation, animation-composition, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function
  • scroll-timeline-name, scroll-timeline-axis, scroll-timeline
  • timeline-scope
  • view-timeline-name, view-timeline-axis, view-timeline, view-timeline-inset
  • Эквивалент на JavaScript: свойство timeline доступное в Element.animate() вызовах
  • CSS-анимации, управляемые прокруткой
  • Использование CSS-анимаций

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/animation-timeline

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API