Erişilebilirlik için ARIA
ARIA (Accessible Rich Internet Applications), özellikle görme engelli bireyler için, dinamik ve etkileşimli web içeriklerinin yardımcı teknolojilerle (ekran okuyucular gibi) anlaşılabilir olmasını sağlayan bir HTML spesifikasyonudur. Standart HTML elementleri her zaman yeterli açıklamayı sağlayamaz. İşte bu noktada ARIA, arayüzün yapı taşlarına anlam katar ve web uygulamasını herkes için erişilebilir hale getirir.
ARIA’yı bir mektup yazmak gibi düşünebilirsiniz. HTML ile mektubu yazarsınız, ama kime hitap ettiğinizi, hangi bölümlerin önemli olduğunu belirtmezseniz okuyucu zorlanır. ARIA, bu mektubu başlıklandırır, önemli yerlerin altını çizer ve okuyucuya neyin ne olduğunu açıklar.
Kişisel web sitelerinde tema geçişi butonları, bloglarda içerik sekmeleri, e-ticaret sitelerinde filtreleme menüleri ve haber sitelerinde canlı bildirimler gibi bileşenlerde ARIA kullanımı kritik öneme sahiptir. ARIA sayesinde, bu bileşenler sadece görsel değil, erişilebilir hale gelir.
Bu derste şunları öğreneceksiniz:
- ARIA'nın ne olduğunu ve neden önemli olduğunu,
- Kişisel web sitesi, blog, e-ticaret ve haber sitesi bağlamında nasıl uygulanacağını,
- En iyi uygulamaları ve yaygın hataları,
- Gerçek dünyadan çalışır örneklerle ARIA'yı etkili şekilde kullanmayı.
Temel Örnek
html<!-- Toggle button styled with div using ARIA -->
<div role="button" tabindex="0" aria-pressed="false">
Temayı Değiştir
</div>
Bu örnek, bir div
elementine ARIA aracılığıyla buton rolü kazandırarak erişilebilir hale getirme sürecini göstermektedir. Modern arayüzlerde, geliştiriciler genellikle özel stil ve kontrol ihtiyaçları nedeniyle <button>
yerine div
veya span
gibi etiketler kullanır. Ancak bu elementler doğal olarak etkileşimli değildir. ARIA ile bu sorun çözülebilir.
role="button", ekran okuyuculara bu div
elementinin buton işlevi gördüğünü bildirir. Görsel olarak bir buton gibi görünse bile, ekran okuyucu aksi takdirde bunu sadece dekoratif bir blok olarak algılar.
tabindex="0", bu elementi klavye ile odaklanabilir hale getirir. Bu, erişilebilirlik açısından kritiktir çünkü sadece fareyle değil, klavye ile de erişim sağlanmalıdır.
aria-pressed="false", butonun varsayılan olarak devre dışı (pasif) olduğunu belirtir. Kullanıcı bu butona tıkladığında (JavaScript ile), bu değerin "true"
olarak değiştirilmesi beklenir.
Kişisel bir web sitesinde, bu yapı örneğin "Karanlık Modu Aç/Kapat" gibi bir işlevde kullanılabilir. Standart HTML yerine özel bileşen kullanılması gerektiğinde, bu tür yapılar ARIA sayesinde erişilebilir hale gelir.
Yeni başlayanlar için sık sorulan bir soru şudur: “Neden doğrudan <button>
kullanmıyoruz?” Elbette, kullanabiliyorsanız en iyi tercih semantik HTML’dir. Ancak özel tasarım gereksinimlerinde div
gibi etiketleri kullanmak kaçınılmaz olabilir. Bu noktada ARIA, eksik anlamı telafi eder.
Pratik Örnek
html<!-- Blogda sekmeli içerik sunumu -->
<div role="tablist" aria-label="Yazı Kategorileri">
<div role="tab" aria-selected="true" tabindex="0" id="sekme-genel">Genel</div>
<div role="tab" aria-selected="false" tabindex="-1" id="sekme-teknoloji">Teknoloji</div>
</div>
<div role="tabpanel" aria-labelledby="sekme-genel">
<p>Genel konular hakkında yazılar burada görüntülenir.</p>
</div>
Bu örnek, bir blog sitesinde yaygın olarak karşılaşılan sekmeli içerik sunumunun erişilebilir şekilde uygulanmasını göstermektedir. ARIA burada, her sekmenin (tab) bir içerik paneli (tabpanel) ile ilişkili olduğunu açıkça belirtir.
role="tablist", tüm sekmeleri barındıran konteynerin tanımıdır.
aria-label="Yazı Kategorileri", ekran okuyuculara bu sekmelerin neyle ilgili olduğunu söyler. Bu, özellikle bağlamı anlamada önemli bir ipucudur.
role="tab", sekme öğesini tanımlar.
aria-selected="true/false", hangi sekmenin aktif olduğunu belirtir.
tabindex="0" aktif sekmenin klavye ile odaklanabilir olduğunu, -1
ise diğerlerinin odaklanamayacağını belirtir.
id="sekme-genel", içerik paneline bağlanacak referans noktasıdır.
role="tabpanel", sekme ile ilişkili içerik alanını tanımlar.
aria-labelledby="sekme-genel", bu panelin hangi sekmeye ait olduğunu açıklar.
Bu yapı, sadece görsel olarak değil, ekran okuyucu kullanan bireyler için de tam anlamıyla anlaşılır bir sekme sistemi oluşturur. Özellikle bloglarda, kullanıcılar belirli bir kategoriye ait yazılara kolayca erişebilmelidir. Bu yapı sayesinde, kullanıcı deneyimi tüm cihaz ve kullanıcı profilleri için eşitlenmiş olur.
En iyi uygulamalar:
- Semantik HTML önceliklidir:
<button>
,<nav>
,<section>
gibi anlamlı etiketleri mümkün olduğunca kullanın. - Dinamik durumları doğru yönetin:
aria-pressed
,aria-expanded
gibi nitelikleri kullanıcı etkileşimine göre güncelleyin. - Tutarlı etiketleme kullanın:
aria-labelledby
,aria-describedby
ile öğeleri açıkça ilişkilendirin. -
Klavye erişilebilirliğini test edin: Tüm etkileşimlerin yalnızca klavye ile de çalıştığından emin olun.
Yaygın hatalar: -
Yinelenen roller: Örneğin
<button role="button">
gereksizdir. - Eksik tabindex kullanımı:
div
gibi elementler,tabindex="0"
olmadan klavye ile erişilemez. - Hatalı ID referansları:
aria-labelledby
geçerli birid
ile eşleşmezse, anlam kaybı yaşanır. - Dinamik güncelleme yapılmaması: Etkileşim sonrası
aria-selected
veyaaria-expanded
gibi değerlerin güncellenmemesi kullanıcıyı yanıltır.
Hata ayıklama ipuçları:
- Erişilebilirlik test araçları (axe, Lighthouse, WAVE) kullanarak hataları erken tespit edin.
- Ekran okuyucu deneyimi (NVDA, VoiceOver) ile pratik yapın.
- Tarayıcı geliştirici araçlarında öğelerin ARIA niteliklerini kontrol edin.
Pratik öneri: Kod yazarken görsel tasarımı değil, kullanıcı deneyimini merkeze alın. Her etkileşimli öğeyi erişilebilir kılmak bir zorunluluktur, lüks değil.
📊 Hızlı Referans
Property/Method | Description | Example |
---|---|---|
role | Elementin işlevsel rolünü belirtir | role="button" |
aria-label | Ekran okuyucular için görünen metin | aria-label="Alışveriş Sepeti" |
aria-pressed | Toggle butonun aktif/pasif durumu | aria-pressed="true" |
aria-labelledby | ID ile başka bir öğeye bağlar | aria-labelledby="etiketID" |
aria-expanded | Açılır/kapanır yapıların durumunu belirtir | aria-expanded="false" |
aria-selected | Bir öğenin seçili olup olmadığını belirtir | aria-selected="true" |
Özet ve sonraki adımlar:
Bu derste, ARIA'nın erişilebilirlik açısından neden vazgeçilmez olduğunu, nasıl çalıştığını ve gerçek örneklerde nasıl uygulandığını öğrendiniz. ARIA, ekran okuyucu gibi yardımcı teknolojilere içerikle ilgili ek bilgi sağlayarak kullanıcı deneyimini zenginleştirir.
ARIA nitelikleri; CSS ile görsel durumları kontrol etmeyi ([aria-expanded="true"] { display: block; }
) ve JavaScript ile etkileşimli bileşenler oluşturmayı mümkün kılar. Bu nedenle, ARIA sadece HTML’in değil, modern webin tamamlayıcı bir parçasıdır.
Önerilen sonraki konular:
aria-live
ile dinamik içerik güncellemeleri- Modal diyaloglarda
aria-modal
vearia-hidden
- Form doğrulama için
aria-invalid
vearia-describedby
- Komponent tabanlı framework'lerde ARIA kullanımı (React, Vue)
Öneri: Kendi sitenizde veya projelerinizde bulunan bir bileşeni seçin ve bu derste öğrendiğiniz prensiplerle erişilebilir hale getirin. Geliştirdiğiniz her bileşen, daha kapsayıcı bir web için büyük bir adımdır.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu konudaki anlayışınızı pratik sorularla test edin.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek