- Anchor link'ler basitçe butona tıkla → başlığa kaydır yapısına sahip olsa da, gerçek uygulamada sorunlar ortaya çıkar
- Alt kısımda yer alan başlıklar, viewport'un üstüne tam olarak kaydırılamaz; bu da UX'in kötüleşmesine yol açar
- Bunu çözmek için çeşitli yaklaşımlar denenir ve zamanla giderek daha rafine ve karmaşık yöntemlere evrilir
Basit çözüm: padding eklemek
- Alt başlıkların kaydırmayla yakalanabilmesi için boşluk ekleme yöntemi
- Delta hesaplanıp padding eklenirse sorun çözülebilir
- Ancak tasarım ekibi gereksiz boşluğu sevmeyebilir
Pratik çözüm: tetik çizgisini taşımak
- Tetik çizgisi viewport'un alt kısmına taşınarak alt başlıkların ona ulaşması sağlanır
- Sorun şu ki başlık viewport'un en altına yerleşir ve okunabilirlik düşer
İyileştirilmiş yaklaşım: sanal tetik noktası oluşturmak
- Gerçek başlık konumunu koruyup, yalnızca tetiklenme noktasını yukarı taşınmış sanal bir konuma alır
- Her başlığa farklı ayar uygulanabilmesini sağlayan esneklik sunar
- Ancak ilk başlık fazla yukarı taşınır ve yeni bir sorun doğar → ayrı ayrı ayarlama gerekir
Daha iyi yöntem: tetik konumunu orantılı taşımak
- Tüm tetikleri aynı miktarda taşımak yerine, ilk başlık olduğu gibi kalır, son başlık ise en fazla taşınır
- Ortadaki başlıklar konumlarına göre orantılı olarak taşınır
- Başlık sırasını koruma ve kaydırmayla ulaşılabilirliği garanti etme koşullarını sağlar
- Bu yöntem basit ve pratiktir; çoğu durumda uygun şekilde çalışır
Gelişmiş yaklaşım: özel bir mapping fonksiyonuyla optimizasyon
- Tetik konumu rastgele %25 noktasına yerleştirildiği için, sanal konum özgün konumdan fazla sapabilir
- Bunu çözmek için MSE(Mean Squared Error) kullanan bir optimizasyon yaklaşımı devreye alınır
Kayıp fonksiyonunun yapısı
- Anchor Penalty: sanal başlık konumunun özgün konumdan ne kadar saptığı
- Section Penalty: bölümler arası mesafenin (kaydırma uzunluğunun) ne kadar değiştiği
- Bu iki değer ağırlıklarla ayarlanarak en iyi tetik konumu bulunur
Kısıtlar
- Sayfa sınırları içinde kalmalı
- İlk başlık yukarı taşınmamalı
- Başlık sırası korunmalı
İçgörü: basit orantılı taşımanın sınırları
- Çok uzun sayfalarda (örn. İncil'in tamamı) sayfanın geneline yayılmış küçük kaydırmaların birikmesi gibi verimsizlikler ortaya çıkar
- Sayfa uzadıkça hata büyüyebilir ve UX'i olumsuz etkileyebilir
Nihai çözüm: smoothstep tabanlı değişken mapping fonksiyonu
- Her başlığın konumu 0~1 aralığında normalize edilir ve buna göre ayarlama oranı hesaplanır
- Smoothstep fonksiyonu (
S(x) = 3x² - 2x³) ile yumuşak bir geçiş sağlanır
- Ayarlamanın başlayacağı
a konumu belirlenir; bu noktaya kadar taşıma yapılmaz, sonrasında ise yumuşak biçimde artar
- Örn:
a = 0.4 ise üstteki %40'lık başlıklarda taşıma olmaz, alttaki %60 için kademeli ayar uygulanır
- Sonuç olarak üstteki başlıklar özgün konumunu korur, alttakiler ise en yüksek ayarı alır → daha doğal bir UX sağlar
Doğrulama ve kapanış
- Nihai uygulama, tasarımsal incelik ile pratiklik arasında denge kuran bir çözümdür
- Elbette tasarımcı geri bildirimi “...yeter ki düzgün çalışsın” da olabilir
- Ama en azından bu blog yazısı, unutulmayacak kadar incelikli bir mühendislik kaydı olarak kalır
1 yorum
Hacker News görüşleri
Bir backend geliştiricisi olarak frontend işlerine bakarken bazen karmaşıklık karşısında şaşırıyorum
Yan gezinmedeki "aktif anchor" göstergesinin UX amacı sorgulanıyor
Anchor linklerin en önemli UX işlevi, başkalarına gönderilebilmesi ve yer imi olarak kaydedilebilmesi olmalı
#anchor-nameURL'sini kullanmadığı için bu işlevi sunmuyorJira'nın anchor/kalıcı linklerine sinir olup tıkladım, ama bu benzer olsa da farklı bir yaklaşım
Ana sayfa içeriğinin altına padding eklemek ideal olur
Modern tarayıcılarda text fragment kullanarak sayfanın belirli bir kısmını vurgulamak mümkün
Birden fazla "aktif" duruma izin vermek de mümkün
Diğer yorumları okumak eğlenceliydi
Firefox masaüstünde "güzel çözüm", "orta bölüm"ü vurguluyor
Yazı temiz ve blog tasarımı daha da ilgi çekici