Spec-Zone.ru › CSS

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:

  • scroll-margin-bottom
  • scroll-margin-left
  • scroll-margin-right
  • scroll-margin-top

Синтаксис

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

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

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

Spec-Zone.ru

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