Klavye erişilebilirliği nasıl sağlanır? tabindex değerleri ne anlama gelir?

Cevap

Tüm etkileşimli öğelere sadece klavye ile ulaşılabilmeli ve kullanılabilmeli: Tab ile gezinme, Enter/Space ile tetikleme, Escape ile kapatma ve her zaman görünür bir odak göstergesi.

Temel kurallar

  • Native elemanları kullanın: <button>, <a href>, <input>, <select> klavye desteğini bedava getirir. Tıklanabilir <div onClick> klavyeyle çalışmaz.
  • Odak sırası DOM sırasını takip eder; CSS ile görsel sırayı değiştirmek (ör. order, flex-direction: row-reverse) kafa karıştırır.
  • outline: none ile odak halkasını kaldırmayın; özelleştirmek için :focus-visible kullanın.
button:focus-visible { outline: 3px solid #2563eb; outline-offset: 2px; }

tabindex

DeğerAnlamı
tabindex="0"Normal olarak odaklanamayan elemanı doğal Tab sırasına ekler
tabindex="-1"Tab ile ulaşılamaz ama element.focus() ile programatik odaklanabilir
tabindex="1" ve üzeriTab sırasını zorla değiştirir; kullanmayın, sırayı bozar

Odak yönetimi

  • Modal açılınca odağı içine taşıyın, kapanınca açan butona geri verin.
  • SPA'da route değişince odağı yeni sayfanın başlığına (tabindex="-1" ile) taşıyın.
  • "İçeriğe atla" (skip link) bağlantısı ekleyin.
  • Arka plandaki içeriği etkileşime kapatmak için inert attribute'u kullanılabilir.

Composite widget'lar

Tab listesi, menü, grid gibi bileşenlerde roving tabindex kullanılır: grubun sadece bir öğesi tabindex="0", diğerleri -1; grup içinde ok tuşlarıyla gezilir.

  1. Bir modal (dialog) bileşenini erişilebilir yapmak için neler gerekir?OrtaErişilebilirlikFrontend
  2. ARIA nedir? Ne zaman kullanılmalı, ne zaman kullanılmamalı?OrtaErişilebilirlikFrontend
  3. Web erişilebilirliği (a11y) nedir, neden önemlidir?KolayErişilebilirlikFrontend
  4. Bir web uygulamasının erişilebilirliğini nasıl test edersiniz?KolayErişilebilirlikFrontend
  5. Erişilebilir bir form nasıl yapılır? Hata mesajlarını ekran okuyuculara nasıl iletirsiniz?OrtaErişilebilirlikFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle