CSS-свойство `scroll-margin`
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в различных версиях браузеров. Она доступна во всех браузерах с января 2020 года.
scroll-margin — CSS-свойство сокращённой записи, которое одновременно задаёт все отступы прокрутки элемента, присваивая значения так же, как свойство margin задаёт отступы элемента.
Попробуйте
scroll-margin: 0;
scroll-margin: 20px;
scroll-margin: 2em;
<section class="default-example" id="default-example">
<div class="scroller">
<div>1</div>
<div id="example-element">2</div>
<div>3</div>
</div>
<div class="info">Scroll »</div>
</section>
.default-example .info {
inline-size: 100%;
padding: 0.5em 0;
font-size: 90%;
writing-mode: vertical-rl;
}
.scroller {
text-align: left;
height: 250px;
width: 270px;
overflow-y: scroll;
display: flex;
flex-direction: column;
box-sizing: border-box;
border: 1px solid black;
scroll-snap-type: y mandatory;
}
.scroller > div {
flex: 0 0 250px;
background-color: rebeccapurple;
color: white;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
scroll-snap-align: start;
}
.scroller > div:nth-child(even) {
background-color: white;
color: rebeccapurple;
}
Составные свойства
Это свойство является сокращённой записью следующих свойств CSS:
Синтаксис
/* <length> values */ scroll-margin: 10px; scroll-margin: 1em 0.5em 1em 1em; /* Global values */ scroll-margin: inherit; scroll-margin: initial; scroll-margin: revert; scroll-margin: revert-layer; scroll-margin: unset;
Значения
-
<length> - Выступ за соответствующий край контейнера прокрутки.
Описание
Эффект свойства scroll-margin можно увидеть, прокрутив содержимое до точки между двумя «страницами» примера. Значение, заданное для scroll-margin, определяет, какая часть страницы, в основном находящаяся за пределами области привязки, должна оставаться видимой.
Таким образом, значения scroll-margin задают выступы, определяющие область привязки прокрутки, которая используется для привязки этого блока к области привязки. Область привязки прокрутки определяется следующим образом: берётся преобразованная рамка границы, находится её прямоугольная ограничивающая рамка (параллельная осям координат контейнера прокрутки), а затем добавляются заданные выступы.
Формальное определение
| Начальное значение | как у каждого из сокращённых свойств: |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как у каждого из сокращённых свойств: |
| Тип анимации | по типу вычисленного значения |
Формальный синтаксис
scroll-margin =
<length>{1,4}
Примеры
Базовый пример
В этом примере реализовано нечто очень похожее на интерактивный пример выше, но здесь мы объясним, как это работает.
Наша цель — создать четыре блока с горизонтальной прокруткой, второй и третий из которых привязываются к заданному положению рядом с левым краем каждого блока, но не вплотную к нему.
HTML
HTML включает прокручиваемый контейнер с четырьмя дочерними элементами:
<div class="scroller"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> </div>
CSS
Рассмотрим CSS. Внешний контейнер оформлен следующим образом:
.scroller {
text-align: left;
width: 250px;
height: 250px;
overflow-x: scroll;
display: flex;
box-sizing: border-box;
border: 1px solid black;
scroll-snap-type: x mandatory;
}
Основные параметры, связанные с привязкой прокрутки, — это overflow-x: scroll, которое гарантирует, что содержимое будет прокручиваться, а не скрываться, и scroll-snap-type: x mandatory, которое задаёт привязку прокрутки по горизонтальной оси и гарантирует, что прокрутка всегда будет останавливаться в точке привязки.
Дочерние элементы оформлены следующим образом:
.scroller > div {
flex: 0 0 250px;
width: 250px;
background-color: rebeccapurple;
color: white;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
scroll-snap-align: start;
}
.scroller > div:nth-child(2n) {
background-color: white;
color: rebeccapurple;
}
Самая важная часть здесь — scroll-snap-align: start: она указывает, что левый край (в нашем случае «начало» по оси x) является заданной точкой привязки.
Наконец, зададим значения отступа прокрутки; для второго и третьего дочерних элементов они будут различаться:
.scroller > div:nth-child(2) {
scroll-margin: 1rem;
}
.scroller > div:nth-child(3) {
scroll-margin: 2rem;
}
Это означает, что при прокрутке мимо средних дочерних элементов она будет привязываться на 1rem за левым краем второго <div> и на 2rems за левым краем третьего <div>.
Примечание: Здесь мы задаём scroll-margin сразу для всех сторон, но на самом деле важен только начальный край. Здесь можно было бы задать отступ прокрутки только для этого края, например с помощью scroll-margin-inline-start: 1rem или scroll-margin: 0 0 0 1rem.
Результат
Попробуйте сами:
Спецификации
| Спецификация |
|---|
| Модуль CSS Scroll Snap, уровень 1 # scroll-margin |
Совместимость с браузерами
| Настольные устройства | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
scroll-margin |
69 |
79 |
90
68–90Свойствоscroll-margin может привести к неправильному вычислению видимости элемента для element.focus(). См. ошибку 1708303. |
56 |
14.1
11До версии 14.1 отступ прокрутки не применяется при прокрутке к целевому фрагменту илиscrollIntoView(); см. ошибку 189265. |
69 |
90
68–90Свойствоscroll-margin может привести к неправильному вычислению видимости элемента для element.focus(). См. ошибку 1708303. |
48 |
14.5
11До версии 14.5 отступ прокрутки не применяется при прокрутке к целевому фрагменту илиscrollIntoView(); см. ошибку 189265. |
10.0 |
69 |
14.5
11До версии 14.5 отступ прокрутки не применяется при прокрутке к целевому фрагменту илиscrollIntoView(); см. ошибку 189265. |
См. также
- Модуль привязки прокрутки CSS
- Управляемая прокрутка с помощью привязки прокрутки CSS на web.dev (2018)
© 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/scroll-margin