Свойство CSS scroll-margin-inline
Базовая поддержка Широко доступно
Эта возможность хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она поддерживается во всех браузерах с января 2020 года.
scroll-margin-inline CSS — это сокращённое свойство, задающее поля прокрутки элемента по строчной оси.
Попробуйте
scroll-margin-inline: 0;
scroll-margin-inline: 40px 20px;
scroll-margin-inline: 4em 0;
scroll-margin-inline: 0px 3em;
<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 {
flex-wrap: wrap;
}
.default-example .info {
width: 100%;
padding: 0.5em 0;
font-size: 90%;
}
.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;
}
.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: end;
}
.scroller > div:nth-child(even) {
background-color: white;
color: rebeccapurple;
}
Составные свойства
Это свойство является сокращённой записью следующих свойств CSS:
Синтаксис
/* <length> values */ scroll-margin-inline: 10px; scroll-margin-inline: 1em 0.5em; /* Global values */ scroll-margin-inline: inherit; scroll-margin-inline: initial; scroll-margin-inline: revert; scroll-margin-inline: revert-layer; scroll-margin-inline: unset;
Значения
-
<length> - Вынос за соответствующий край контейнера прокрутки.
Описание
Значения scroll-margin задают выносы, определяющие область привязки прокрутки, используемую для привязки этого блока к области привязки. Область привязки прокрутки определяется следующим образом: берётся преобразованная рамка границы, для неё находится ограничивающий прямоугольник (выровненный по осям в системе координат контейнера прокрутки), а затем к нему добавляются указанные выносы.
Формальное определение
| Начальное значение | как для каждого из свойств, входящих в сокращённую запись: |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как для каждого из свойств, входящих в сокращённую запись: |
| Тип анимации | по типу вычисленного значения |
Формальный синтаксис
scroll-margin-inline =
<length>{1,2}
Примеры
Базовый пример
В этом примере реализовано нечто очень похожее на интерактивный пример выше, но здесь мы расскажем, как это устроено.
Наша цель — создать четыре блока с горизонтальной прокруткой, второй и третий из которых привязываются к позиции рядом с правым краем каждого блока, но не вплотную к нему.
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: end;
}
.scroller > div:nth-child(2n) {
background-color: white;
color: rebeccapurple;
}
Здесь наиболее важная часть — scroll-snap-align: end, которая указывает, что правые края (в нашем случае «концы» по оси x) являются заданными точками привязки.
Наконец, зададим значения полей прокрутки — разные для второго и третьего дочерних элементов:
.scroller > div:nth-child(2) {
scroll-margin-inline: 1rem;
}
.scroller > div:nth-child(3) {
scroll-margin-inline: 2rem;
}
Это означает, что при прокрутке мимо средних дочерних элементов прокрутка будет привязываться на расстоянии 1rem за конечным краем по строчной оси второго <div> и на расстоянии 2rems за конечным краем по строчной оси третьего <div>.
Примечание: Здесь мы задаём scroll-margin в начале и в конце строчной оси (в нашем случае оси x), но на самом деле важен только конечный край. Здесь можно было бы задать поле прокрутки только для этого края, например с помощью scroll-margin-inline: 0 1rem или scroll-margin-inline-end: 1rem.
Результат
Попробуйте сами:
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
scroll-margin-inline |
69 |
79 |
68 |
56 |
15 |
69 |
68 |
48 |
15 |
10.0 |
69 |
15 |
См. также
- Модуль привязки прокрутки 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-inline