Свойство CSS `scroll-snap-stop`
Базовая поддержка Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Свойство scroll-snap-stop CSS определяет, может ли контейнер прокрутки «пропускать» возможные позиции привязки.
Попробуйте
scroll-snap-stop: normal;
scroll-snap-stop: always;
<section class="default-example" id="default-example">
<p class="explanation">
The effect of this property can be noticed on devices with a touchpad. Try
to scroll through all items with a single swing. Value
<b class="keyword">'normal'</b> should pass through all pages, while
<b class="keyword">'always'</b> will stop at the second page.
</p>
<div class="snap-container">
<div>1</div>
<div id="example-element">2</div>
<div>3</div>
</div>
<div class="info">Scroll »</div>
</section>
.default-example {
flex-direction: column;
}
.explanation {
margin-top: 0;
}
.keyword {
color: darkorange;
}
.default-example .info {
width: 100%;
padding: 0.5em 0;
font-size: 90%;
}
.snap-container {
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;
}
.snap-container > 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;
}
.snap-container > div:nth-child(even) {
background-color: white;
color: rebeccapurple;
}
Синтаксис
/* Keyword values */ scroll-snap-stop: normal; scroll-snap-stop: always; /* Global values */ scroll-snap-stop: inherit; scroll-snap-stop: initial; scroll-snap-stop: revert; scroll-snap-stop: revert-layer; scroll-snap-stop: unset;
Значения
Это свойство задаётся одним из следующих ключевых слов:
-
normal - При прокрутке визуального окна просмотра контейнера прокрутки этого элемента оно может «пропускать» возможные позиции привязки.
-
always - Контейнер прокрутки не должен «пропускать» возможную позицию привязки и должен привязываться к первой позиции привязки этого элемента.
Формальное определение
| Исходное значение | normal |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | дискретный |
Формальный синтаксис
scroll-snap-stop =
normal |
always
Примеры
Настройка разных точек остановки привязки
В приведённом ниже примере показана разница между значениями always и normal свойства scroll-snap-stop. Разница между двумя значениями scroll-snap-stop заметнее, когда свойству scroll-snap-type задано значение mandatory, как и в этом примере.
HTML
<p>scroll-snap-stop: always (X Mandatory)</p> <div class="x mandatory-scroll-snapping always-stop"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div> <p>scroll-snap-stop: always (X Mandatory) on odd child elements</p> <div class="x mandatory-scroll-snapping always-stop-odd"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div> <p>scroll-snap-stop: always (X Mandatory) on even child elements</p> <div class="x mandatory-scroll-snapping always-stop-even"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div> <p>scroll-snap-stop: normal (X Mandatory)</p> <div class="x mandatory-scroll-snapping normal-stop"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div> <p>scroll-snap-stop: always (Y Mandatory)</p> <div class="y mandatory-scroll-snapping always-stop"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div> <p>scroll-snap-stop: normal (Y Mandatory)</p> <div class="y mandatory-scroll-snapping normal-stop"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div>
CSS
/* setup */
body {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
flex-flow: column nowrap;
font-family: monospace;
text-align: center;
}
div[class] {
font-size: 3rem;
display: flex;
overflow: auto;
flex: none;
}
.x {
width: 50%;
min-width: 15rem;
height: 6rem;
flex-flow: row nowrap;
}
.y {
width: 30%;
min-width: 12rem;
height: 12rem;
flex-flow: column nowrap;
}
div > div {
flex: none;
outline: 1px solid #333333;
}
.x > div {
width: 90%;
height: 100%;
}
.y > div {
width: 100%;
height: 80%;
}
/* coloration */
div > div:nth-child(even) {
background-color: #87ea87;
}
div > div:nth-child(odd) {
background-color: #87ccea;
}
/* setting up mandatory scroll-snap on parent */
.x.mandatory-scroll-snapping {
scroll-snap-type: x mandatory;
}
.y.mandatory-scroll-snapping {
scroll-snap-type: y mandatory;
}
/* defining scroll-snap alignment on children */
div > div {
scroll-snap-align: center;
}
/* defining scroll-snap stop on children */
.always-stop > div {
scroll-snap-stop: always;
}
.always-stop-odd > div:nth-of-type(odd) {
scroll-snap-stop: always;
}
.always-stop-even > div:nth-of-type(even) {
scroll-snap-stop: always;
}
.normal-stop > div {
scroll-snap-stop: normal;
}
Результат
Прокручивайте содержимое слева направо и сверху вниз в блоках X и Y ниже соответственно. В блоках X и Y, где свойству scroll-snap-stop задано значение always, прокрутка принудительно останавливается в точке привязки, даже если прокручивать быстро. Однако в блоках, где свойству scroll-snap-stop задано значение normal, при быстрой прокрутке точки привязки пропускаются.
При необходимости можно выборочно задавать элементы, на которых прокрутка always останавливается внутри контейнера прокрутки. В примере ниже для этого выбраны нечётные и чётные элементы; можно использовать и другую стратегию в зависимости от ваших требований. В примере ниже прокрутка не «пропускает» нечётные и чётные элементы во втором и третьем блоках соответственно.
Спецификации
| Спецификация |
|---|
| CSS Scroll Snap Module Level 1 # scroll-snap-stop |
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
scroll-snap-stop |
75 |
79 |
103 |
62 |
15 |
75 |
103 |
54 |
15 |
11.0 |
75 |
15 |
always |
75 |
79 |
103 |
62 |
15 |
75 |
103 |
54 |
15 |
11.0 |
75 |
15 |
normal |
75 |
79 |
103 |
62 |
15 |
75 |
103 |
54 |
15 |
11.0 |
75 |
15 |
См. также
scroll-snap-alignscroll-initial-target- Привязка прокрутки 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-snap-stop