- Çok satırlı tablolarda kaydırdıkça sütunların ne anlama geldiğini unutmak kolaylaşır ve veriyi okumak zorlaşır
thead öğesine yalnızca position: sticky; ve top: 0; ekleyerek başlığı sabitleme uygulanabilir
sticky, dünya genelinde yaklaşık %96 tarayıcı desteğine sahip olduğundan deneysel bir özellik sayılmaz
-
- öğe gibi daha aşağıdaki satırlara bakarken bile sütun başlıkları görünür kaldığı için tablo içinde gezinme deneyimi iyileşir
- Uygulaması küçük ama etkisi büyük olduğundan, uzun tablolar sunan web sayfalarında temel bir kullanılabilirlik iyileştirmesi olarak uygulanmaya değer
Uzun tablolarda başlığın kaybolması sorunu
- Büyük veri kümelerinde veya yüzlerce satırlık tablolarda, kaydırma sonrası tablo başlığı ekranın dışına çıkar
-
- öğeye kadar inildiğinde, her sütundaki verinin ne ifade ettiğini tekrar kontrol etmek zor olabilir
- Özellikle ilk kez görülen tablolarda sütunların anlamını akılda tutarak okumak gerektiği için gezinme yükü artar
thead öğesine sticky uygulamak
- Çözüm,
thead öğesine iki CSS özelliği eklemektir
position: sticky;
top: 0;
position: sticky ile top: 0 birlikte kullanıldığında, kaydırma sırasında başlık ekranın üst kısmına sabitlenebilir
sticky, yaklaşık %96 küresel destek oranına sahip olduğundan birçok tarayıcıda kullanılabilir
- Gerçek davranış CodePen örneğinde görülebilir
1 yorum
Hacker News yorumları
Tek eksende sabit başlığı kabul ederim ama CSS’in iki eksende birden destekleyeceği günü hâlâ bekliyorum: https://github.com/w3c/csswg-drafts/issues/8286
overflow-x: autoda kullanmak istiyorsunuz, ama ikisinden birini seçmeniz söyleniyorİtiraf edeyim, CSS bilgim neredeyse hiç yokken bile idare eder çalışan web uygulamaları geliştiriyorum. Yakın zamanda yaklaşık 20 bin satırlık canavar bir tabloda başlığı sabitlemeye çalıştım: https://www.datasciencemeta.com/rpackages Başta Bootstrap tablo sınıflarında
class="table table-header-sticky"gibi bir şey olmasını bekledim ama yoktu; Stack Overflow, GPT ve CodePen önerileriyle 20 dakika kadar uğraşınca da garip yan etkiler çıktı Ama bu yazıdaki CodePen ile 2 dakikada çalıştı ve şu anda prod ortama dağıtıyorumTablo başlığını sabitlemek
position: sticky;ile kolay görünüyor, ama tablo içeriğine bir şeyler eklemeye başlar başlamaz karmaşıklaşıyor Sabit başlıklı bir tabloda, kullanıcı gövdeyi kaydırıp sayfadan ayrıldığında ilk görünen satırın indeksini kaydedip geri döndüğünde geri yükleyen bir özellik ekledim; ama her zaman yaklaşık bir satır aşağıya geri yüklüyordu. Meğer 5. satır aslında tablonun en üstündeymiş, fakattheadüstüne bindiği için 6. satır ilk satır gibi görünüyormuş Bu yüzdentheadyüksekliğini hesaba katarak kaydırma konumunu ayarladım, ama bazen birkaç piksel sapıyordu; tablo büyük olduğundan kaydırma olayında gecikmeli yükleme yapıyor ve varsayılan otomatik tablo yerleşimini kullanıyorduk, bu da başlık hücrelerinin satır kırıp toplam başlık yüksekliğini değiştirmesine yol açıyordu. Sonundatheadüzerine bir ResizeObserver bağlayıp yükseklik değiştiğinde kaydırma konumunu dinamik olarak ayarladım [1] https://developer.mozilla.org/en-US/docs/Web/API/ResizeObser...Bunu uygularken başlığın kenarlığının da birlikte sabit kalmasını istiyorsanız,
table thead:beforevetable thead:afteriçinposition: absolute,width: 100%,top: 0/bottom: 0,border-top/border-bottomvermek gibi bir yöntem kullanılabilirTablo başlıklarının otomatik olarak böyle davranmasını isterdim. Geliştirici ilgili etiketleri özellikle kullanıp ek iş yaptıysa, çoğu durumda zaten istenen davranışın bu olması muhtemel
yerine 500 taneve heriçinde 45 kat iç içe geçmişile tablo yapan site sayısı arttı; böyle yerlerde işe yarayacağını sanmıyorumKomut satırında başlık stderr’e, gövde stdout’a gönderilebilir Böyle yapmazsanız
heights | sort -k2 -nrsonucuGeorge 186,Wally 173,NAME HEIGHTsırasına gelir; ama başlık stdout’u bypass ederse sıraNAME HEIGHT,George 186,Wally 173olurheights | (sed -u 1q; sort -k2 -nr)düzgün çalışır Kaynak: https://stackoverflow.com/a/56151840heightsbir dosyaysa% head -1 heights ; sed 1,1d heights | sort -k2 -nrgibi yapabilirsiniz;heightsiki kez çalıştırması pahalı bir yürütülebilir dosyaysa% heights > /tmp/heights ; head -1 /tmp/heights ; sed 1,1d /tmp/heights | sort -k2 -nrgibi yapabilirsiniz.awkile pipe etmek de mümkün Diğer seçenekler daha az pratik ama daha az şaşırtıcı ve yürütülebilir dosyanın yazarı farklı düşünse bile çalışırBu uzun süre çalışmadı. Chrome eskiden
theadvetröğelerindeposition: stickykullanımını devre dışı bırakmıştı: https://issues.chromium.org/issues/41303743 Tarayıcı destek tablosu neredeyse tamamen yeşil görünüyordu ama hatırladığım kadarıyla Chrome’daki tablolarda çalışmıyorduAçıkçası “lütfen yapmayın” demek isteyen taraf da var: https://news.ycombinator.com/item?id=32998091
stickyözelliğinin nesi kötü?CodePen’de
topdeğerini kenarlık kadar ofsetlemek daha iyi görünüyor. Örneğin0yerine-1pxkoyarsanız tablo gövdesinin başlığın üzerinden görünmesini engelleyebilirsiniz Karşılaştırma: https://codepen.io/bradleytaunt/pen/bGZyJBj Düzeltilmiş sürüm: https://codepen.io/alokmenghrajani/pen/ExMBQowSabit başlık yerine, başlığın her zaman görünür kalması için sınırlı viewport yüksekliği kullanmayı öneriyorum DataGridXL(https://datagridxl.com) gibi yapılabilir. Not: Bunu ben yaptım