CSS'te ilginç "position: sticky" davranışı

  • Konuyu başlatan Konuyu başlatan brkdnmz
  • Başlangıç Tarihi Başlangıç Tarihi
  • Mesaj Mesaj 1
  • Görüntüleme Görüntüleme 280
Merhaba,

Her şey, bu konunun açılmasıyla başladı:


Konuda, Techolay Sosyal'deki navigasyon çubuğunun (navbar) üstünde ince bir boşluk olduğu belirtiliyordu. Bu sorun şu an koyu temada giderilmiş durumda fakat masaüstünde açık temada %25, %75, %125 ve %175 yakınlaştırma düzeylerinde söz konusu boşluğu gözlemleyebilirsiniz. Chrome için örnek ekran görüntülerini aşağıda paylaştım:
  • %25:
  • %75:
  • %125:
  • %175:
Gördüğünüz üzere bu ince boşluktan navigasyon çubuğunun arkası görülebiliyor. Diğer yakınlaştırma düzeylerinde Chrome'da böyle bir boşluk ortaya çıkmıyor. Birkaç arkadaşımız Edge gibi diğer tarayıcılarda da aynı sorunu gözlemleyebiliyordu.

Öncelikle, bu sorun koyu temada niye yok da sadece açık temada var?

Header nasıl oluyorsa çaktırmadan iteliyor gibi. .p-header-content elementinin padding'ini değiştirmeyi önerdim.

Bu öneri üzerine navigasyon çubuğunun hemen üzerindeki, logonun bulunduğu kısmın padding (element içi boşluk) değerleri güncellendi; ancak şu an temalardaki değerler farklı:
  • Açık temada padding: 6px 0 (burada ilk değer dikey, ikinci değer yatay padding oluyor):

  • Koyu temada padding: 7px 0:
(Chrome DevTools'u, tarayıcıda F12'ye basarak veya sağ tık menüsünde "İncele"ye basarak açabilirsiniz. Sonrasında sayfadaki elementleri ister DevTools'un sol üstündeki "element seçme" aracıyla seçebilir, ister DevTools'ta "Elements" sekmesi altında gözüken HTML dokümanından bulabilirsiniz.)

Yani düşeyde 1 piksellik bir fark var. Zaten boşluk da 1 piksellik bir yüksekliğe sahip gibiydi. Bu fark kapatılmış oldu, değil mi? Maalesef. Örneğin değeri 8px'e çıkarırsanız 6px'tekiyle aynı yakınlaştırma düzeyleri için boşluğun tekrar belireceğini görebilirsiniz. Aşağıda padding: 8px iken %125 düzeyi için bir ekran görüntüsü paylaştım:Yani koyu temada uygulanan çözüm denk gelmiş gibi görünüyor. Hatta şimdi bu yazıyı yazarken "belki teklik/çiftlikten kaynaklanan bir durumdur" diye 1px, 2px, 3px vb. değerler denedim, gerçekten değer tekken boşluk gözükmüyor. Siz de denemek isterseniz DevTools'ta "Styles" kısmında gördüğünüz değere tıklayıp istediğiniz gibi değiştirebilirsiniz.

En yukarıda bağlantısını paylaştığım konuda bu sorun üzerinde bir süre durduk. O konudaki mesajların birkaç tanesini alıntılamak istiyorum:

  • İnternetteki araştırmaların sonucu böyle bir çözüm bulmuştum. Navigasyon çubuğu, position: sticky; top: 0; özelliklerinin birlikte kullanımı sayesinde aşağı kaydırırken sayfanın üstüne yapışıyor. Burada top: 0 özelliği, çubukla sayfa arasında boşluk olmamasını sağlıyor; fakat göründüğü üzere boşluk yine de çeşitli durumlarda, farklı yakınlaştırma düzeylerinde oluşabiliyor. Bu değeri -1px'e çekmek çubuğun yukarı doğru 1 piksel yukarı hareket etmesini, yani çubuğun üstten 1 piksellik kısmının sayfanın dışında kalmasını sağlıyor. Bu, padding değerini değiştirmeden bile boşluğun görünmesini engelliyor. Hatta sonra -0.1px değerinin bile yettiğini gördüm. Aslında düşünürseniz bu pek hoş bir değişiklik olmaz, her ne kadar çıplak gözle pek fark edilemese de öngörülemeyen farklı sorunlara yol açabilir. Haliyle, bu çözüm uygun görülmedi.

    Aslında logo kısmındaki padding'i değişikliği yerine top: -0.1px değişikliği bana daha uygun geldi çünkü bu değişiklik sadece navigasyon çubuğunu etkiliyor ki etki minimal seviyede. İleride logo kısmının padding'i çeşitli sebeplerden dolayı değiştirilmek istenirse boşluk sorununun tekrar ortaya çıkma ihtimali var.


  • Burada, logodaki vertical-align: middle özelliği vertical-align: bottom olarak değiştirilince sorunun giderildiği belirtildi; ama sonradan belirtildiği üzere farklı yakınlaştırma düzeyleri için sorun yine yaşanıyordu. Mesela %125'te sorun yokken %150'de oluyordu.

  • Bu sefer alıntı yapmama gerek yok. Benzer bir sorunun sebebi Reddit'teki bir yorumda açıklanmış:

    Reddit'te bahsi geçen benzer sorunun kaynağının tarayıcıdaki "sub-pixel rounding" hesaplaması olduğu söylenmiş. Anladığım kadarıyla, basit tabiriyle "yakınlaştırma sonucu oluşan ondalıklı piksel değerlerinin tam sayılara yuvarlanması" ama tam emin değilim.


  • Ben de anlam veremiyordum, bu söylenenler mantıklı gelmişti. İlginçti yani yaşanan sorun.

    Bu söylenenler üzerine araştırmalarımda daha da derine inmek istedim çünkü soruna mantıklı bir açıklama bulamamak çok rahatsız etmeye başlamıştı. Odağımı position: sticky özelliğine yönlendirmek istedim.

Paylaştığım son alıntıda, bu sorun üzerine yaptığım birkaç deneyi ve edindiğim bulguları inceleyebilirsiniz.

Uzun lafın kısası, position: sticky; top: 0; bazı durumlarda çok ilginç davranıp sorun çıkarabiliyor. Anladığım kadarıyla tarayıcı kaynaklı bir sorunu var ve bunun üstesinden gelmek için çeşitli çözümler var.

Hâlâ pek açıklığa kavuşturamadığım bir durum. Bu yazı aracılığıyla sizleri de haberdar etmek istedim.

Okuduğunuz için teşekkürler.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…