Türkçe

Erişilebilir ve kullanıcı dostu sekme arayüzleri oluşturun. Küresel bir kitle için klavye navigasyonu, ARIA rolleri ve güçlü odak yönetimi en iyi uygulamalarını öğrenin.

Sekme Arayüzlerinde Uzmanlaşma: Klavye Navigasyonu ve Odak Yönetimine Derinlemesine Bir Bakış

Sekmeli arayüzler, modern web tasarımının temel taşlarından biridir. Ürün sayfalarından kullanıcı panellerine ve karmaşık web uygulamalarına kadar, içeriği düzenlemek ve kullanıcı arayüzünü sadeleştirmek için zarif bir çözüm sunarlar. Yüzeyde basit görünseler de, gerçekten etkili ve erişilebilir bir sekme bileşeni oluşturmak, klavye navigasyonu ve titiz odak yönetimi konusunda derin bir anlayış gerektirir. Kötü uygulanmış bir sekme arayüzü, klavye veya yardımcı teknolojilere dayanan kullanıcılar için aşılamaz bir engel haline gelebilir ve onları içeriğinizden etkili bir şekilde dışlayabilir.

Bu kapsamlı rehber, temellerin ötesine geçmek isteyen web geliştiricileri, UI/UX tasarımcıları ve erişilebilirlik savunucuları içindir. Klavye etkileşimi için uluslararası kabul görmüş kalıpları, anlamsal bağlam sağlamada ARIA'nın (Accessible Rich Internet Applications - Erişilebilir Zengin İnternet Uygulamaları) kritik rolünü ve herkes için, konumları veya web ile nasıl etkileşimde bulunduklarından bağımsız olarak, sorunsuz ve sezgisel bir kullanıcı deneyimi yaratan incelikli odak yönetimi tekniklerini keşfedeceğiz.

Bir Sekme Arayüzünün Anatomisi: Temel Bileşenler

Mekaniğe dalmadan önce, WAI-ARIA Yazma Pratiklerine dayalı ortak bir kelime dağarcığı oluşturmak önemlidir. Standart bir sekme bileşeni üç ana unsurdan oluşur:

Bu yapıyı anlamak, yalnızca görsel olarak tutarlı değil, aynı zamanda ekran okuyucular gibi yardımcı teknolojiler için anlamsal olarak da anlaşılır bir bileşen oluşturmanın ilk adımıdır.

Kusursuz Klavye Navigasyonunun İlkeleri

Fare kullanan ve gören bir kullanıcı için sekmelerle etkileşim kurmak basittir: görmek istediğiniz sekmeyi tıklarsınız. Yalnızca klavye kullanan kullanıcılar için deneyim aynı derecede sezgisel olmalıdır. WAI-ARIA Yazma Pratikleri, yardımcı teknoloji kullanıcılarının beklediği sağlam ve standartlaştırılmış bir klavye etkileşim modeli sunar.

Sekme Listesinde (`role="tablist"`) Gezinme

Birincil etkileşim, sekmeler listesi içinde gerçekleşir. Amaç, kullanıcıların sayfadaki her etkileşimli öğe arasında gezinmek zorunda kalmadan sekmelere verimli bir şekilde göz atmasına ve seçmesine olanak tanımaktır.

Aktivasyon Modelleri: Otomatik ve Manuel

Bir kullanıcı ok tuşlarını kullanarak sekmeler arasında gezindiğinde, ilgili panel ne zaman görüntülenmelidir? İki standart model vardır:

Aktivasyon modeli seçiminiz, arayüzünüzün içeriğine ve bağlamına dayanmalıdır. Hangisini seçerseniz seçin, uygulamanız boyunca tutarlı olun.

Odak Yönetiminde Uzmanlaşma: Kullanılabilirliğin Adsız Kahramanı

Etkili odak yönetimi, hantal bir arayüzü sorunsuz bir arayüzden ayıran şeydir. Bu, kullanıcının odağının nerede olduğunu programlı olarak kontrol etmekle ilgilidir ve bileşen boyunca mantıksal ve öngörülebilir bir yol sağlar.

Dolaşan `tabindex` Tekniği

Dolaşan `tabindex`, sekme listeleri gibi bileşenler içindeki klavye navigasyonunun temel taşıdır. Amaç, tüm pencere öğesinin tek bir `Tab` durağı olarak hareket etmesini sağlamaktır.

İşte nasıl çalıştığı:

  1. O anda aktif olan sekme öğesine `tabindex="0"` verilir. Bu, onu doğal sekme sırasının bir parçası yapar ve kullanıcı bileşene tab ile girdiğinde odak almasını sağlar.
  2. Diğer tüm aktif olmayan sekme öğelerine `tabindex="-1"` verilir. Bu, onları doğal sekme sırasından çıkarır, böylece kullanıcının her birinin üzerinden `Tab` tuşuyla geçmesi gerekmez. Yine de programlı olarak odaklanabilirler, ki ok tuşu navigasyonu ile yaptığımız da budur.

Kullanıcı A Sekmesinden B Sekmesine geçmek için bir ok tuşuna bastığında:

Bu teknik, listede kaç sekme olursa olsun, bileşenin sayfanın genel `Tab` sırasında yalnızca bir konum işgal etmesini sağlar.

Sekme Panelleri İçindeki Odak

Bir sekme aktif olduğunda, odak bir sonraki nereye gider? Beklenen davranış, aktif bir sekme öğesinden `Tab` tuşuna basmanın odağı, ilgili sekme panelinin *içindeki* ilk odaklanılabilir öğeye taşımasıdır. Sekme panelinde odaklanılabilir öğe yoksa, `Tab` tuşuna basmak odağı, sekme listesinden *sonra* sayfadaki bir sonraki odaklanılabilir öğeye taşımalıdır.

Benzer şekilde, bir kullanıcı bir sekme panelinin içindeki son odaklanılabilir öğeye odaklandığında, `Tab` tuşuna basmak odağı panelin dışına, sayfadaki bir sonraki odaklanılabilir öğeye taşımalıdır. Panelin içindeki ilk odaklanılabilir öğeden `Shift + Tab` tuşlarına basmak, odağı aktif sekme öğesine geri taşımalıdır.

Odak tuzağından kaçının: Bir sekme arayüzü, bir modal diyalog değildir. Kullanıcılar her zaman `Tab` tuşunu kullanarak sekme bileşenine ve panellerine girip çıkabilmelidir. Bileşen içinde odağı hapsetmeyin, çünkü bu kafa karıştırıcı ve sinir bozucu olabilir.

ARIA'nın Rolü: Anlam Bilgisini Yardımcı Teknolojilere İletmek

ARIA olmadan, `

` öğeleriyle oluşturulmuş bir sekme arayüzü, bir ekran okuyucu için sadece genel amaçlı kapsayıcıların bir koleksiyonudur. ARIA, yardımcı teknolojilerin bileşenin amacını ve durumunu anlamasını sağlayan temel anlamsal bilgiyi sağlar.

Temel ARIA Rolleri ve Nitelikleri

  • `role="tablist"`: Sekmeleri içeren öğeye yerleştirilir. "Bu bir sekmeler listesidir." diye duyurur.
  • `aria-label` veya `aria-labelledby`: `tablist` öğesinde, `aria-label="İçerik Kategorileri"` gibi erişilebilir bir ad sağlamak için kullanılır.
  • `role="tab"`: Her bir sekme kontrolüne (genellikle bir `
  • `aria-selected="true"` veya `"false"`: Her `role="tab"` üzerindeki kritik bir durum niteliğidir. `"true"`, o anda aktif olan sekmeyi belirtirken, `"false"` aktif olmayanları işaretler. Bu durum JavaScript ile dinamik olarak güncellenmelidir.
  • `aria-controls="panel-id"`: Her `role="tab"` üzerine yerleştirilir, değeri kontrol ettiği `tabpanel` öğesinin `id`'si olmalıdır. Bu, kontrol ile içeriği arasında programatik bir bağlantı oluşturur.
  • `role="tabpanel"`: Her içerik paneli öğesine yerleştirilir. "Bu, bir sekmeyle ilişkili bir içerik panelidir." diye duyurur.
  • `aria-labelledby="tab-id"`: Her `role="tabpanel"` üzerine yerleştirilir, değeri onu kontrol eden `role="tab"` öğesinin `id`'si olmalıdır. Bu, ters ilişkiyi oluşturarak yardımcı teknolojilerin hangi sekmenin paneli etiketlediğini anlamasına yardımcı olur.

Aktif Olmayan İçeriği Gizleme

Aktif olmayan sekme panellerini yalnızca görsel olarak gizlemek yeterli değildir. Aynı zamanda yardımcı teknolojilerden de gizlenmelidirler. Bunu yapmanın en etkili yolu, CSS'de `hidden` niteliğini veya `display: none;` kullanmaktır. Bu, panelin içeriğini erişilebilirlik ağacından kaldırır ve bir ekran okuyucunun o anda ilgili olmayan içeriği duyurmasını önler.

Pratik Uygulama: Üst Düzey Bir Örnek

Bu ARIA rollerini ve niteliklerini içeren basitleştirilmiş bir HTML yapısına bakalım.

HTML Yapısı


<h2 id="tablist-label">Hesap Ayarları</h2>
<div role="tablist" aria-labelledby="tablist-label">
  <button id="tab-1" type="button" role="tab" aria-selected="true" aria-controls="panel-1" tabindex="0">
    Profil
  </button>
  <button id="tab-2" type="button" role="tab" aria-selected="false" aria-controls="panel-2" tabindex="-1">
    Şifre
  </button>
  <button id="tab-3" type="button" role="tab" aria-selected="false" aria-controls="panel-3" tabindex="-1">
    Bildirimler
  </button>
</div>

<div id="panel-1" role="tabpanel" aria-labelledby="tab-1" tabindex="0">
  <p>Profil paneli için içerik...</p>
</div>
<div id="panel-2" role="tabpanel" aria-labelledby="tab-2" tabindex="0" hidden>
  <p>Şifre paneli için içerik...</p>
</div>
<div id="panel-3" role="tabpanel" aria-labelledby="tab-3" tabindex="0" hidden>
  <p>Bildirimler paneli için içerik...</p>
</div>

JavaScript Mantığı (Sözde Kod)

JavaScript'iniz, `tablist` üzerindeki klavye olaylarını dinlemekten ve nitelikleri buna göre güncellemekten sorumlu olacaktır.


const tablist = document.querySelector('[role="tablist"]');
const tabs = tablist.querySelectorAll('[role="tab"]');

tablist.addEventListener('keydown', (e) => {
  let currentTab = document.activeElement;
  let newTab;

  if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {
    // Sıradaki bir sonraki sekmeyi bul, gerekirse başa dön
    newTab = getNextTab(currentTab);
  } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {
    // Sıradaki bir önceki sekmeyi bul, gerekirse başa dön
    newTab = getPreviousTab(currentTab);
  } else if (e.key === 'Home') {
    newTab = tabs[0];
  } else if (e.key === 'End') {
    newTab = tabs[tabs.length - 1];
  }

  if (newTab) {
    activateTab(newTab);
    e.preventDefault(); // Ok tuşları için varsayılan tarayıcı davranışını engelle
  }
});

function activateTab(tab) {
  // Diğer tüm sekmeleri devre dışı bırak
  tabs.forEach(t => {
    t.setAttribute('aria-selected', 'false');
    t.setAttribute('tabindex', '-1');
    document.getElementById(t.getAttribute('aria-controls')).hidden = true;
  });

  // Yeni sekmeyi etkinleştir
  tab.setAttribute('aria-selected', 'true');
  tab.setAttribute('tabindex', '0');
  document.getElementById(tab.getAttribute('aria-controls')).hidden = false;
  tab.focus();
}

Küresel Hususlar ve En İyi Uygulamalar

Küresel bir kitle için geliştirme yapmak, tek bir dilin veya kültürün ötesinde düşünmeyi gerektirir. Sekme arayüzleri söz konusu olduğunda, en önemli husus metin yönüdür.

Sağdan Sola (RTL) Dil Desteği

Arapça, İbranice ve Farsça gibi sağdan sola okunan diller için klavye navigasyon modeli yansıtılmalıdır. Bir RTL bağlamında:

  • `Sağ Ok` tuşu odağı önceki sekmeye taşımalıdır.
  • `Sol Ok` tuşu odağı sonraki sekmeye taşımalıdır.

Bu, JavaScript'te belgenin yönünü (`dir="rtl"`) algılayarak ve sol ve sağ ok tuşları için mantığı buna göre tersine çevirerek uygulanabilir. Bu görünüşte küçük ayarlama, dünya çapında milyonlarca kullanıcıya sezgisel bir deneyim sağlamak için kritik öneme sahiptir.

Görsel Odak Göstergesi

Odağın sahne arkasında doğru bir şekilde yönetilmesi yeterli değildir; açıkça görünür olmalıdır. Odaklanmış sekmelerinizin ve sekme panelleri içindeki etkileşimli öğelerin oldukça görünür bir odak dış hattına (örneğin, belirgin bir halka veya kenarlık) sahip olduğundan emin olun. Daha sağlam ve erişilebilir bir alternatif sunmadan `outline: none;` ile dış hatları kaldırmaktan kaçının. Bu, tüm klavye kullanıcıları için, özellikle de az görenler için çok önemlidir.

Sonuç: Kapsayıcılık ve Kullanılabilirlik için Geliştirme

Gerçekten erişilebilir ve kullanıcı dostu bir sekme arayüzü oluşturmak, bilinçli bir süreçtir. Görsel tasarımın ötesine geçmeyi ve bileşenin temel yapısı, anlambilimi ve davranışıyla ilgilenmeyi gerektirir. Standartlaştırılmış klavye navigasyon kalıplarını benimseyerek, ARIA rollerini ve niteliklerini doğru bir şekilde uygulayarak ve odağı hassasiyetle yöneterek, yalnızca uyumlu değil, aynı zamanda tüm kullanıcılar için gerçekten sezgisel ve güçlendirici arayüzler oluşturabilirsiniz.

Bu temel ilkeleri unutmayın:

  • Tek bir sekme durağı kullanın: Tüm bileşeni ok tuşlarıyla gezilebilir hale getirmek için dolaşan `tabindex` tekniğini kullanın.
  • ARIA ile iletişim kurun: Anlamsal anlam sağlamak için `role="tablist"`, `role="tab"` ve `role="tabpanel"` rollerini ilişkili özellikleriyle (`aria-selected`, `aria-controls`) birlikte kullanın.
  • Odağı mantıksal olarak yönetin: Odağın sekmeden panele ve bileşenin dışına öngörülebilir bir şekilde hareket ettiğinden emin olun.
  • Aktif olmayan içeriği düzgün bir şekilde gizleyin: Aktif olmayan panelleri erişilebilirlik ağacından kaldırmak için `hidden` veya `display: none` kullanın.
  • Kapsamlı bir şekilde test edin: Herkes için beklendiği gibi çalıştığından emin olmak için uygulamanızı yalnızca klavye kullanarak ve çeşitli ekran okuyucularla (NVDA, JAWS, VoiceOver) test edin.

Bu ayrıntılara yatırım yaparak, daha kapsayıcı bir web'e katkıda bulunuruz—karmaşık bilgilerin, dijital dünyada nasıl gezindiklerinden bağımsız olarak herkes için erişilebilir olduğu bir web.