scroll-snap-stop CSS property
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2022 browserübergreifend verfügbar.
Die CSS-Eigenschaft scroll-snap-stop legt fest, ob ein Scroll-Container mögliche Einrastpositionen „überspringen“ darf.
Probieren Sie es aus
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;
}
Syntax
/* 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;
Werte
Diese Eigenschaft wird mit einem der folgenden Schlüsselwortwerte angegeben:
normal-
Wenn im visuellen Viewport des Scroll-Containers dieses Elements gescrollt wird, darf der Scroll-Container mögliche Einrastpositionen „überspringen“.
always-
Der Scroll-Container darf eine mögliche Einrastposition nicht „überspringen“, sondern muss an der ersten Einrastposition dieser Elemente einrasten.
Formale Definition
| Anfangswert | normal |
|---|---|
| Anwendbar auf | alle Elemente |
| Vererbt | Nein |
| Berechneter Wert | wie angegeben |
| Animationstyp | diskret |
Formale Syntax
scroll-snap-stop =
normal |
always
Beispiele
>Unterschiedliche Einraststopps festlegen
Das folgende Beispiel zeigt den Unterschied zwischen den Werten always und normal für scroll-snap-stop. Der Unterschied zwischen den beiden Werten ist deutlicher, wenn die Eigenschaft scroll-snap-type auf mandatory gesetzt ist, wie in diesem Beispiel.
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
/* 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;
}
Ergebnis
Scrollen Sie in den X- bzw. Y-Boxen unten von links nach rechts und von oben nach unten. In den X- und Y-Boxen, in denen die Eigenschaft scroll-snap-stop auf always gesetzt ist, stoppt das Scrollen auch dann am Einrastpunkt, wenn Sie schnell scrollen. In den Boxen, in denen die Eigenschaft scroll-snap-stop auf normal gesetzt ist, werden Einrastpunkte beim schnellen Scrollen dagegen übersprungen.
Bei Bedarf können Sie gezielt festlegen, an welchen Elementen innerhalb des Scroll-Containers immer angehalten werden soll. Das folgende Beispiel zeigt dies anhand ungerader und gerader Elemente. Je nach Ihren Anforderungen können Sie eine andere Vorgehensweise wählen. Im folgenden Beispiel werden in der zweiten Box ungerade und in der dritten Box gerade Elemente beim Scrollen nicht „übersprungen“.
Spezifikationen
| Spezifikation |
|---|
| CSS Scroll Snap Module Level 1> # scroll-snap-stop> |
Browser-Kompatibilität
Siehe auch
scroll-snap-alignscroll-initial-target- Modul CSS Scroll Snap
- Kontrolliertes Scrollen mit CSS Scroll Snap auf web.dev (2018)