Die CSS-Property scroll-initial-target bietet eine deklarative, reine CSS-Methode, um ein bestimmtes untergeordnetes Element in den sichtbaren Bereich des Scrollcontainers zu bringen, sobald dieser Container gerendert wird. Bisher haben Entwickler JavaScript (Element.scrollIntoView()) oder URL-Fragmentbezeichner (#item-id) verwendet, die jedoch beide Einschränkungen haben und schwierig zu implementieren sind.
Implementierung
So implementieren Sie diese Funktion:
- Scroll-Container verwenden: Das Zielelement muss sich in einem Scroll-Container befinden (ein Element mit Überlauf, das Scrollen ermöglicht, z. B.
overflow: auto). Dies kann ein beliebiges übergeordnetes Element sein, einschließlich des Stammelements<html>. - Element als Ziel festlegen: Wenden Sie
scroll-initial-target: nearestauf das untergeordnete Element an, das Sie in den sichtbaren Bereich bringen möchten.
Beispielcode: Vertikaler Medienfeed
In diesem Beispiel wird ein Feed zu einem bestimmten „vorgestellten“ Element gescrollt, anstatt ganz oben in der Liste zu beginnen.
/**
* TARGET: The item that should be visible on initial load.
*/
.item.target {
scroll-initial-target: nearest;
}
Strategische Implementierung und Best Practices
- DO use
scroll-initial-targetfor "middle-start" experiences, such as a calendar starting on the current day or a gallery starting on a specific image. - Verwechseln Sie dies NICHT mit dem Fokus für Bedienungshilfen. Mit dieser Property wird nur der visuelle Darstellungsbereich verschoben, nicht der Tastaturfokus. Sie müssen
element.focus()manuell verwalten, wenn das Ziel der Ausgangspunkt für Tastaturnutzer sein soll. - Verwenden Sie diese Option NICHT, wenn Sie beim Laden eine flüssige „Scroll“-Animation benötigen. Diese Eigenschaft ist diskret und legt die Position während der Layoutphase sofort fest.
- Legen Sie
scroll-initial-targetNICHT für mehrere Elemente innerhalb desselben scrollbaren Containers fest. Wenn mehrere Elementescroll-initial-target: nearestangeben, wählt der Browser das Element aus, das in der DOM-Baumreihenfolge zuerst angezeigt wird. - DO provide dimensions for media. Da die Scrollposition während des ersten Layouts berechnet wird, sollten Bilder oder Videos
aspect-ratiooder festeheight/widthhaben, damit sich das Ziel nach dem Laden der Medien nicht verschiebt. - BERÜCKSICHTIGEN Sie die Rangfolge: Ein URL-Fragment (z.B.
example.com/#top) und die Propertyscroll-startauf Containerebene haben Vorrang vorscroll-initial-target.
Fallback-Strategie
Verwenden Sie für Browser, die die API noch nicht unterstützen, ein JavaScript-Fallback. Verwende das Ereignis DOMContentLoaded, damit der Browser das Element in die Ansicht scrollt, sobald das HTML-Parsing abgeschlossen ist. Das ist schneller, als auf das Laden aller Bilder und Ressourcen zu warten. Alternativ können Sie das Script auch am Ende des <body>-Elements platzieren. Dann ist kein Event-Listener erforderlich.
/**
* Progressive Enhancement Fallback
*/
document.addEventListener("DOMContentLoaded", () => {
// Check for native CSS support
if (!CSS.supports("scroll-initial-target", "nearest")) {
const feedTarget = document.querySelector(".item.target");
if (feedTarget) {
// 'block: center' ensures the featured media is centered in view
feedTarget.scrollIntoView({ behavior: "instant", block: "center" });
}
}
});