Properti CSS scroll-initial-target menawarkan cara deklaratif khusus CSS untuk membawa elemen turunan tertentu ke area yang terlihat dari penampung scroll-nya segera setelah penampung tersebut dirender. Sebelumnya, developer mengandalkan JavaScript (Element.scrollIntoView()) atau ID fragmen URL (#item-id), yang keduanya memiliki batasan dan sulit diterapkan.
Cara Menerapkan
Agar berhasil menerapkan ini:
- Pastikan ada container scroll: Elemen target harus berada di dalam container scroll (elemen dengan overflow yang memungkinkan scroll, seperti
overflow: auto). Elemen ini dapat berupa elemen ancestor apa pun, termasuk elemen root<html>. - Targetkan Item: Terapkan
scroll-initial-target: nearestke elemen turunan tertentu yang ingin Anda tampilkan.
Contoh Kode: Feed Media Vertikal
Dalam contoh ini, feed mulai di-scroll ke item "unggulan" tertentu, bukan ke bagian paling atas daftar.
/**
* TARGET: The item that should be visible on initial load.
*/
.item.target {
scroll-initial-target: nearest;
}
Penerapan Strategis & Praktik Terbaik
- LAKUKAN penggunaan
scroll-initial-targetuntuk pengalaman "mulai dari tengah", seperti kalender yang dimulai pada hari ini atau galeri yang dimulai pada gambar tertentu. - JANGAN bingung membedakannya dengan fokus aksesibilitas. Properti ini hanya memindahkan area pandang visual; properti ini tidak memindahkan fokus keyboard. Anda harus mengelola
element.focus()secara manual jika target dimaksudkan sebagai titik awal bagi pengguna keyboard. - JANGAN gunakan ini jika Anda memerlukan animasi "scrolling" yang mulus saat dimuat; properti ini bersifat diskret dan menetapkan posisi secara instan selama fase tata letak.
- JANGAN tetapkan
scroll-initial-targetpada beberapa elemen dalam penampung yang dapat di-scroll yang sama. Jika beberapa elemen menentukanscroll-initial-target: nearest, browser akan memilih elemen yang muncul pertama dalam urutan hierarki DOM. - LAKUKAN: Berikan dimensi untuk media. Karena posisi scroll dihitung selama tata letak awal, pastikan gambar atau video memiliki
aspect-ratioatauheight/widthtetap untuk mencegah target bergeser setelah media dimuat. - LAKUKAN penghitungan untuk Hierarki Prioritas: Fragmen URL (misalnya,
example.com/#top) dan propertiscroll-starttingkat penampung lebih diprioritaskan daripadascroll-initial-target.
Strategi Penggantian
Untuk browser yang belum mendukung API, gunakan penggantian JavaScript. Gunakan peristiwa DOMContentLoaded untuk memastikan browser men-scroll elemen ke tampilan segera setelah penguraian HTML selesai, sehingga memberikan pengalaman yang lebih cepat daripada menunggu semua gambar dan resource dimuat. Atau, menempatkan skrip di akhir elemen <body> juga dapat diterima dan tidak memerlukan pemroses peristiwa.
/**
* 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" });
}
}
});