Erişilebilirlik Temelleri — Gözü Kapalı Para Gönderebilir misin?
Önce şunu oku: Flexbox mı Grid mi — Telefonda Sayfa Neden Yana Kayıyor?
30 saniyede özet
Herkes sayfayı fareyle ve gözüyle kullanmıyor. Ekran okuyucu yalnızca HTML'in söylediğini okur: etiketsiz kutu adsızdır, div düğmeye Tab ile ulaşılmaz, kırmızı çerçeve hiç duyulmaz. Çoğu düzeltme tek bir doğru etikettir.
Bir arkadaşın sana telefonda bir formu okuyor ve sen ona söyleyerek dolduruyorsun. O yalnızca kâğıtta yazanı okuyabilir. Kâğıtta yazmayan bir şeyi, ne kadar renkli olursa olsun, sana anlatamaz.
-
Bayt: Para gönderme formu hazır. Fareyle denedim, her şey çalışıyor.
-
Sen: Klavyeyle denedin mi? Ya da ekran okuyucuyla?
-
Bayt: Tab'a bastım, Gönder'e hiç gelmedi! Ekran okuyucu da tutar kutusuna 'düzenleme alanı' dedi, o kadar.
-
Bayt: O zaman formu bir de kulakla ve klavyeyle gezelim.
Herkes fareyle gezmiyor
Bazı kullanıcılar sayfayı bir screen readerSayfayı sesli okuyan ya da Braille ekrana aktaran yazılım (NVDA, VoiceOver). Görüntüye değil, HTML'deki rol, ad ve duruma bakar.Sözlükte gör → ile dinler, bazıları yalnızca klavyeyle gezer. İkisi de ekrandaki görüntüye değil, HTML’in kendisine bakar.
Bu yüzden erişilebilirlik çoğu zaman ek bir iş değildir. Doğru HTML etiketini seçmek, işin büyük kısmını kendiliğinden yapar.
Kafam karıştı, daha basit anlat
Ekran okuyucu görüntüyü değil HTML’i okur. Doğru etiket, doğru okuma demektir.
Ekran okuyucu bir sayfada neyi okur?
Klavyeyle gezen bir kullanıcı bir sonraki kontrole hangi tuşla geçer?
Önce doğru etiket
Gönder düğmesi bir div, üstünde onClick var ve fareyle sorunsuz çalışıyor. Klavyeyle Tab'a basarak ilerleyen biri bu düğmeye ulaşabilir mi? Cevabı göster
Hayır, çünkü div doğal olarak odaklanamaz ve bir rolü yoktur. Tab onun üstünden geçer, ekran okuyucu da onu düğme olarak tanıtmaz. Klavye kullanan biri parayı hiç gönderemez.
Adım adım oku
- Etiketsiz kutu adsız okunur: ne istendiği bilinmez.
- Kırmızı çerçeve hiç duyulmaz: kullanıcı hatayı öğrenemez.
- div düğme atlanır: Tab orada durmaz, iş yapılamaz.
- Doğru etiketlerle her kontrol adıyla ve durumuyla okunur.
Bir kontrolün okunan adına accessible nameBir kontrolün ekran okuyucuda okunan adı. label for, düğmenin yazısı, aria-label ya da aria-labelledby'dan gelir.Sözlükte gör → denir. Kutunun yanındaki yazı bir span ise kutuya bağlı değildir; <label for> onu bağlar ve kutunun adı olur.
Tıklanan bir şey için <button> kullanmak, odaklanmayı, Enter ve Space ile çalışmayı ve “düğme” rolünü bedavaya getirir.
Kafam karıştı, daha basit anlat
Kutuya label, tıklanan şeye button. İkisi de ekstra kod istemez, sadece doğru etiket.
Bir input'un yanında <span>Tutar</span> yazıyor. Ekran okuyucu input'a gelince ne der?
Gönder düğmesi <div onClick=…> ile yazılmış. Klavye kullanıcısı için sonuç?
Renk tek başına konuşmaz
Hatalı tutarı yalnızca kırmızı çerçeveyle göstermek, görmeyen biri için hiçbir şey göstermemektir. Renk körlüğü olan biri için de çoğu zaman öyledir.
Hata metnini yaz ve ARIAHTML'e rol, ad ve durum bilgisi ekleyen öznitelikler (aria-label, aria-invalid). Davranış eklemez; aynı işi yapan HTML öğesi varsa o tercih edilir.Sözlükte gör → ile kutuya bağla: aria-invalid="true" kutunun hatalı olduğunu, aria-describedby hatanın ne olduğunu söyler. Bu sitenin simülatörleri de her durumu renkle birlikte bir simge ve bir yazıyla gösterir.
Kafam karıştı, daha basit anlat
Renk bir ipucu, mesaj değil. Hatayı yaz ve kutuya bağla.
Tutar hatası yalnızca kırmızı bir çerçeveyle gösteriliyor. En iyi düzeltme hangisi?
Kendin gör
Gözü kapalı para gönder
Tohum 26018Oynat ya da adımla: her adım bir Tab basışı.
Şu an ne oldu?
Tab tuşu ve ekran okuyucu
Fare yok, ekran yok. Kullanıcı yalnızca Tab ile ilerliyor ve duyduğuyla karar veriyor.
Görevler0/3
Gönder düğmesine klavyeyle hiç ulaşılamasınaçık
İpucu
Varsayılan ayarlar yeter.
Her şeye ulaşılsın ama tutar hatası sessiz kalsınaçık
İpucu
Düğmeyi düzelt, hatayı bırak.
Formu gözü kapalı, sorunsuz doldurtaçık
İpucu
Dört düzeltmenin hepsi.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Kutular adsız, hata sessiz, Gönder’e ulaşılamadı.
- “button kullan”ı aç. Tab artık Gönder’de duruyor.
- Etiketleri aç. Kutular adlarıyla okunuyor.
- Hatayı yazıyla bağla. “Geçersiz, bakiye yetersiz” duyuldu.
- İkona ad ver. “Düğme” yerine “Kapat, düğme”.
Yalnızca bir ✕ ikonu olan kapat düğmesi var, yazısı yok. Ekran okuyucu ne der ve nasıl düzeltilir?
Tuzaklar
ARIA’yı her yere serpmek. ARIA’nın ilk kuralı: aynı işi yapan bir HTML öğesi varsa onu kullan. div role="button" yazmak, klavye davranışını sana bırakır; button hepsini hazır verir.
Odak çerçevesini silmek. outline: none yazıp yerine bir şey koymamak, klavye kullananın nerede olduğunu görmesini engeller. Çerçeveyi sevmiyorsan :focus-visible ile güzelleştir.
Placeholder’ı etiket sanmak. Yazmaya başlayınca kaybolur, rengi de genellikle soluktur. Kutunun adı görünür bir label’da olsun.
Kafam karıştı, daha basit anlat
Önce doğru HTML, ARIA sadece eksik kalanlar için. Odak çerçevesini silme, placeholder’a güvenme.
Tasarımcı odak çerçevesini çirkin bulduğu için outline: none yazıldı. Sorun ne?
Aşağıdaki örnek bir bankacılık uygulamasının para gönderme formundan: her kontrolün adı var, hata duyuluyor, her şey klavyeyle çalışıyor.
Derinleş · Para gönderme formu: gözü kapalı da doldurulabilir 4 dosya · ~65 satır · ilk okumada atlayabilirsin
Kendini sına
Ekran okuyucu, ekranda gördüğün renkleri ve çerçeveleri sesli anlatır.
Bir ekip her tıklanabilir div'e role="button" ekledi. Bu neden yeterli değil?
Aklında kalacak üç şey
- 1 Ekran okuyucu ekranı değil, HTML'i okur. Bir kontrolün duyulan adı, ona bağlı label'dan, düğmenin yazısından ya da aria-label'dan gelir.
- 2 Tıklanan her şey bir button ya da a olmalı. div onClick fareyle çalışır ama Tab orada durmaz; klavye kullanan biri o işi hiç yapamaz.
- 3 Renk tek başına bilgi taşımaz. Hata, yazıyla söylenir ve aria-describedby ile kutuya bağlanır; kutu aria-invalid ile işaretlenir.
4 kart sonraki derste seni bekliyor
Bu dersin üstüne kurulanlar
Bunlar bu dersi temel alıyor; hazır olduğunda devam edebilirsin.
- Frontend & EntegrasyonForm Doğrulama — Hatayı Ne Zaman Göstermeli?IBAN'ın ilk iki harfini yazdın ve form daha sen bitirmeden kırmızıya döndü. Yanlış bir şey mi yaptın?Derse git
- Frontend & EntegrasyonBileşen Testi — Sınıf Adı Değişti, Test Neden Kırıldı?Kodda yalnızca bir CSS sınıfının adını değiştirdin. Kırk test kırıldı. Bir hafta sonra gerçek bir hata geldi ve hiçbiri kırılmadı. Nasıl?Derse git