- Tabel dengan banyak baris membuat pembacaan data menjadi tidak nyaman karena semakin jauh menggulir, semakin mudah lupa arti tiap kolom
- Cukup tambahkan
position: sticky; dan top: 0; pada thead untuk menerapkan header tetap
sticky memiliki dukungan browser sekitar 96% secara global, jadi tidak bisa dibilang sebagai fitur eksperimental
- Saat melihat baris di bagian bawah, seperti item ke-300, judul kolom tetap terlihat sehingga pengalaman menelusuri tabel menjadi lebih baik
- Implementasinya kecil tetapi dampaknya besar, sehingga layak diterapkan sebagai peningkatan kegunaan dasar pada halaman web yang menyediakan tabel panjang
Masalah header yang menghilang pada tabel panjang
- Pada dataset besar atau tabel dengan ratusan baris, setelah menggulir, header tabel menghilang keluar dari layar
- Saat turun hingga item ke-300, bisa menjadi sulit untuk mengecek kembali apa arti data di tiap kolom
- Semakin asing tabelnya bagi pengguna, semakin besar beban navigasi karena mereka harus membaca sambil mengingat arti tiap kolom
Menerapkan sticky pada thead
- Solusinya adalah menambahkan dua properti CSS berikut pada
thead
position: sticky;
top: 0;
- Dengan menggunakan
position: sticky bersama top: 0, header dapat ditetapkan di bagian atas layar saat menggulir
sticky memiliki tingkat dukungan sekitar 96% secara global, sehingga dapat digunakan di banyak browser
- Perilaku sebenarnya dapat dilihat di contoh CodePen
1 komentar
Opini Hacker News
Saya bisa menerima header tetap pada satu sumbu, tetapi masih menunggu hari ketika CSS mendukungnya di kedua sumbu: https://github.com/w3c/csswg-drafts/issues/8286
overflow-x: auto, tetapi kita dipaksa memilih salah satu.Saya akui pengetahuan CSS saya hampir nol, tetapi saya tetap bisa membuat web app yang kurang lebih berjalan. Baru-baru ini saya mencoba membuat header tetap pada tabel monster berisi sekitar 20 ribu baris: https://www.datasciencemeta.com/rpackages Awalnya saya berharap ada sesuatu seperti
class="table table-header-sticky"di class tabel Bootstrap, tetapi ternyata tidak ada. Setelah sekitar 20 menit mengutak-atik saran dari Stack Overflow, GPT, dan CodePen, selalu muncul efek samping aneh. Namun dengan CodePen dari artikel ini, semuanya berjalan dalam 2 menit, dan sekarang sedang saya deploy ke produksi.Membuat header tabel tetap terlihat mudah hanya dengan
position: sticky;, tetapi begitu mulai menambahkan sesuatu ke isi tabel, kompleksitasnya langsung naik. Pada tabel dengan header tetap, saya menambahkan fitur yang menyimpan indeks baris pertama yang terlihat ketika pengguna menggulir isi lalu meninggalkan halaman, kemudian memulihkannya saat kembali. Namun posisinya selalu dipulihkan sekitar satu baris terlalu rendah. Ternyata baris ke-5 sebenarnya berada di paling atas tabel, tetapi tertutup olehthead, sehingga baris ke-6 terlihat seperti baris pertama. Jadi saya menyesuaikan posisi scroll dengan memperhitungkan tinggithead, tetapi kadang masih meleset beberapa piksel. Karena tabelnya besar, lazy loading dilakukan pada event scroll, dan akibat penggunaan layout tabel otomatis bawaan, sel header membungkus baris sehingga tinggi keseluruhan header berubah. Pada akhirnya saya memasang ResizeObserver padatheaduntuk menyesuaikan posisi scroll secara dinamis saat tingginya berubah. [1] https://developer.mozilla.org/en-US/docs/Web/API/ResizeObser...Saat mengimplementasikan ini, jika Anda ingin border header ikut tetap, bisa ditangani dengan memberi
position: absolute,width: 100%,top: 0/bottom: 0, danborder-top/border-bottompadatable thead:beforedantable thead:after.Saya berharap header tabel otomatis berperilaku seperti ini. Jika pengembang sampai sengaja memakai tag terkait dan melakukan pekerjaan tambahan, biasanya kemungkinan besar perilaku inilah yang mereka inginkan.
sebagai ganti, dan 45 lapisbertumpuk di dalam tiap, jadi sepertinya tidak akan berfungsi di tempat seperti itu.Di command line, cukup kirim header ke stderr dan isi ke stdout. Jika tidak, hasil
heights | sort -k2 -nrakan menjadiGeorge 186,Wally 173,NAME HEIGHT, tetapi jika header melewati stdout, urutannya menjadiNAME HEIGHT,George 186,Wally 173.heights | (sed -u 1q; sort -k2 -nr)berjalan dengan benar. Sumber: https://stackoverflow.com/a/56151840heightsadalah file, bisa dilakukan seperti% head -1 heights ; sed 1,1d heights | sort -k2 -nr, dan jikaheightsadalah executable yang mahal untuk dijalankan dua kali, bisa seperti% heights > /tmp/heights ; head -1 /tmp/heights ; sed 1,1d /tmp/heights | sort -k2 -nr. Bisa juga dipipe keawk. Opsi lain memang kurang nyaman, tetapi lebih tidak mengejutkan, dan tetap bekerja meski penulis executable punya pemikiran berbeda.Ini tidak berfungsi untuk waktu yang lama. Dulu Chrome menonaktifkan
position: stickypada elementheaddantr: https://issues.chromium.org/issues/41303743 Saya ingat tabel dukungan browser hampir semuanya terlihat hijau, tetapi justru tidak berjalan pada tabel di Chrome.Ada juga pihak yang lebih ingin mengatakan “tolong jangan lakukan itu”: https://news.ycombinator.com/item?id=32998091
sticky?CodePen terlihat lebih baik jika
topdiberi offset sebesar border. Misalnya memakai-1pxalih-alih0dapat menghindari isi tabel terlihat menembus di atas header. Perbandingan: https://codepen.io/bradleytaunt/pen/bGZyJBj Versi perbaikan: https://codepen.io/alokmenghrajani/pen/ExMBQowSaya mengusulkan pendekatan menggunakan tinggi viewport terbatas alih-alih header tetap, sehingga header selalu terlihat. Bisa seperti DataGridXL(https://datagridxl.com). Sebagai catatan, saya yang membuatnya.