CSS scroll() — часова шкала від прокручування


Опис

Експериментальна технологія: Перед використанням уважно перевірте таблицю сумісності з браузерами.

Функція scroll() представляє собою інструмент у CSS, який контролює поведінку прокрутки в рамках заданого елементу. Ця функція визначає, яким елементом буде кореневий елемент, що надає часову шкалу прокрутки, або ж використовує найближчий батьківський елемент, що має прокрутку.

Визначення прокрутки може бути гнучким, дозволяючи вказати вісь прокрутки для часової шкали. Це може включати вертикальну або горизонтальну вісь, залежно від напрямку тексту. Така гнучкість робить функцію scroll() корисною для більш точного контролю над анімацією та прокруткою.

Наприклад, використання scroll(block nearest) вказує, що найближчий батьківський елемент, що має прокрутку, буде джерелом часової шкали, а вісь прокрутки буде визначена у напрямку блоку.

Приклад роботи функції:


#square {
  animation-timeline: scroll(block nearest);
  /* інші стилі */
}

В цьому прикладі, елемент з ідентифікатором square буде анімований з використанням анонімної часової шкали прокрутки, яка надається найближчим батьківським елементом з прокруткою у напрямку блоку. Це дозволяє створювати динамічні анімації, які реагують на дії користувача, такі як прокрутка, надаючи більш відзивчивий та живий досвід користувача.

автор: Bond

Загальний опис

автор: NagarD

Порада

Переконайтеся, що ви правильно вказали елемент, що надає часову шкалу прокрутки, і вісь прокрутки для досягнення очікуваного ефекту анімації.

автор: Bond
Нотатка

При використанні функції scroll(), переконайтеся, що вказаний елемент дійсно має прокрутку у вибраній вісі, інакше часова шкала буде неактивною.

автор: Bond

Синтаксис

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

Функція scroll може отримувати 2 значень:

<scroller>

Значення може бути або nearest (найближчий батьківський елемент з прокруткою у будь-якій вісі), або root (кореневий елемент документа), в залежності від того, який елемент слід використовувати для надання часової шкали прокрутки для анімації.

автор: Bond

<axis>

Значення може бути або block (вертикальна або горизонтальна вісь прокрутки блока) або inline (горизонтальна або вертикальна вісь прокрутки рядка), в залежності від напрямку тексту в контейнері.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Microsoft EDGE
115 115
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome
115 115

Приклади

+ запропонувати свій приклад у пісочниці

Смужка прогресу без жодного рядка скрипта: прокрутіть текст усередині рамки, і помаранчева заливка поповзе разом із ним. Тривалості в анімації немає — її веде scroll(nearest block).

HTML

<div id="description">
  <h2>Смужка прогресу на scroll()</h2>
  <p>Прокрутіть текст у рамці. Заливка смужки прив'язана не до часу, а до прокрутки найближчого предка.</p>
</div>

<div id="result">
  <div class="scroller">
    <div class="track"><div class="fill"></div></div>
    <p>Часова шкала прокрутки — це не таймер. Анімація не має тривалості: нульовий кадр відповідає початку прокрутки, останній — кінцю.</p>
    <p>Прокрутіть назад — і анімація відмотається назад так само точно. Ніякого скрипта, ніякого обробника подій.</p>
    <p>Джерелом шкали тут є сам цей блок: він найближчий предок смужки, у якого є прокрутка.</p>
    <p>Якби вміст помістився без прокрутки, шкали б не існувало — і смужка застигла б на першому кадрі.</p>
    <p>Вісь block означає напрямок письма. Для звичайного українського тексту це вертикаль.</p>
    <p>Кінець тексту. Смужка вгорі має бути заповнена повністю.</p>
  </div>
</div>

CSS

#description {
  background: #f2f2f2;
  padding: 20px;
  font-family: Arial, sans-serif;
}

#result {
  padding: 24px;
  font-family: Arial, sans-serif;
}

.scroller {
  height: 220px;
  overflow-y: auto;
  border: 2px solid #999;
  padding: 0 16px 16px;
  background: #fff;
}

.track {
  position: sticky;
  top: 0;
  height: 10px;
  margin: 0 -16px 14px;
  background: #e0e0e0;
}

.fill {
  height: 100%;
  background: #ff6347;
  transform: scaleX(1);
  transform-origin: left center;
  animation-name: progress;
  animation-timing-function: linear;
  animation-fill-mode: both;
  animation-timeline: scroll(nearest block);
}

@keyframes progress {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}

.scroller p {
  font-size: 14px;
  line-height: 1.6;
  color: #333;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід