Ab Chrome 81 müssen Sie keine Event-Listener mehr hinzufügen, um das erneute Andocken zu erzwingen.
Mit CSS Scroll Snap können Webentwickler gut kontrollierte Scrollvorgänge erstellen, indem sie Scroll-Snapping-Positionen deklarieren. Ein Nachteil der aktuellen Implementierung ist, dass das Scroll-Snapping nicht gut funktioniert, wenn sich das Layout ändert, z. B. wenn die Größe des Darstellungsbereichs angepasst oder das Gerät gedreht wird. Dieses Problem wurde in Chrome 81 behoben.
Interoperabilität
Viele Browser bieten grundlegende Unterstützung für CSS Scroll Snap. Weitere Informationen finden Sie unter Can I use CSS Scroll Snap?.
Chrome ist derzeit der einzige Browser, in dem das Scroll-Snapping nach Layoutänderungen implementiert ist. Für Firefox ist ein Ticket zur Implementierung dieser Funktion offen und auch für Safari ist ein Ticket offen, um das erneute Einrasten nach Änderungen am Inhalt eines Scrollers zu ermöglichen. Derzeit können Sie dieses Verhalten simulieren, indem Sie den folgenden Code zu Ereignis-Listenern hinzufügen, um das Einrasten zu erzwingen:
javascript
scroller.scrollBy(0,0);
Dadurch wird jedoch nicht garantiert, dass der Scroller zum selben Element zurückkehrt.
Hintergrund
CSS Scroll Snap
Mit der CSS-Funktion „Scroll Snap“ können Webentwickler durch Deklarieren von Scroll-Snap-Positionen gut kontrollierte Scroll-Vorgänge erstellen. Diese Positionen sorgen dafür, dass scrollbare Inhalte richtig mit ihrem Container ausgerichtet werden, um Probleme mit ungenauem Scrollen zu vermeiden. Mit anderen Worten:
- Verhindert ungünstige Scrollpositionen beim Scrollen.
- Erzeugt den Effekt des Durchblätterns von Inhalten.
Paginierte Artikel und Bilderkarusselle sind zwei gängige Anwendungsfälle für Scroll-Snaps.

Mängel
Scroll-Snapping ermöglicht es Nutzern, mühelos durch Inhalte zu navigieren. Da es sich jedoch nicht an Änderungen an Inhalten und Layout anpassen kann, werden einige der potenziellen Vorteile eingeschränkt. Wie im Beispiel oben zu sehen ist, müssen Nutzer die Scrollpositionen bei jeder Größenänderung eines Fensters neu anpassen, um das zuvor eingerastete Element zu finden. Häufige Szenarien, die zu einer Layoutänderung führen, sind:
- Größe eines Fensters ändern
- Gerät drehen
- Entwicklertools öffnen
Die ersten beiden Szenarien machen CSS Scroll Snap für Nutzer weniger attraktiv und das dritte ist ein Albtraum für Entwickler beim Debuggen. Entwickler müssen diese Einschränkungen auch berücksichtigen, wenn sie eine dynamische Umgebung schaffen möchten, die Aktionen wie das Hinzufügen, Entfernen oder Verschieben von Inhalten unterstützt.
Eine häufige Lösung besteht darin, Listener hinzuzufügen, die einen programmatischen Scrollvorgang über JavaScript ausführen, um das Andocken zu erzwingen, wenn eine der genannten Layoutänderungen eintritt. Diese Umgehungslösung kann ineffektiv sein, wenn der Nutzer erwartet, dass der Scroller zum vorherigen Inhalt zurückkehrt. Eine weitere Verarbeitung mit JavaScript scheint den Zweck dieser CSS-Funktion fast zunichte zu machen.
In Chrome 81 integrierte Unterstützung für das erneute Andocken nach Layoutänderungen
Die genannten Mängel bestehen in Chrome 81 nicht mehr: Scroller bleiben auch nach einer Layoutänderung eingerastet. Die Scrollpositionen werden nach einer Layoutänderung neu bewertet und bei Bedarf wird zur nächstgelegenen Einrastposition zurückgekehrt. Wenn der Scroller zuvor an einem Element ausgerichtet war, das nach der Layoutänderung noch vorhanden ist, wird versucht, ihn wieder daran auszurichten. Achten Sie darauf, was passiert, wenn sich das Layout im folgenden Beispiel ändert.
NOPE
gescrollt und die Ausrichtung des Geräts vom Hoch- ins Querformat geändert haben, wird ein leerer Bildschirm angezeigt. Das bedeutet, dass die Scroll-Snap-Position verloren gegangen ist.
NOPE
bleibt im Blickfeld, auch wenn sich die Ausrichtung des Geräts mehrmals ändert.
Weitere Informationen finden Sie in der Spezifikation für das erneute Ausrichten nach Layoutänderungen.
Beispiel: Fixierte Scrollleisten
Mit „Snap after layout changes“ können Entwickler mit wenigen Zeilen CSS Sticky-Scrollbalken implementieren:
.container {
scroll-snap-type: y proximity;
}
.container::after {
scroll-snap-align: end;
display: block;
}
Möchtest du mehr erfahren? Hier finden Sie eine Demo-Chat-Benutzeroberfläche.
Zukünftige Funktionen
Alle Scroll-Effekte, die das Einrasten neu auslösen, sind derzeit sofort wirksam. Möglicherweise wird in Zukunft auch das Einrasten mit Effekten für sanftes Scrollen unterstützt. Weitere Informationen finden Sie unter Spezifikationsproblem.
Feedback
Ihr Feedback ist von unschätzbarem Wert, um das erneute Andocken nach Layoutänderungen zu verbessern. Probieren Sie es also aus und teilen Sie den Chromium-Entwicklern mit, was Sie davon halten.