Odak bir bileşene klavyeyle girebiliyorsa, klavyeyle ondan çıkabilmesini de ister.
Klavye kullanıcısı bir bileşene Tab ile girer ve sonra çıkamaz. Geri gidemez, ileri de gidemez. Tek çıkış yolu, sahip olmadığı bir fare ya da sayfayı yeniden yükleyip işini kaybetmektir.
Bu kriter, klavye odağı bir klavye arayüzüyle bir bileşene taşınabiliyorsa odağın yine yalnızca klavye arayüzüyle ondan uzaklaştırılabilmesini ister. Bunun için ok tuşlarından, Tab'dan ya da standart çıkış yöntemlerinden fazlası gerekiyorsa kullanıcıya nasıl yapılacağı söylenmelidir.
Takılıp çıkması gereken yalnızca klavye ya da ekran okuyucu kullanıcıları. Anahtar ya da ses denetimi kullananlar. İşlerini kaybedebilir ya da devam edemez hâle gelebilirler.
Avrupa Erişilebilirlik Yasası (Direktif (AB) 2019/882) 28 Haziran 2025'ten sonra piyasaya sunulan kapsamdaki ürün ve hizmetler için geçerlidir. Yasanın 47. gerekçesi web siteleri ve mobil uygulamalar için dört ilkeyi sayar: algılanabilirlik, işletilebilirlik, anlaşılabilirlik ve sağlamlık. Her bileşenden çıkış yolu, "işletilebilirlik" ilkesinin parçasıdır.
Teknik karşılığı EN 301 549 standardında bulunur. Standart, WCAG 2.1.2'i atıfla alır ve ortama göre ayrı maddelere dönüştürür.
| Madde | Ortam | Ne ister? |
|---|---|---|
| 9.2.1.2 | Web sayfaları | Web içeriğinin WCAG 2.1.2 kriterini karşılamasını ister. |
| 10.2.1.2 | Web dışı dokümanlar (PDF, Office dosyaları) | Standardın uyguladığı hâllerde dokümanların klavye odağını tuzağa düşürmemesini ister. |
| 11.2.1.2 | Web dışı yazılım (yerel mobil uygulamalar) | Yazılımın klavye odağını tuzağa düşürmemesini ister. |
Kriterin web dışı dokümanlara uygulanıp uygulanmadığı ve nasıl uygulandığı standardın 10. maddesinde belirtilir. Madde numaraları EN 301 549'un "9. + WCAG numarası" düzenine göredir. V3.2.1'de yazılım maddesi, açık ve kapalı işlevsellik için ayrı alt maddelere bölünmüştür. Kaynak gösterirken tam numaraları standarttan kontrol edin.
Standart sürümü: EN 301 549 V4.1.1 (Eylül 2026), WCAG 2.2'yi esas alan ve EAA için hazırlanan ilk sürümdür. Henüz AB Resmî Gazetesi'nde atıf almamıştır; bu nedenle EAA gereksinimlerini karşılamanın gönüllü teknik yolu olarak görülmelidir. Atıf yapıldığında EAA ile ilgili uygunluk karinesi sağlayacaktır. 2.1.2 kriterinin metni WCAG 2.1 ve 2.2'de aynıdır.
EAA bağlamında dikkat: Yasanın Madde 2/4 hükmü bazı içerikleri gereksinimlerin dışında bırakır; örneğin 28 Haziran 2025'ten önce yayımlanmış ofis dosya biçimleri ve bu tarihten sonra güncellenmeyen arşivler. Bu tarihten sonra yayımladığınız ya da değiştirdiğiniz içerik bu istisnaların kapsamında değildir.
Directive (EU) 2019/882, EUR-Lex, İngilizce, yeni sekmede açılır
Çıkış olmadan Tab'ın varsayılan davranışını engellemek kullanıcıyı sıkıştırır.
duzenleyici.addEventListener("keydown", e => {
if (e.key === "Tab") e.preventDefault(); // sekme ekler, çıkış yok
});duzenleyici.addEventListener("keydown", e => {
if (e.key === "Escape") { duzenleyici.dataset.tuzak = "kapali"; } // Esc, sonra Tab çıkarır
if (e.key === "Tab" && duzenleyici.dataset.tuzak !== "kapali") {
e.preventDefault(); sekmeEkle();
}
});
// Belgeleyin: "Düzenleyiciden çıkmak için Escape, sonra Tab'a basın."Yerel bir dialog açıkken odağı içeride tutar ve Escape ile kapanır.
<div class="modal">…</div> <!-- odak döner ve kapatma tuşu yok --><dialog id="ayarlar" aria-labelledby="b">
<h2 id="b">Ayarlar</h2>
…
<button type="button" onclick="this.closest('dialog').close()">Kapat</button>
</dialog>
<script>ayarlar.showModal(); // Escape kapatır</script>Üçüncü taraf oynatıcılar ve bileşenler odağı tuzağa düşürebilir. Test edin ve tuzak kurmayanları seçin.
<iframe src="https://widget.example/sohbet" title="Sohbet"></iframe> <!-- Tab'ı tuzağa düşürür --><iframe src="https://widget.example/sohbet" title="Sohbet"></iframe>
<!-- Testten sonra: Tab girer ve çıkar; çıkmıyorsa bileşeni değiştirin ya da yenisini seçin -->Her Tab'ta odağı ilk öğeye döndüren bir betik sonsuza dek döner.
son.addEventListener("keydown", e => {
if (e.key === "Tab" && !e.shiftKey) { e.preventDefault(); ilk.focus(); }
});// Döngüyü yalnızca kapatma düğmesi olan ve Escape'e yanıt veren açık bir kipli iletişim kutusunda kurunKipli olmayan bir panel açıldığında kullanıcıların Tab ile ondan çıkmasına ve Escape ile kapatmasına izin verin.
panel.addEventListener("focusout", () => panel.querySelector("input").focus());panel.addEventListener("keydown", e => {
if (e.key === "Escape") { panel.hidden = true; tetikleyici.focus(); }
});Odağın olması gereken yerde kalması için kipli pencerenin arkasındaki sayfayı etkisiz yapın.
<main>…</main> <!-- iletişim kutusunun arkasında hâlâ Tab ile erişilebilir --><main inert>…</main> <!-- iletişim kutusu açıkken -->Yerel uygulamalar özel görünümlerde ve katmanlarda odağı tuzağa düşürebilir. Her katmanın klavye ya da anahtarla kapatılabildiğinden emin olun.
import SwiftUI
struct AyarlarSayfasi: View {
@Environment(\.dismiss) private var dismiss
var body: some View {
NavigationStack {
Form { /* kontroller */ }
.navigationTitle("Ayarlar")
.toolbar {
// Klavye ve VoiceOver ile çalışan görünür bir kapatma kontrolü
ToolbarItem(placement: .confirmationAction) {
Button("Bitti") { dismiss() }
}
}
}
// Standart sayfalar donanım klavyesinde Escape ile de kapanır
}
}import androidx.compose.material3.*
import androidx.compose.runtime.Composable
@Composable
fun AyarlarDialog(onDismiss: () -> Unit) {
// AlertDialog, Geri/Escape ile kapanır ve açıkken odağı içeride tutar
AlertDialog(
onDismissRequest = onDismiss,
title = { Text("Ayarlar") },
text = { /* kontroller */ },
confirmButton = {
TextButton(onClick = onDismiss) { Text("Bitti") }
}
)
}Corpowid, dijital erişilebilirlik alanındaki yenilikçi yaklaşımı ve performansı nedeniyle dünyanın önde gelen araştırma ve danışmanlık şirketlerinden biri olan Gartner tarafından takdir edilmiştir. Bu rozetler, yapay zeka destekli ve kapsayıcı web deneyimleri oluşturma konusundaki kararlılığımızı yansıtmaktadır.