WCAG 3.2.1 · A Seviyesi · EN 301 549 9.3.2.1

Odaklanınca

Bir bileşen odak aldığında pencere açma ya da odağı taşıma gibi bir bağlam değişikliği başlatmamasını ister.

Kısaca

Klavye ve ekran okuyucu kullanıcıları, sayfada ne olduğunu öğrenmek için odağı sayfada gezdirir. Bir kontrole gelmek bile pencere açıyor, formu gönderiyor ya da odağı başka yere atıyorsa, sayfayı keşfetmek imkânsız olur ve kullanıcı yerini kaybeder.

Bu kriter, herhangi bir kullanıcı arayüzü bileşeni odak aldığında bir bağlam değişikliği başlatmamasını ister.

Neleri kapsar?

  • Bağlam değişikliği nedir: Bağlam değişikliği, sayfanın tamamını göremeyen kullanıcıların yönünü şaşırtabilecek büyük bir değişikliktir: kullanıcı aracında, görünüm alanında, odakta ya da sayfanın anlamını değiştiren içerikte bir değişiklik. Yeni pencere açmak, odağı başka bir bileşene taşımak, yeni bir sayfa yüklemek ya da sayfayı önemli ölçüde yeniden düzenlemek bu kapsamdadır.
  • Etkinleştirme değil, odak: Kural odak almayla ilgilidir; klavye ya da fareyle. Kullanıcı bir kontrolü etkinleştirdikten sonra, örneğin bir düğmeye bastığında olan değişiklik burada kapsam dışıdır.
  • Üzerine gelme: Üzerine gelmek odağı taşımaz, bu yüzden kapsam dışıdır; betik taşımasını sağlamadıkça.
  • Her içerik değişikliği sayılmaz: Bir ana hattı genişletmek, dinamik menü açmak ya da sekme panelini değiştirmek, odağı ya da yukarıdaki başka bir öğeyi de değiştirmedikçe bağlam değişikliği değildir.
  • Teknik: Bağlam değişiklikleri için tetikleyici olarak "odak" yerine "etkinleştirme" kullanın (G107). Aynı kontrol yine de odakta bir ipucu ya da araç ipucu gösterebilir.
  • Kapsam dışı: Bir ayarı değiştirmenin yol açtığı değişiklikler 3.2.2'dir. Görünür odak 2.4.7'dir. Odak sırası 2.4.3'tür.

Kimleri etkiler?

Her kontrolün üzerinden odağı geçiren klavye kullanıcıları. Sayfanın tamamını göremeyen ve öngörülebilir davranışa güvenen ekran okuyucu kullanıcıları. Beklenmedik değişikliklerin kafa karışıklığına yol açtığı bilişsel engelli kişiler. Sayfanın yalnızca küçük bir bölümünü gören, büyüteç kullanan az görenler. Yanlışlıkla sekmeyle geçen ya da tıklayan hareket engelli kişiler.

EAA ve EN 301 549'da

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. Odakta öngörülebilir davranış, "anlaşılabilirlik" ilkesinin parçasıdır.

Teknik karşılığı EN 301 549 standardında bulunur. Standart, WCAG 3.2.1'i atıfla alır ve ortama göre ayrı maddelere dönüştürür.

WCAG 3.2.1'in EN 301 549'daki karşılıkları
MaddeOrtamNe ister?
9.3.2.1Web sayfalarıWeb içeriğinin WCAG 3.2.1 kriterini karşılamasını ister.
10.3.2.1Web dışı dokümanlar (PDF, Office dosyaları)Standardın kriteri dokümanlara uyguladığı yerlerde, bir bileşen odak aldığında doküman bağlamı değiştirmemelidir.
11.3.2.1Web dışı yazılım (yerel mobil uygulamalar)Yazılım, bir bileşen odak aldığında bağlam değişikliği başlatmamalıdır.

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. 3.2.1 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

Web için kod örnekleri

1. Odak alınca gezinen bir menü

Odağı yeni bir sayfaya atlayan bir listenin üzerinden geçmek, sayfanın geri kalanını erişilemez yapar. Bunun yerine etkinleştirmede gezinin (G107).

Hatalı
<select onfocus="location.href=this.value">…</select>
Doğru
<label for="go">Git</label>
<select id="go">…</select>
<button type="button" onclick="location.href=go.value">Git</button>

2. Odakta pencere açan alan

Yeni pencere açmak bir bağlam değişikliğidir. Bunu bir düğmeden açın.

Hatalı
<input onfocus="window.open('/yardim')">
Doğru
<input id="code">
<a href="/yardim" target="_blank" rel="noopener">Kodunuzu bulma yardımı (yeni sekmede açılır)</a>

3. Odak alınca odağı taşıyan betik

Odağı otomatik olarak sonraki alan gibi başka bir bileşene taşımak, kontrolü kullanıcıdan alır.

Hatalı
first.addEventListener("focus", () => second.focus());
Doğru
<!-- Odağın nereye gideceğine kullanıcı karar versin -->
<input id="first"> <input id="second">

4. Odakla açılan tam ekran arama

Kip penceresi açmak odağı taşır ve sayfayı yeniden düzenler. Tıklamada ya da Enter'da açın.

Hatalı
search.addEventListener("focus", openFullScreenSearch);
Doğru
openSearchBtn.addEventListener("click", openFullScreenSearch);

5. Odağı kaldıran betik

Bir öğe odak aldığında blur() çağırmak sayfayı klavyeyle kullanmayı zorlaştırır ya da imkânsız kılar (F55).

Hatalı
link.addEventListener("focus", () => link.blur());
Doğru
/* Odağı kaldırmayın. Bunun yerine biçimlendirin */
a:focus-visible { outline: 3px solid #0b5fff; outline-offset: 2px; }

6. İzin verilen: odakta bir ipucu

Bir alan odak aldığında yardımcı metin göstermek, odak taşınmadığı ve hiçbir yere gidilmediği için bağlam değişikliği değil, içerik değişikliğidir.

Hatalı
<input onfocus="location.href='/sonraki'">
Doğru
<label for="pw">Parola</label>
<input id="pw" type="password" aria-describedby="pw-hint">
<p id="pw-hint">En az 12 karakter.</p>

Mobil için kod örnekleri

Mobilde odak, ekran okuyucu kullanıcısı kaydırdığında ya da klavye kullanıcısı sekmeyle geçtiğinde taşınır. Bir odak geri çağrısından gezinmeyin ya da sayfa açmayın. Kontrolün etkinleştirmesini kullanın.

iOS (SwiftUI)

import SwiftUI

struct HomeView: View {
    @State private var showHelp = false

    var body: some View {
        // Yardım sayfasını etkinleştirme açar; düğmeye yalnızca odaklanmak açmaz
        Button("Yardım") { showHelp = true }
            .sheet(isPresented: $showHelp) { HelpView() }

        // Kaçının: odak değişikliklerine gezinerek ya da sayfa sunarak tepki vermek
        // .onChange(of: focusedField) { _, _ in showHelp = true }
    }
}

Android (Jetpack Compose)

import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier

@Composable
fun HelpButton(onOpenHelp: () -> Unit) {
    // Yardımı etkinleştirme açar; odak almak açmaz
    Button(onClick = onOpenHelp) { Text("Yardım") }

    // Kaçının: Modifier.onFocusChanged { if (it.isFocused) onOpenHelp() }
}

Nasıl test edilir?

  • Sayfada sekmeyle gezin: Tab tuşuyla her kontrolden geçin. Kendiliğinden bir şey açılıyor, gönderiliyor, gezinti yapılıyor ya da odak taşınıyor mu?
  • Alanlara tıklayın: Her alana ve menüye tıklayın ya da dokunun. Bir şeyi etkinleştirmeden sayfa değişiyor mu?
  • Kodu arayın: Pencere açan, konumu değiştiren, form gönderen ya da focus() veya blur() çağıran focus ve onfocus işleyicilerini arayın.
  • Ekran okuyucu kullanın: Ok tuşlarıyla kontroller arasında gezin. Bir kontrole varmak bir şeyi tetikliyor mu?
  • Bileşenleri kontrol edin: Tarih seçiciler, otomatik tamamlama, özel seçim kutuları ve üçüncü taraf bileşenler sıklıkla odağa tepki verir.
  • İzin verilenleri kontrol edin: Araç ipuçları, ipuçları ve odakta genişleyen metin, odak taşınmadığı ve hiçbir yere gidilmediği sürece sorun değildir.
  • Denetleyiciyi başlangıç olarak kullanın: Otomatik araçlar bir odak işleyicisinin ne yaptığını değerlendiremez. Klavye yolunu bir kişi test etmelidir.

Sık yapılan hatalar

  • Odakta gezinme: Odak alınca yeni sayfaya giden seçim listesi ya da bağlantı.
  • Odakta açılan yeni pencereler: Bir alana gelindiğinde açılır pencere.
  • Odağı taşıyan betik: Bir alan odak alınca sonraki alana atlamak.
  • Odağı kaldıran betik: Odakta blur() çağrısı (F55).
  • Odakta tam ekran katmanlar: Sekmeyle gelindiğinde devralan arama ya da sohbet panelleri.
  • Kendiliğinden ilerleyen alanlar: Sonraki alana ulaşılır ulaşılmaz ona geçmek.
  • Etkinleştirmeyi odakla karıştırmak: Bir düğmede Enter'a basmak etkinleştirmedir ve bağlamı değiştirmesine izin verilir.
  • Üçüncü taraf bileşenleri unutmak: Kütüphaneler çoğu zaman kendi odak davranışlarını ekler.

Kaynaklar

Standart sürümü: EN 301 549 V4.1.1 (2026-09), WCAG 2.2. Bu sayfa bilgilendirme amaçlıdır ve hukuki tavsiye niteliği taşımaz; bağlayıcı metin için Avrupa Erişilebilirlik Yasası'nın (Direktif (AB) 2019/882) ve EN 301 549 standardının resmî metinlerini esas alın.

Corpowid, Gartner tarafından tanınan bir platformdur.

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.

Corpowid hakkında sorularınız mı var?

Bizimle iletişime geçin.

Size en kısa sürede geri dönüş sağlayacağız.