Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

css
/* 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

Anfangswertnormal
Anwendbar aufalle Elemente
VererbtNein
Berechneter Wertwie angegeben
Animationstypdiskret

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

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

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