Właściwość CSS scroll-initial-target umożliwia deklaratywne, oparte wyłącznie na CSS, wyświetlanie określonego elementu podrzędnego w widocznym obszarze kontenera przewijania, gdy tylko ten kontener zostanie wyrenderowany. Wcześniej deweloperzy wykorzystywali JavaScript (Element.scrollIntoView()) lub identyfikatory fragmentów adresów URL (#item-id), które mają ograniczenia i są trudne do wdrożenia.
Jak to zrobić?
Aby prawidłowo wdrożyć tę funkcję:
- Zapewnij kontener przewijania: element docelowy musi znajdować się w kontenerze przewijania (elemencie z przepełnieniem, który umożliwia przewijanie, np.
overflow: auto). Może to być dowolny element nadrzędny, w tym element główny<html>. - Kierowanie na element: zastosuj
scroll-initial-target: nearestdo konkretnego elementu podrzędnego, który chcesz wyświetlić.
Przykładowy kod: plik danych o mediach w orientacji pionowej
W tym przykładzie kanał zaczyna się od przewinięcia do konkretnego „polecanego” elementu, a nie od samej góry listy.
/**
* TARGET: The item that should be visible on initial load.
*/
.item.target {
scroll-initial-target: nearest;
}
Strategiczne wdrażanie i sprawdzone metody
- UŻYWAJ
scroll-initial-targetw przypadku treści, które zaczynają się od środka, np. kalendarza, który zaczyna się od bieżącego dnia, lub galerii, która zaczyna się od określonego obrazu. - NIE należy mylić tego z fokusem ułatwień dostępu. Ta właściwość przesuwa tylko widoczny obszar, a nie fokus klawiatury. Jeśli element docelowy ma być punktem początkowym dla użytkowników klawiatury, musisz ręcznie zarządzać elementem
element.focus(). - NIE używaj tej właściwości, jeśli potrzebujesz płynnej animacji „przewijania” podczas wczytywania. Ta właściwość jest dyskretna i natychmiast ustawia pozycję podczas fazy układu.
- NIE ustawiaj atrybutu
scroll-initial-targetna wielu elementach w tym samym kontenerze z możliwością przewijania. Jeśli kilka elementów określascroll-initial-target: nearest, przeglądarka wybiera ten, który pojawia się jako pierwszy w drzewie DOM. - PODAJ wymiary multimediów. Pozycja przewijania jest obliczana podczas początkowego układu, dlatego upewnij się, że obrazy lub filmy mają
aspect-ratiolub stałeheight/width, aby zapobiec przesunięciu celu po załadowaniu multimediów. - UWZGLĘDNIJ hierarchię pierwszeństwa: fragment adresu URL (np.
example.com/#top) i właściwośćscroll-startna poziomie kontenera mają pierwszeństwo przedscroll-initial-target.
Strategia zastępcza
W przypadku przeglądarek, które nie obsługują jeszcze interfejsu API, użyj zastępczego kodu JavaScript. Użyj zdarzenia DOMContentLoaded, aby przeglądarka przewinęła element do widoku, gdy tylko zakończy się analizowanie kodu HTML. Dzięki temu użytkownik nie będzie musiał czekać na załadowanie wszystkich obrazów i zasobów. Możesz też umieścić skrypt na końcu elementu <body>, co pozwoli uniknąć konieczności użycia detektora zdarzeń.
/**
* 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" });
}
}
});