WCAG 2.3.1 · A Seviyesi
Üç Kere veya Aşağısı Yanıp Sönme Eşiği
İçeriğin herhangi bir saniyede üç kereden fazla yanıp sönmemesini ya da yanıp sönmenin genel ve kırmızı yanıp sönme eşiklerinin altında kalmasını ister.
Kısaca
Hızlı ve yüksek kontrastlı ışık değişimleri, ışığa duyarlı epilepsisi olan kişilerde nöbete yol açabilir. Bu, kontrol listesinde doğrudan sağlıkla ilgili olan ve kullanıcı bir denetime ulaşamadan zarar verebilecek nadir kriterlerden biridir.
Kriter, içeriğin herhangi bir bir saniyelik aralıkta üç kereden fazla yanıp sönmemesini ister. Üçten fazla yanıp sönme varsa, bu yanıp sönmenin ekranın küçük bir alanıyla sınırlı kalması ve özellikle doygun kırmızı geçişler içermemesi gerekir. En güvenli yol, saniyede üçten fazla yanıp sönen tasarımlardan tamamen kaçınmaktır.
Neleri kapsar?
- Yanıp sönme: Kısa sürede gerçekleşen ani parlaklık veya renk değişimleri; açık-koyu-açık bir çift, bir yanıp sönme sayılır.
- Genel yanıp sönme eşiği: Parlaklık değişiminin büyüklüğüne ve kapladığı alana bağlıdır. Yanıp sönen bitişik alan, görüş alanında yaklaşık 0,006 steradyanı aşmamalıdır; bu, 1024×768 çözünürlükte yaklaşık 21.824 bitişik piksele karşılık gelir.
- Kırmızı yanıp sönme eşiği: Doygun kırmızı içeren geçişler daha düşük sınırlarda bile risk taşır.
- Kapsam: Animasyonlar, CSS geçişleri, videolar, reklam alanları, oyunlar ve uyarı efektleri.
- Kapsam dışı notlar: Eşiği aşmayan hareketli içeriğin durdurulabilmesi bir önceki kriterin (Duraklatma, Durdurma, Gizleme) konusudur.
Kimleri etkiler?
Işığa duyarlı epilepsisi olan kişiler doğrudan risk altındadır; bu kişilerin bir kısmı durumlarından ilk nöbete kadar habersiz olabilir. Migren hastaları ve bazı vestibüler veya nörolojik rahatsızlıkları olan kullanıcılar da yanıp sönen içerikten olumsuz etkilenebilir. Risk, kullanıcının içeriği durdurmaya fırsat bulamadan ortaya çıkabileceği için önlem tasarım aşamasında alınmalıdır.
Kontrol listesinde
Bu kriter, Bakanlığın A Seviyesi Kontrol Listesi'nde 79–81 numaralı soruları kapsar. Yönlendirme soruları sayfada ilgili içerik olup olmadığını belirler; yoksa liste sizi sonraki soruya geçirir. Aşağıdaki açıklamalar sorulardan alıntı değil, özetidir. Soruların tam metni için resmî listeye bakın.
| Soru | Türü | Ne kontrol eder? |
|---|---|---|
| 79 | Yönlendirme | Sayfada yanıp sönme etkisi içeren bilgi veya bileşen olup olmadığını sorar. |
| 80 | Yönlendirme | Bu içeriğin herhangi bir saniyede üç kereden fazla yanıp sönüp sönmediğini sorar. |
| 81 | ★★ Olmaması gereken | Saniyede üçten fazla yanıp sönen içeriğin genel veya kırmızı yanıp sönme eşiğini aşıp aşmadığını sorar. "Evet" yanıtı içeriğin sağlık riski taşıdığını ve düzeltilmesi gerektiğini gösterir. |
Resmî kontrol listesini indirin (PDF), yeni sekmede açılır
Web için kod örnekleri
1. Hızlı yanıp sönen uyarı
Dikkat çekmek için hızlı yanıp sönen bir uyarı yerine kalıcı, belirgin bir görünüm kullanın.
.acil-uyari {
/* saniyede 5 kez açık-koyu geçiş */
animation: yanip-son 0.2s steps(1) infinite;
}
@keyframes yanip-son {
50% { background: #ffffff; color: #000000; }
}.acil-uyari {
background: #fff4e5;
border-left: 6px solid #b45309;
padding: 1rem;
font-weight: 700;
}2. Yanıp sönme gerekiyorsa yavaş ve yumuşak
Bir dikkat çekme efekti gerekiyorsa saniyede birden az ve yumuşak geçişli olmalı, kısa bir süre sonra durmalıdır.
.yeni-etiketi {
/* 2 saniyelik döngü = saniyede 0,5 yanıp sönme; 3 kez tekrarlanır */
animation: nabiz 2s ease-in-out 3;
}
@keyframes nabiz {
0%, 100% { opacity: 1; }
50% { opacity: 0.6; }
}
@media (prefers-reduced-motion: reduce) {
.yeni-etiketi { animation: none; }
}3. Kırmızı tam ekran efekti
Hata veya alarm durumlarında ekranı kırmızıyla yakıp söndürmek kırmızı yanıp sönme eşiğini aşabilir.
body.alarm {
animation: kirmizi 0.25s steps(1) infinite;
}
@keyframes kirmizi {
50% { background: #ff0000; }
}<div class="alarm-bildirimi" role="alert">
<svg aria-hidden="true" focusable="false">…</svg>
Ödeme alınamadı. Kart bilgilerinizi kontrol edin.
</div>4. Video içerikleri
Video kliplerde hızlı kesmeler, flaş ışıkları ve patlama efektleri eşiği aşabilir. Bu tür videolar yayın öncesinde bir analiz aracıyla kontrol edilmelidir. Uyarı metni eklemek kriteri karşılamaz, ama analiz sonucu düzenleme yapılırken geçici bir önlem olarak kullanılabilir.
<!-- Uyarı tek başına yeterli değildir; video eşik altına düzenlenmelidir. -->
<p id="video-uyari">
Bu videoda ani ışık değişimleri bulunmaktadır.
</p>
<video controls preload="none"
aria-describedby="video-uyari"
src="/video/festival-tanitim-duzenlenmis.mp4"></video>5. Betikle oluşturulan efektler
Canvas veya betikle yapılan geçişlerde yanıp sönme sıklığını kodda sınırlayın.
// Bir saniyede en fazla 3 geçiş: en az 333 ms aralık
const EN_KISA_ARALIK = 1000 / 3;
let sonGecis = 0;
function parlaklikDegistir(zaman) {
if (zaman - sonGecis >= EN_KISA_ARALIK) {
sonGecis = zaman;
renkleriDegistir(); // Kendi fonksiyonunuz
}
requestAnimationFrame(parlaklikDegistir);
}
requestAnimationFrame(parlaklikDegistir);Mobil için kod örnekleri
iOS (SwiftUI)
import SwiftUI
struct YeniEtiketi: View {
@State private var soluk = false
@Environment(\.accessibilityReduceMotion) private var hareketAzalt
var body: some View {
Text("Yeni")
.padding(6)
.background(Color.orange.opacity(soluk ? 0.6 : 1))
.onAppear {
guard !hareketAzalt else { return }
// 1 sn'lik yarım döngü = saniyede 0,5 yanıp sönme; 3 kez tekrarlanır
withAnimation(.easeInOut(duration: 1).repeatCount(6, autoreverses: true)) {
soluk = true
}
}
}
}Android (Jetpack Compose)
import androidx.compose.animation.core.*
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
@Composable
fun YeniEtiketi() {
val donusum = rememberInfiniteTransition(label = "nabiz")
val saydamlik by donusum.animateFloat(
initialValue = 1f,
targetValue = 0.6f,
animationSpec = infiniteRepeatable(
// 1000 ms'lik yarım döngü: saniyede 0,5 yanıp sönme
animation = tween(durationMillis = 1000, easing = FastOutSlowInEasing),
repeatMode = RepeatMode.Reverse
),
label = "saydamlik"
)
Text(
"Yeni",
modifier = Modifier
.alpha(saydamlik)
.background(Color(0xFFF59E0B))
.padding(6.dp)
)
}Bu Compose örneği sürekli tekrar eder; 5 saniyeyi aştığı için bir önceki kriter (Duraklatma, Durdurma, Gizleme) gereği durdurulabilir olmalı veya sınırlı sayıda tekrar etmelidir.
Nasıl test edilir?
- Yanıp sönen içeriği belirleyin: Sayfadaki animasyonları, reklamları ve videoları gözden geçirin. Hızlı parlaklık veya renk değişimi var mı?
- Sıklığı ölçün: CSS animasyon sürelerini ve betik aralıklarını kontrol edin; bir saniyede üçten fazla açık-koyu geçiş var mı?
- Videoları analiz edin: Trace Center'ın ücretsiz PEAT (Photosensitive Epilepsy Analysis Tool) aracı gibi yazılımlarla video ve animasyon kayıtlarını eşik açısından analiz edin.
- Kendinizi riske atmayın: Işığa duyarlılığınız varsa yanıp sönen içeriği doğrudan izleyerek test etmeyin; kod incelemesi ve analiz araçlarını kullanın.
- Otomatik araçların sınırı: Genel erişilebilirlik tarayıcıları (axe, WAVE, Lighthouse gibi) yanıp sönme eşiğini ölçmez. Bu kriter için özel analiz araçları ve kod incelemesi gerekir.
Sık yapılan hatalar
- Uyarı metnini çözüm saymak: "Bu içerik yanıp sönme içerir" uyarısı kriteri karşılamaz; içerik eşik altına indirilmelidir.
- Reklam alanlarını denetlememek: Üçüncü taraf banner reklamlar da sayfanın parçasıdır.
- Tanıtım videolarında hızlı kurgu: Konser, festival ve spor tanıtımlarındaki hızlı ışık değişimleri sık görülen bir risktir.
- Kısa animasyon süresini gözden kaçırmak: 0,3 saniyenin altındaki
animation-durationdeğerleri yanıp sönme ile sonuçlanabilir. - Kırmızı alarm efektleri: Hata ve alarm durumlarında ekranın kırmızıyla yakılıp söndürülmesi.
Kaynaklar
- Understanding SC 2.3.1: Three Flashes or Below Threshold (W3C), İngilizce, yeni sekmede açılır
- Erişilebilirlik blogu — Uygulamadan örnekler ve güncel yazılar.
- Erişilebilirlik kütüphanesi — Yanıp sönme eşiği, ışığa duyarlı epilepsi, hareketi azaltma ve diğer terimler.
Sitenizde bu kriter nasıl görünüyor?
Ücretsiz tarama, bu kriterdeki sorunları ve diğerlerini Bakanlığın A Seviyesi Kontrol Listesi esas alınarak listeler.
Sıradaki kriterler
Varsayılan İçerik Dili
Her sayfanın veya uygulamanın varsayılan dilinin kodda tanımlanmasını, böylece ekran okuyucuların metni doğru dilde ve doğru telaffuzla seslendirmesini ister.
Kriteri inceleZaman Kontrolü
Süre sınırı olan işlemlerde kullanıcının süreyi kapatabilmesini, en az on katına kadar uzatabilmesini ya da süre dolmadan uyarılıp basit bir işlemle süre ekleyebilmesini ister.
Kriteri inceleAltyazılar (Önceden Kaydedilmiş)
Önceden kaydedilmiş ve hem ses hem görüntü içeren medyada, konuşmaların ve anlam taşıyan seslerin senkronize altyazılarla sunulmasını ister.
Kriteri incele