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;
}
Результат
Прокрутите, чтобы увидеть анимированный элемент квадрата.
Установка анонимной временной шкалы прогресса прокрутки
В этом примере элемент #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