Spec-Zone.ru › CSS

CSS-функция `scroll()`

Базовая поддержка Ограниченная доступность

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

scroll() — это функция CSS, которую можно использовать со свойством animation-timeline для создания анонимной временной шкалы прогресса прокрутки, задавая прокручиваемый элемент и ось временной шкалы.

Синтаксис

/* No arguments */
animation-timeline: scroll();

/* <scroller> argument only */
animation-timeline: scroll(nearest);
animation-timeline: scroll(root);
animation-timeline: scroll(self);

/*`<axis>` argument only */
animation-timeline: scroll(block);
animation-timeline: scroll(inline);
animation-timeline: scroll(y);
animation-timeline: scroll(x);

/* <scroller> and <axis> */
animation-timeline: scroll(block nearest);
animation-timeline: scroll(inline root);
animation-timeline: scroll(x self);

Параметры

<scroller>
Элемент, прокрутка которого будет задавать временную шкалу прогресса прокрутки. Допустимые значения:
nearest
Ближайший предок текущего элемента, у которого есть полосы прокрутки по любой из осей. Это значение по умолчанию.
root
Корневой элемент документа.
self
Сам текущий элемент.
<axis>
Ключевое слово <axis>, обозначающее направление или ось области прокрутки, которая управляет анимацией с управлением прокруткой. Значение по умолчанию — block.

Описание

Функцию CSS scroll() можно использовать как отдельное значение в списке значений, разделённых запятыми, свойства animation-timeline, чтобы задать временную шкалу прогресса прокрутки для анимации @keyframes. Она определяет прокручиваемый элемент (прокручиваемый элемент) и ось полосы прокрутки, которые будут задавать временную шкалу анимации.

По умолчанию scroll() ссылается на ось block ближайшего контейнера прокрутки-предка nearest. Значения прокручиваемого элемента и оси можно указывать в любом порядке.

Следующие пять объявлений эквивалентны:

animation-timeline: scroll();
animation-timeline: scroll(block);
animation-timeline: scroll(nearest);
animation-timeline: scroll(block nearest);
animation-timeline: scroll(nearest block);

Временная шкала прогресса прокрутки изменяется при прокрутке элемента по горизонтали или вертикали — в зависимости от <axis> и режима письма. Если для указанной оси нет полосы прокрутки, временная шкала анимации будет неактивна.

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

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

<scroller> = 
  root |
  nearest |
  self

<axis> = 
  block |
  inline |
  x |
  y

Примеры

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

В этом примере элемент #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-код для контейнера задаёт его высоту равной 300px и включает вертикальную полосу прокрутки, если содержимое выходит за его границы. CSS для "stretcher" задаёт высоту в блочном направлении равной 600px, из-за чего содержимое выходит за границы контейнера. В совокупности эти правила обеспечивают наличие у контейнера вертикальной полосы прокрутки, благодаря чему его можно использовать как источник анонимной временной шкалы прогресса прокрутки.

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

#stretcher {
  height: 600px;
}
@layer no-support {
  @supports not (animation-timeline: scroll()) {
    body::before {
      content: "Your browser doesn't support the CSS `scroll()` function.";
      background-color: wheat;
      display: block;
      text-align: center;
      padding: 1rem 0;
    }
  }
}

Результат

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

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

Спецификация
Анимации с управлением прокруткой
# scroll-notation

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

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
scroll
115
115
предварительная версия
101
26
115
Нет
77
26
23.0
115
26

См. также

  • Использование CSS-анимаций
  • Модуль CSS-анимации
  • Модуль CSS-анимации с управлением прокруткой
  • ScrollTimeline
  • API веб-анимаций

© 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-timeline/scroll

Spec-Zone.ru

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