Spec-Zone.ru › CSS

Свойство 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:

  • scroll-margin-inline-end
  • scroll-margin-inline-start

Синтаксис

/* <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-start
  • scroll-margin-inline-end
Применяется к всем элементам
Наследуется нет
Вычисленное значение как для каждого из свойств, входящих в сокращённую запись:
  • scroll-margin-inline-start
  • scroll-margin-inline-end
Тип анимации по типу вычисленного значения

Формальный синтаксис

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.

Результат

Попробуйте сами:

Спецификации

Спецификация
Модуль CSS Scroll Snap, уровень 1
# propdef-scroll-margin-inline

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API