Псевдоэлемент CSS `::scroll-button()`
Базовая поддержка Ограниченная доступность
Эта функция не входит в базовую поддержку, поскольку она не работает в некоторых наиболее широко используемых браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в рабочей среде внимательно ознакомьтесь с таблицей совместимости с браузерами.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в рабочей среде внимательно ознакомьтесь с таблицей совместимости с браузерами.
::scroll-button() — это CSS-псевдоэлемент, представляющий кнопку для управления прокруткой контейнера прокрутки. Они создаются в контейнерах прокрутки, если значение их свойства content не равно none. Направление прокрутки определяется значением параметра.
Синтаксис
::scroll-button(<scroll-button-direction>) {
/* ... */
}
Параметры
- Значение, указывающее, какую кнопку прокрутки нужно выбрать. Доступны следующие значения:
-
* - Выбирает все кнопки прокрутки исходного элемента, позволяя задать стили для каждой из них в одном правиле.
-
down - Выбирает кнопку, которая прокручивает содержимое вниз.
-
left - Выбирает кнопку, которая прокручивает содержимое влево.
-
right - Выбирает кнопку, которая прокручивает содержимое вправо.
-
up - Выбирает кнопку, которая прокручивает содержимое вверх.
-
block-end - Выбирает кнопку, которая прокручивает содержимое в направлении block-end.
-
block-start - Выбирает кнопку, которая прокручивает содержимое в направлении block-start.
-
inline-end - Выбирает кнопку, которая прокручивает содержимое в направлении inline-end.
-
inline-start - Выбирает кнопку, которая прокручивает содержимое в направлении inline-start.
В спецификации также определены два других значения —
nextиprev, — но в настоящее время они не поддерживаются ни одним браузером. -
Описание
Псевдоэлементы ::scroll-button() создаются внутри контейнера прокрутки, только если для их свойств content задано значение, отличное от none. Они создаются как элементы-братья дочерних DOM-элементов контейнера прокрутки, непосредственно перед ними и любым элементом ::scroll-marker-group, созданным в контейнере.
Для каждого контейнера прокрутки можно создать до четырёх кнопок прокрутки, которые будут прокручивать содержимое к началу и концу блочной и строчной осей. Аргумент селектора указывает выбранное направление прокрутки. Можно также задать значение *, чтобы выбрать все псевдоэлементы ::scroll-button() и задать стили для всех кнопок в одном правиле.
Созданные кнопки ведут себя как обычные элементы <button>, в том числе используют стандартные стили браузера. Они могут получать фокус, доступны для вспомогательных технологий и активируются как обычные кнопки. При нажатии кнопки прокрутки содержимое контейнера прокрутки сдвигается в указанном направлении на одну «страницу», то есть примерно на размер контейнера прокрутки, подобно нажатию клавиш PgUp и PgDn.
Рекомендуется настроить привязку прокрутки CSS для контейнера прокрутки и задать для каждого отдельного элемента содержимого, к которому нужно прокручивать, значение цели привязки. В таком случае при активации кнопки прокрутки содержимое будет прокручиваться к цели привязки, находящейся на расстоянии одной «страницы». Кнопки прокрутки работают и без привязки прокрутки, однако результат может оказаться не таким, как ожидалось.
Если прокрутка в направлении конкретной кнопки прокрутки больше невозможна, эта кнопка автоматически отключается; в противном случае она включена. Стили кнопок прокрутки в активном и отключённом состояниях можно задавать с помощью псевдоклассов :enabled и :disabled.
Примеры
Другие примеры каруселей см. в разделе Создание каруселей CSS.
Создание кнопок прокрутки
В этом примере показано, как создать кнопки прокрутки для карусели CSS.
HTML
У нас есть обычный HTML-список <ul> с несколькими элементами списка <li>.
<ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> <li>Item 4</li> <li>Item 5</li> <li>Item 6</li> <li>Item 7</li> <li>Item 8</li> </ul>
CSS
Стилизация карусели
Мы превращаем <ul> в карусель, задавая для display значение flex, в результате чего элементы <li> располагаются в одной строке без переноса. Свойству overflow-x задаётся значение auto. Это означает, что при переполнении контейнера элементами по оси x содержимое будет прокручиваться по горизонтали. Затем мы превращаем <ul> в контейнер привязки прокрутки, чтобы элементы всегда фиксировались на месте при прокрутке контейнера; для этого свойству scroll-snap-type задаётся значение mandatory.
ul {
display: flex;
gap: 4vw;
padding-left: 0;
overflow-x: auto;
overscroll-behavior-x: contain;
scroll-snap-type: x mandatory;
}
Затем мы стилизуем элементы <li>, используя свойство flex, чтобы их ширина составляла 100% ширины контейнера. Значение start свойства scroll-snap-align приводит к тому, что левая сторона самого левого видимого элемента фиксируется у левого края контейнера при прокрутке содержимого.
li {
list-style-type: none;
background-color: #eeeeee;
flex: 0 0 100%;
height: 100px;
padding-top: 20px;
scroll-snap-align: start;
text-align: center;
}
Создание кнопок прокрутки
Сначала для всех кнопок прокрутки задаются базовые стили, а также стили для разных состояний. Важно задать стили :focus для пользователей клавиатуры. Кроме того, кнопки прокрутки автоматически получают атрибут disabled, когда прокрутка в соответствующем направлении больше невозможна, поэтому для этого состояния мы используем псевдокласс :disabled.
ul::scroll-button(*) {
border: 0;
font-size: 2rem;
background: none;
color: black;
opacity: 0.7;
cursor: pointer;
}
ul::scroll-button(*):hover,
ul::scroll-button(*):focus {
opacity: 1;
}
ul::scroll-button(*):active {
translate: 1px 1px;
}
ul::scroll-button(*):disabled {
opacity: 0.2;
cursor: unset;
}
Примечание: Мы также задаём кнопкам прокрутки значение pointer свойства cursor, чтобы нагляднее показать, что с ними можно взаимодействовать (это улучшает как общее взаимодействие с пользователем, так и когнитивную доступность), и сбрасываем его, когда кнопки прокрутки :disabled.
Затем для левой и правой кнопок прокрутки задаются соответствующие значки с помощью свойства content, которое также отвечает за создание кнопок прокрутки:
ul::scroll-button(left) {
content: "◄";
}
ul::scroll-button(right) {
content: "►";
}
Для значков в content не нужно задавать альтернативный текст, поскольку браузер автоматически предоставляет подходящие доступные имена.
Результат
Обратите внимание, что кнопки прокрутки расположены в карусели внизу слева. Нажмите на них, чтобы увидеть, как прокручивается содержимое.
Позиционирование кнопок прокрутки
Предыдущий пример работает, но кнопки расположены не совсем удачно. В этом разделе мы добавим CSS для их позиционирования с помощью позиционирования относительно якоря.
CSS
Сначала для <ul> задаётся ссылка anchor-name, определяющая его как именованный якорь. Затем для каждой кнопки прокрутки задаётся значение absolute свойства position, а свойству position-anchor задаётся значение anchor-name списка, чтобы связать их друг с другом.
ul {
anchor-name: --my-carousel;
}
ul::scroll-button(*) {
position: absolute;
position-anchor: --my-carousel;
}
Чтобы задать положение каждой кнопки прокрутки, сначала зададим для обеих значение anchor-center свойства align-self, чтобы выровнять их по центру карусели по вертикали:
ul::scroll-button(*) {
align-self: anchor-center;
}
Затем зададим значения свойствам вставки, отвечающим за горизонтальное позиционирование. Мы используем функции anchor(), чтобы расположить указанные стороны кнопок относительно сторон карусели. В каждом случае функция calc() добавляет пространство между краем кнопки и краем карусели. Например, правый край левой кнопки прокрутки располагается на 45 пикселей правее левого края карусели.
ul::scroll-button(left) {
right: calc(anchor(left) - 45px);
}
ul::scroll-button(right) {
left: calc(anchor(right) - 45px);
}
Результат
Спецификации
| Спецификация |
|---|
| CSS Overflow Module Level 5 # scroll-buttons |
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
scroll-button |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
block-end |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
block-start |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
down |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
inline-end |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
inline-start |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
left |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
next |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
prev |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
right |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
star |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
up |
135 |
135 |
Нет |
120 |
Нет |
135 |
Нет |
89 |
Нет |
29.0 |
135 |
Нет |
См. также
scroll-marker-group::scroll-marker-group::scroll-marker::column:target-current- Создание каруселей CSS
- Модуль переполнения CSS
- Модуль позиционирования относительно якоря CSS
- Галерея каруселей CSS на chrome.dev (2025)
© 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/Selectors/::scroll-button