CSS Scroll-Properties
Scroll-Properties steuern, wie der Browser zu einem Ziel scrollt, wo Inhalte einrasten und welcher Abstand beim Scrollen berücksichtigt wird. Sie funktionieren auf der ganzen Seite oder innerhalb eines eigenen Scroll-Containers.
Ein eigener Scroll-Container entsteht zum Beispiel mit einer begrenzten Grösse und overflow: auto. Für die ganze Seite ist keine zusätzliche overflow-Angabe nötig: Sobald der Inhalt höher als das Browserfenster ist, kann die Seite gescrollt werden.
Properties im Überblick
scroll-behaviorbestimmt, ob der Browser direkt oder weich zu einem Ziel scrolltscroll-snap-typeaktiviert Scroll Snap und legt Achse sowie Stärke festscroll-snap-alignbestimmt die Ausrichtung eines Elements beim Einrastenscroll-snap-stopbestimmt, ob Snap-Punkte übersprungen werden dürfenscroll-paddingdefiniert Abstand innerhalb des Scroll-Containersscroll-margindefiniert Abstand um ein Zielelement
1. scroll-behavior
scroll-behavior wirkt beim Navigieren zu Ankerlinks und bei programmatisch ausgelöstem Scrollen. Das normale Scrollen mit Mausrad oder Trackpad wird dadurch nicht verändert.
auto– Der Browser springt direkt zum Ziel. Das ist der Standard.smooth– Der Browser scrollt weich zum Ziel.
html {
scroll-behavior: smooth;
}
Auf html gilt die Eigenschaft für die ganze Seite. Auf einem scrollbaren Element gilt sie nur für diesen Scroll-Container.
See the Pen Sanftes Scrollen mit scroll-behavior by Intensivstation (@intensivstation) on CodePen.
Accessibility: Weiche Scrollbewegungen können für bewegungsempfindliche Nutzer:innen unangenehm sein. Aktiviere sie deshalb nur, wenn keine Präferenz für reduzierte Bewegung eingestellt ist.
@media (prefers-reduced-motion: no-preference) {
html {
scroll-behavior: smooth;
}
}
2. scroll-snap-type
scroll-snap-type wird auf den Scroll-Container gesetzt. Die Angabe kombiniert eine Achse mit der Stärke des Einrastens.
.carousel {
overflow-x: auto;
scroll-snap-type: x mandatory;
}
Achse
x– Einrasten auf der horizontalen Achsey– Einrasten auf der vertikalen Achseinline– Einrasten auf der Inline-Achseblock– Einrasten auf der Block-Achseboth– Einrasten auf beiden Achsen
Stärke
none– Scroll Snap ist deaktiviert. Das ist der Standard.proximity– Der Browser rastet ein, wenn das Ende der Scrollbewegung nahe an einem Snap-Punkt liegt.mandatory– Der Browser muss nach dem Scrollen an einem Snap-Punkt einrasten.
Hinweis: mandatory kann bei sehr grossen oder unterschiedlich langen Inhalten problematisch sein, weil Zwischenbereiche schwer erreichbar werden können.
3. scroll-snap-align
scroll-snap-align wird auf die Elemente innerhalb des Snap-Containers gesetzt. Die Eigenschaft bestimmt, welche Kante oder Position beim Einrasten am Scroll-Container ausgerichtet wird.
none– Das Element definiert keinen Snap-Punkt. Das ist der Standard.start– Der Anfang des Elements wird ausgerichtet.center– Die Mitte des Elements wird ausgerichtet.end– Das Ende des Elements wird ausgerichtet.
.carousel-item {
scroll-snap-align: center;
}
Mit zwei Werten lassen sich Block- und Inline-Achse getrennt festlegen, zum Beispiel scroll-snap-align: start center.
Horizontales Karussell
Das Beispiel kombiniert scroll-snap-type auf dem Container mit scroll-snap-align auf den einzelnen Items.
Der Container scrollt horizontal und rastet nach jeder Bewegung an der Mitte eines Elements ein.
See the Pen Scroll-Snap: Horizontales Karussell by Intensivstation (@intensivstation) on CodePen.
.carousel {
display: flex;
overflow-x: auto;
scroll-snap-type: x mandatory;
gap: 15px;
}
.carousel-item {
flex: 0 0 220px;
scroll-snap-align: center;
}
4. scroll-snap-stop
scroll-snap-stop wird auf ein Snap-Element gesetzt. Es bestimmt, ob eine schnelle Scrollbewegung diesen Snap-Punkt überspringen darf.
normal– Snap-Punkte dürfen übersprungen werden. Das ist der Standard.always– Die Scrollbewegung soll an diesem Snap-Punkt stoppen.
.carousel-item {
scroll-snap-align: center;
scroll-snap-stop: always;
}
5. scroll-padding
scroll-padding wird auf den Scroll-Container gesetzt. Es verkleinert nicht das Layout, sondern definiert den Bereich, in dem ein Ziel nach dem Scrollen sichtbar liegen soll. Das ist besonders nützlich, wenn eine fixierte Navigation einen Teil des Viewports überdeckt.
auto– Der Browser bestimmt den Abstand. Der verwendete Wert ist normalerweise0.- Längen wie
5remoder80px - Prozentwerte wie
10% - Ein bis vier Werte funktionieren wie bei
padding.
html {
scroll-padding-top: 5rem;
}
6. scroll-margin
scroll-margin wird auf das Zielelement gesetzt. Der zusätzliche Abstand wird beim Scrollen zu diesem Element berücksichtigt, verändert aber nicht den sichtbaren Abstand im normalen Layout.
- Längen wie
5remoder80px - Ein bis vier Werte funktionieren wie bei
margin. - Prozentwerte und
autosind nicht erlaubt.
section {
scroll-margin-top: 5rem;
}
Fixierte Navigation
Ohne scroll-margin-top kann eine fixierte Navigation die Überschrift des angesprungenen Abschnitts verdecken. Der Scroll-Abstand schafft oberhalb des Zielelements Platz.
See the Pen scroll-margin-top: Fixierte Navigation by Intensivstation (@intensivstation) on CodePen.
Vollbild-Section-Snapping
Beim normalen Scrollen mit Mausrad oder Trackpad rastet jede Section am oberen Rand ein. Der Container definiert die vertikale Achse und die Stärke, die Sections definieren ihre Ausrichtung.
See the Pen Vollbild-Section-Snapping by Intensivstation (@intensivstation) on CodePen.
.snap-container {
height: 100vh;
overflow-y: scroll;
scroll-snap-type: y mandatory;
}
.snap-section {
height: 100vh;
scroll-snap-align: start;
}
Kurz gesagt
scroll-behaviorsteuert direktes oder weiches Scrollen zu einem Ziel.scroll-snap-typegehört auf den Scroll-Container.scroll-snap-alignundscroll-snap-stopgehören auf die Snap-Elemente.scroll-paddingdefiniert Abstand innerhalb des Scroll-Containers.scroll-margindefiniert Abstand um ein Zielelement.- Scroll-Properties können für die ganze Seite oder für einen eigenen Scroll-Container verwendet werden.
Mehr zu eigenen Scroll-Containern findest du unter CSS Overflow.