11 puan yazan GN⁺ 2026-03-11 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Geleneksel tooltip uygulamalarında zorunlu olan JavaScript event listener'ları, durum yönetimi ve ARIA özniteliklerinin elle senkronizasyonu, Popover API tarafından tarayıcının yerel işlevi olarak devralınıyor
  • Yalnızca popover ve popovertarget öznitelikleriyle açma/kapama, Esc tuşu işleme ve klavye gezinmesi otomatik çalışıyor
  • Ekran okuyucu öngörülebilirliği artıyor, aria-expanded otomatik senkronize ediliyor ve odak geri yükleme gibi erişilebilirlikle ilgili hata kategorileri tamamen ortadan kalkıyor
  • Zamanlama kontrolü, hover intent tespiti gibi bazı alanlarda hâlâ JavaScript gerekiyor, ancak temel etkileşim modeli artık tarayıcı tarafından yönetiliyor
  • Büyük ölçekli tasarım sistemlerinde veya karmaşık konumlandırma gereken durumlarda kütüphaneler hâlâ geçerliliğini koruyor, ancak varsayılan yaklaşım yerel API'lere kayıyor

Geleneksel tooltip'lerin sorunları

  • Popover API'den önce tarayıcıda fare, klavye ve yardımcı teknolojiler genelinde çalışan yerel tooltip kavramı yoktu
  • Tetikleyici öğe, gizli tooltip öğesi ve ikisini koordine eden JavaScript'ten oluşan aynı desen sürekli tekrar ediyordu
  • Yüzeyde basit görünse de, gerçek kullanıcılara sunulduğunda çeşitli sorunlar ortaya çıkıyordu
    • Klavye kullanıcıları Tab ile tetikleyiciye gelse bile tooltip görünmüyordu
    • Ekran okuyucu iki kez okuyabiliyor ya da hiç okumuyordu
    • Fare hızlı hareket ettiğinde titreme (flicker) oluşuyordu
    • Küçük ekranlarda içerikler çakışıyordu
    • Esc tuşuyla kapanmıyor, odak kayboluyordu
  • Zamanla event listener'lar birikiyor, hover/focus ayrı ayrı ele alınıyor, dış tıklama özel durumları ve ARIA özniteliklerinin elle senkronizasyonu gibi nedenlerle kod şişiyordu

Neden kütüphane kullanılıyordu

  • Kütüphaneler konumlandırma, viewport sınırında çevirme, giriş türüne göre event koordinasyonu ve karmaşık yerleşimlerde scroll algılama gibi gerçek işleri yapıyordu
  • Yalnızca konumlandırma bile bağımlılığı haklı çıkaracak kadar karmaşıktı; scroll container'lar, transform'lar ve duyarlı yerleşimler ayrı bir zorluktu
  • Asıl sorun ise erişilebilirlik davranışında ortaya çıkıyordu
    • Tooltip geç görünüyor ya da hiç görünmüyordu
    • Hızlı tab geçişlerinde tooltip atlanıyordu
    • Esc ile kapatma güvenilir değildi
  • Fare kullanıcıları anındalık, klavye kullanıcıları ise öngörülebilirlik beklediğinden, ikisini birden desteklemek gecikme ve edge case'ler yaratıyordu
  • Ekran okuyucularda tooltip'in okunması, okunmaması veya iki kez okunması gibi tutarsız davranışlar görülüyordu
  • ARIA özniteliklerinin elle güncellenmesinde tek bir ayrıntı bile atlanırsa erişilebilirlik ağacında karışıklık ya da görünmez durumlar oluşabiliyordu

Sorun kodun kendisi değil, platformun sınırıydı

  • Uygulama test edilmişti ve kütüphaneler sağlamdı, ancak temel sorun web platformunda uygun affordance'ların bulunmamasıydı
  • Tarayıcının bunun bir tooltip olduğunu anlamasının bir yolu yoktu; her şey genel amaçlı öğeler, event listener'lar, elle ARIA ve özel kapatma mantığı gibi konvansiyonlara (convention) dayanıyordu
  • Zamanla küçük bir değişiklik bile risk taşımaya başlıyor, önemsiz bir düzeltme dahi regresyona yol açan kırılgan bir yapıya dönüşüyordu
  • Yeni bir tooltip eklendiğinde aynı karmaşıklık aynen devralınıyordu

Popover API ile ilk uygulama

  • Geçişin nedeni yeni bir deneye girmek değil, tarayıcının zaten anlaması gereken tooltip davranışını sürdürmekten yorulmuş olmaktı
  • En küçük biçimde denendi: <button popovertarget="tip-1"> + <div id="tip-1" popover="manual" role="tooltip">
  • Event listener yok, durum takibi yok, JavaScript içinde ARIA güncellemesi yok
  • Buton odak alınca tooltip görünüyor, Esc basılınca kayboluyor

Hemen fark edilen farklar

  • JavaScript olmadan açma/kapama: Tarayıcı çağrıyı yalnızca HTML ile yönetiyor; tetikleyiciyle tooltip arasındaki ilişki açıkça tanımlanıyor
  • Esc tuşunun otomatik çalışması: Ek bir tuş dinleyicisi olmadan tarayıcı popover'ı kapatılabilir bir öğe olarak anlıyor
  • ARIA durumunun otomatik senkronizasyonu: aria-expanded özniteliği popover açılıp kapandıkça otomatik güncelleniyor; elle yönetim gerekmiyor ve eski durum riski ortadan kalkıyor
  • Kodun azalmasından daha önemlisi sorumluluğun el değiştirmesi: Önceden JavaScript'in “var ettiği” tooltip artık tarayıcının işaretlemedeki rolünü anlayıp odak modeli, erişilebilirlik ağacı ve yerel kapatma kurallarına katıldığı bir yapıya dönüşüyor

Invoker Commands'ı anlamak

  • popovertarget="id", butonu popover öğesine bağlar
  • popovertargetaction ile davranış belirlenir
    • show: yalnızca aç
    • hide: yalnızca kapat
    • toggle (varsayılan): açıksa kapat, kapalıysa aç
  • Aynı tooltip için birden fazla tetikleyici kullanılabilir ve temel etkileşim için JavaScript gerekmez

Erişilebilirlikte ücretsiz kazanımlar

  • Klavye "kendiliğinden çalışır"

    • Önceden odak tooltip'i tetiklemeli, blur gizlemeli, Esc elle bağlanmalı ve zamanlama da doğru ayarlanmalıydı; yani çok katmanlı bir yapı vardı
    • popover özniteliği (auto veya manual) ayarlandığında tarayıcı temel davranışı kendisi sağlar: Tab/Shift+Tab normal çalışır, Esc her seferinde güvenilir biçimde kapatır
    • Kod tabanından global keydown handler'lar, Esc için özel temizleme mantığı ve klavye gezinmesi sırasında durum kontrolleri çıkarılır
  • Ekran okuyucuda öngörülebilirlik

    • En büyük iyileşme alanı buydu; daha önce dikkatli ARIA kullanımına rağmen davranış değişebiliyor, küçük bir değişiklik bile risk yaratıyordu
    • popover="manual" role="tooltip" kullanıldığında davranış çok daha istikrarlı ve öngörülebilir hâle geliyor
    • Geçişten sonra Lighthouse artık yanlış ARIA durumu uyarısı göstermiyor — çünkü hata yapılabilecek özel ARIA durumları artık yok
  • Odak yönetimi

    • Önceden odak tetikleyince gösterme, odak tooltip içine geçtiğinde kapatmama, blur işleme ve odağı elle geri getirme gibi karmaşık kurallar vardı
    • Popover API ile odak popover'a doğal şekilde geçer ve kapandığında otomatik olarak tetikleyiciye geri döner
    • Odak geri yükleme kodu eklenmedi; tam tersine kaldırıldı

Popover API'nin hâlâ eksik kaldığı alanlar

  • Tooltip zamanlaması

    • Yerel popover anında açılıp kapanır; fare biraz hızlı hareket ettiğinde ya da tetikleyiciye sadece hafifçe değdiğinde tooltip titreyebilir ve istikrarsız hissettirebilir
    • Hover/focus ile açılma arasında gecikme kontrolüne hâlâ ihtiyaç vardır
    • Temel açma/kapama davranışı tarayıcı ve HTML invoker commands tarafından yönetilir; JavaScript ise yalnızca işaretçi tooltip'e geçince gizlemeyi iptal etmek gibi kasıtlı davranış iyileştirmeleri için kullanılır
    • CSS tarafında da bu alan araştırılıyor; interest/invoker ile ilgili çalışmalar, giriş/çıkış gecikmelerini doğrudan CSS ile ifade etmeyi mümkün kılacak yönde ilerliyor
  • Hover intent ve Invoker Commands

    • Tarayıcı, birinin neden bir öğenin üzerine hover yaptığını bilemez — bunun kasıtlı mı olduğu, yoksa işaretçinin sadece üzerinden mi geçtiği ayırt edilemez
    • Invoker commands temel açma/kapamayı yönettiği için JavaScript artık etkileşim modelinin sahibi değildir; sadece bunun üzerine niyet katmanı ekler
    • JavaScript yalnızca kapatmadan önce kısa gecikme eklemek veya işaretçi tooltip'e giderse kapatmayı iptal etmek gibi tarayıcının çıkaramayacağı davranışlar için kullanılır
  • Manual popover ve odak

    • popover="manual" kullanıldığında, auto popover'dan farklı olarak tarayıcı odağı otomatik geri yüklemez
    • Tooltip odakla açılıp blur ile kapanıyorsa, odağın tetikleyiciye açıkça geri verilmesi gerekir
    • Bu, platform davranışı ile kullanıcı niyeti arasındaki net sınırı gösterir
  • Dürüst değerlendirme

    • Popover API tooltip'leri sihirli biçimde çözmez, ancak kırılgan altyapıyı yeniden kurma işini durdurur
    • Hâlâ JavaScript kullanılır ve edge case'ler düşünülür, ancak artık UI primitive'lerini yeniden üretmek yerine ürün sorunlarını çözmeye odaklanılabilir

Hâlâ tooltip kütüphanesine ihtiyaç duyulan durumlar

  • Büyük ölçekli veya olgun tasarım sistemleri

    • Birden çok ekibin kullandığı büyük tasarım sistemlerinde merkezi davranış, belgelenmiş desenler ve tutarlı varsayılanlar için kütüphane mantıklı olabilir
    • Temel etkileşim modelini değiştirmek yalnızca teknik değil, aynı zamanda organizasyonel bir karardır
    • Erişilebilirlik nüanslarına aşina olmayan ekip üyeleri için bir güvenlik korkuluğu sağlar
  • Karmaşık konumlandırma gereksinimleri

    • İç içe scroll container'lar arasında çarpışma tespiti, özel flipping mantığı ve offset/sınırların ince ayarı gerekiyorsa Floating UI gibi kütüphaneler hâlâ avantajlıdır
    • CSS anchor positioning bu sorunun büyük kısmını kapsamayabaşlıyor — tetikleyiciye göre göreli yerleşim, viewport farkındalığıyla yerleşim ve kenarda çevirme saf CSS ile mümkün hâle geliyor
    • Bu hâlâ yeni bir özellik ve bilinen sorunları var, ancak Interop kapsamına alınmış durumda; bu da tam ve tutarlı tarayıcı desteği için umut veriyor
    • Bugün tutarlı cross-browser davranış gerekiyorsa kütüphane hâlâ pratik seçimdir
  • Erişilebilirlik deneyimi az olan ekipler

    • Erişilebilirlik bilgisi sınırlı ekiplerde iyi bir kütüphane güvenlik ağı işlevi görür — kusursuz erişilebilirliği garanti etmese de yaygın hataları önler
    • Popover API daha iyi varsayılanlar sunsa da role, label, odak yönetimi ve testi ne zaman eklemek gerektiğini bilmek hâlâ önemlidir
    • Anlayış olmadan yerel araçlar da yanlış kullanılabilir

Sonuç

  • Popover API sayesinde tooltip artık simüle edilen bir şey değil, tarayıcının anladığı bir öğe hâline geliyor
  • Açma, kapama, klavye davranışı, Esc işleme ve erişilebilirliğin büyük bölümü doğrudan platform tarafından sağlanıyor
  • Karmaşık tasarım sistemlerinde, ileri düzey özelleştirmede ve legacy kısıtlarında kütüphaneler hâlâ geçerlidir; ancak varsayılan yaklaşım değişiyor
  • En basit tooltip'in aynı zamanda en doğru tooltip olabildiği ilk döneme giriliyor
  • Üründeki tek bir tooltip'i bile Popover API ile değiştirerek koddan nelerin kaybolduğunu görebilirsiniz

Henüz yorum yok.

Henüz yorum yok.