Свойство CSS `scroll-margin-inline-start`
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в разных версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Свойство scroll-margin-inline-start задаёт отступ области привязки прокрутки от начала строчной оси, который используется для привязки этого блока к snapport. Область привязки прокрутки определяется путём получения преобразованной рамки границы, вычисления её прямоугольной ограничивающей рамки (выровненной по осям в системе координат контейнера прокрутки), а затем добавления указанных отступов.
Попробуйте
scroll-margin-inline-start: 0;
scroll-margin-inline-start: 20px;
scroll-margin-inline-start: 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 {
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: start;
}
.scroller > div:nth-child(even) {
background-color: white;
color: rebeccapurple;
}
Синтаксис
/* <length> values */ scroll-margin-inline-start: 10px; scroll-margin-inline-start: 1em; /* Global values */ scroll-margin-inline-start: inherit; scroll-margin-inline-start: initial; scroll-margin-inline-start: revert; scroll-margin-inline-start: revert-layer; scroll-margin-inline-start: unset;
Значения
-
<length> - Отступ от начального края строчной оси контейнера прокрутки.
Формальное определение
| Начальное значение | 0 |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | по типу вычисленного значения |
Формальный синтаксис
scroll-margin-inline-start =
<length>
Примеры
Простой пример
В этом примере реализовано нечто очень похожее на интерактивный пример выше, но здесь мы объясним, как это устроено.
Цель — создать четыре блока с горизонтальной прокруткой, второй и третий из которых будут привязываться к позиции рядом с левым краем каждого блока, но не вплотную к нему.
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-inline-start: 1rem;
}
.scroller > div:nth-child(3) {
scroll-margin-inline-start: 2rem;
}
Это означает, что при прокрутке мимо дочерних элементов посередине прокрутка будет привязываться на 1rem за начальным краем строчной оси второго <div> и на 2rems за начальным краем строчной оси третьего <div>.
Результат
Попробуйте сами:
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
scroll-margin-inline-start |
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-start