ViraStack
  • Academy
  • About
  • Support
HomeSourcesContribute
ViraStack

A DX-first toolkit for frontend developers: starters, agent rules, form hooks, and a guide.

Products

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Explore

  • Academy
  • About
  • Brand
  • Support

© 2026 ViraStack.

Open source · MIT

Performans ve Erişilebilirlik

08 / 09

Renk, kontrast ve hareket

Okunabilir renkler, yakınlaştırma ve azaltılmış hareket.

Kontrast Nedir

Kontrast oranı, metnin (ya da bir arayüz parçasının) rengi ile arkasındaki renk arasındaki parlaklık farkını tek bir sayıyla ifade eder: 4.5:1 gibi. Oran yükseldikçe metin düşük görme keskinliği olan, renk algısı farklı olan ya da güneş altında telefona bakan herkes için daha kolay okunur.

Bu, webdeki en yaygın erişilebilirlik hatasıdır: 2026'da bir milyon ana sayfanın %83,9'unda düşük kontrastlı metin bulundu, sayfa başına ortalama 34 farklı örnekle.1

Metin Kontrastı (1.4.3)

WCAG 2.2'nin 1.4.3 Contrast (Minimum) kriteri (AA) iki eşik koyar:2

NeEn az oran
Normal metin4.5:1
Büyük metin: 18pt (yaklaşık 24px) ya da 14pt kalın (yaklaşık 18,5px)3:1
  • Yuvarlama yok: 4.499:1 çıkan bir renk çifti 4.5:1'i karşılamaz.2

  • İstisnalar: Devre dışı (inactive) bir bileşenin metni, saf süs olan metin ve logo içindeki yazı bu kurala tabi değildir.2

  • Neden 4.5: Standart metin için önerilen 3:1, yaşla ve hafif görme kaybıyla azalan kontrast duyarlılığını telafi edecek şekilde 4.5:1'e çıkarılmıştır.2

Metin Dışı Kontrast (1.4.11)

1.4.11 Non-text Contrast (AA), metin olmayan ama anlam taşıyan görsellerin bitişik renge karşı en az 3:1 olmasını ister:3

  • Bir bileşeni tanıtan görsel: input kenarlığı, checkbox çerçevesi.

  • Durumu gösteren işaret: seçili sekme, işaretli kutu, odak göstergesi.

  • Grafiklerin anlam taşıyan parçaları: pasta grafiğin dilimleri, ikonlar.

Beyaz zemin üzerinde #9D9D9D gri kenarlıklı bir checkbox 2.7:1 ile bu kriteri geçemez. Devre dışı bileşenler ve tarayıcının değiştirilmemiş varsayılan görünümü istisnadır.3 Odak göstergesinin ayrıntıları Klavye ve Odak dersinde.

DevTools'ta Kontrol Etmek

Chrome DevTools kontrastı birkaç yerden gösterir:4

  1. Inspect tooltip: Elements panelinde bir metnin üzerine gelince oran görünür; yetersizse uyarı ikonu çıkar.

  2. Color Picker: Styles'ta color değerinin yanındaki kareye tıklayın, Contrast ratio bölümünü açın. AA ve AAA'yı geçip geçmediğini, renk alanındaki çizgilerle hangi tonların yeterli olduğunu gösterir; Use suggested color uygun bir rengi kendisi seçer.

  3. CSS Overview: Tüm sayfadaki kontrast sorunlarını tek listede toplar (Colors > Contrast issues).

Tip

Arka plan rengi tanımlı değilse (görsel ya da gradyan üstünde metin) oran görünmeyebilir; arka planı eyedropper ile sayfadan seçin. Hover ve focus durumlarını Styles panelindeki :hov düğmesiyle zorlayıp ayrıca kontrol edin.5

Rendering sekmesindeki görme bozukluğu emülasyonu sayfayı bulanık görme ya da farklı renk algısıyla görmenizi sağlar.6 Otomatik tarama araçları Erişilebilirlik Testi dersinde.

Bilgiyi Yalnızca Renkle Vermeyin (1.4.1)

1.4.1 Use of Color (A), rengin bilgiyi iletmenin tek görsel yolu olmamasını ister. Kırmızı ile yeşili ayırt edemeyen biri için "kırmızı alanlar zorunludur" bir anlam taşımaz.7

// Kötü: hata yalnızca kırmızı kenarlıkla belli
<input className="border-red-600" />

// İyi: renk + ikon + metin
<input id="email" aria-describedby="email-error" className="border-red-600" />
<p id="email-error" className="text-red-700">
  <AlertIcon aria-hidden="true" /> Geçerli bir e-posta adresi girin.
</p>

Metin içindeki linkler için de aynı kural geçerlidir: link rengi çevredeki metinden en az 3:1 farklı olmalıdır; fark belirli bir rengi algılamaya dayanıyorsa alt çizgi gibi ek bir görsel ipucu şarttır.7

Don't

  • Grafik serilerini, form hatalarını ya da durumları (aktif/pasif) yalnızca renkle ayırmayın.

Do

  • Renge ek olarak metin, ikon, desen ya da alt çizgi kullanın.7

APCA Hakkında

Kontrastı daha gerçekçi ölçmeyi hedefleyen APCA algoritması bir dönem WCAG 3 taslağındaydı ama 2023'te çıkarıldı; WCAG 3'ün hangi algoritmayı kullanacağı hâlâ belirsiz ve standart en erken 2030'da bekleniyor, bu yüzden bugün geçerli olan WCAG 2 oranlarıdır.8

Metin Büyütme ve Reflow

Kullanıcılar metni büyütür ya da sayfayı yakınlaştırır. İki kriter bunun bozulmadan çalışmasını ister:

  • 1.4.4 Resize Text (AA): Metin, yardımcı teknoloji olmadan %200'e kadar büyütüldüğünde içerik ya da işlev kaybolmamalıdır; kırpılan, üst üste binen metin bu kriteri bozar.9

  • 1.4.10 Reflow (AA): İçerik 320 CSS px genişlikte yatay kaydırma gerektirmeden okunabilmelidir. Bu, 1280px genişliğindeki bir ekranda %400 yakınlaştırmaya denk gelir. Harita, veri tablosu, video gibi iki boyutlu düzen gerektiren içerik istisnadır.10

Pratikte: yazı boyutlarını CSS dersinde gördüğünüz gibi rem ile verin, sabit height ile metin kutusunu kilitlemeyin, düzeni responsive kurun. Test için tarayıcıda %400'e yakınlaştırın ya da DevTools'ta genişliği 320px'e indirin.

Hedef Boyutu (2.5.8)

WCAG 2.2 ile gelen 2.5.8 Target Size (Minimum) (AA), tıklanan ya da dokunulan hedeflerin en az 24x24 CSS px olmasını ister.1112

.icon-button {
  min-width: 24px;
  min-height: 24px;
}

Hedef daha küçükse, merkezine 24px çapında bir daire çizildiğinde komşu hedeflere değmeyecek kadar boşluk bırakmak da yeterlidir. Cümle içindeki linkler, aynı işi yapan yeterli boyutta bir alternatif ve tarayıcının değiştirilmemiş kontrolleri istisnadır. Önemli butonlar için daha sıkı olan 2.5.5 Target Size (Enhanced) hedeflenebilir.11

Azaltılmış Hareket

Büyük yakınlaştırmalar, dönen öğeler ve özellikle parallax, vestibüler bozukluğu olan kişilerde baş dönmesi ve mide bulantısı tetikleyebilir.1314 İşletim sistemleri bunun için bir "hareketi azalt" ayarı sunar (Windows'ta Animation Effects, macOS ve iOS'ta Reduce Motion, Android'de Remove animations). Tarayıcı bu tercihi prefers-reduced-motion media query'siyle sayfaya iletir; tüm tarayıcılarda 2020'den beri desteklenir.13

İşletim sistemi web animasyonlarını kendiliğinden kapatmaz, tercihe uymak geliştiricinin işidir.15 Önerilen yaklaşım no-motion-first: animasyonu varsayılan olarak yazmayın, yalnızca kullanıcı bir tercih belirtmediyse ekleyin.1516

.card {
  opacity: 1;
}

@media (prefers-reduced-motion: no-preference) {
  .card {
    transition: transform 300ms ease;
  }
  .card:hover {
    transform: translateY(-4px);
  }
}

"Azaltılmış" hiç hareket olmaması demek değildir. Büyük bir kaydırma ya da yakınlaştırmayı crossfade'e çevirmek, parallax'ı kaldırıp içeriği korumak yeterlidir; küçük renk ve opaklık değişimleri genellikle sorun yaratmaz.14 Hover gibi geri bildirimleri de tamamen silmeyin, yalnızca hareketsiz hale getirin.16

Tailwind dersinden hatırlarsanız aynı iş variant'larla yapılır: motion-safe: yalnızca kullanıcı hareketi azaltmadıysa, motion-reduce: yalnızca azalttıysa uygulanır.17

<button class="motion-safe:transition motion-safe:hover:-translate-y-0.5">
  Kaydet
</button>

JavaScript ile çalışan animasyonlarda (React Spring, Framer Motion, GSAP) tercihi window.matchMedia ile okursunuz. Aşağıdaki hook Josh Comeau'nun örneğinden kısaltılarak uyarlandı; sunucuda tercih bilinmediği için başlangıç değeri "hareket azaltılmış" kabul edilir:18

"use client";

import { useEffect, useState } from "react";

const QUERY = "(prefers-reduced-motion: no-preference)";

export function usePrefersReducedMotion() {
  const [reduced, setReduced] = useState(true);

  useEffect(() => {
    const mql = window.matchMedia(QUERY);
    setReduced(!mql.matches);
    const onChange = (e: MediaQueryListEvent) => setReduced(!e.matches);
    mql.addEventListener("change", onChange);
    return () => mql.removeEventListener("change", onChange);
  }, []);

  return reduced;
}

Ayarı değiştirmeden test etmek için DevTools'ta Command Palette'i açıp prefers-reduced-motion: reduce emülasyonunu seçebilirsiniz.15 Çok hareketli sayfalarda kullanıcıya sayfa içinde bir "animasyonları durdur" düğmesi sunmak da önerilir.14

Forced Colors

Windows'taki yüksek kontrast temaları gibi forced colors modunda tarayıcı sizin renklerinizi kullanıcının seçtiği sınırlı bir paletle değiştirir ve box-shadow'u kaldırır. Yalnızca gölgeyle belirginleşen bir buton bu modda görünmez olabilir; @media (forced-colors: active) içinde ButtonText gibi bir sistem rengiyle kenarlık eklemek yeterlidir. Bu modu ayrı bir tasarıma dönüştürmeyin, yalnızca bozulan yerleri düzeltin.19 Tailwind'de karşılığı forced-colors: variant'ıdır.17

Detaylı Öğrenmek İçin

  • Konuşma: Val Head'in hareket hassasiyeti için güvenli animasyon tasarlamayı anlattığı konuşma (Web Directions Code 2020, Conffab'da ücretsiz hesapla izlenir).20

  • Yazı: Val Head'in hangi hareketin tetikleyici olduğunu ve yerine ne konacağını örneklerle anlattığı Smashing yazısı.14

  • React'te animasyon: Josh Comeau'nun prefers-reduced-motion yazısı; React Spring ile örnek ve SSR notu.15

  • Kontrastın geleceği: Adrian Roselli'nin WCAG 3 ve APCA'nın Nisan 2026 durumunu özetleyen yazısı.8

  • WCAG 2.2'de ne değişti: W3C'nin yeni kriterleri listeleyen özeti.12

Kaynaklar

  • 1ResearchWebAIM Million 2026

    Düşük kontrastlı metnin ana sayfalardaki yaygınlığı ve sayfa başına sayısı.

  • 2DocsW3C: Understanding SC 1.4.3 Contrast (Minimum)

    4.5:1 ve 3:1 eşikleri, büyük metin tanımı, istisnalar ve oranın gerekçesi.

  • 3DocsW3C: Understanding SC 1.4.11 Non-text Contrast

    Arayüz bileşenleri, durumlar ve grafikler için 3:1 kuralı.

  • 4DocsChrome for Developers: Make your website more readable

    DevTools'ta düşük kontrastı bulma ve önerilen renkle düzeltme.

  • 5ArticleWebAIM: Using Chrome Developer Tools to check contrast

    Color Picker adımları, arka plan seçimi ve hover/focus durumlarını test etme.

  • 6DocsChrome for Developers: DevTools Tips: Discover and fix low contrast text

    Kontrast araçları ve görme bozukluğu emülasyonunu gösteren kısa ipucu.

  • 7DocsW3C: Understanding SC 1.4.1 Use of Color

    Bilgiyi yalnızca renkle vermemek, link ve form alanı örnekleri.

  • 8ArticleAdrian Roselli: WCAG3 Contrast as of April 2026

    APCA'nın WCAG 3 taslağındaki durumu ve bugün için öneri.

  • 9DocsW3C: Understanding SC 1.4.4 Resize Text

    Metnin %200'e kadar büyütülebilmesi ve istisnaları.

  • 10DocsW3C: Understanding SC 1.4.10 Reflow

    320 CSS px genişlikte iki yönlü kaydırma olmadan okuma.

  • 11DocsW3C: Understanding SC 2.5.8 Target Size (Minimum)

    24x24 CSS px hedef boyutu, boşluk testi ve istisnalar.

  • 12DocsW3C WAI: What's New in WCAG 2.2

    WCAG 2.2'de eklenen dokuz kriter ve kaldırılan 4.1.1.

  • 13DocsMDN: prefers-reduced-motion

    Media query değerleri, işletim sistemi ayarları ve tarayıcı desteği.

  • 14ArticleVal Head: Designing With Reduced Motion For Motion Sensitivities

    Tetikleyici hareket türleri, crossfade alternatifi ve motion toggle.

  • 15ArticleJosh W. Comeau: Accessible Animations in React with "prefers-reduced-motion"

    No-motion-first yaklaşım, React hook'u ve DevTools'ta emülasyon.

  • 16ArticleMichelle Barker: Respecting Users' Motion Preferences

    Reduced-motion-first CSS, `matchMedia` ve geri bildirimi korumak.

  • 17DocsTailwind: Hover, focus, and other states

    `motion-safe:`, `motion-reduce:` ve `forced-colors:` variant'ları.

  • 18ArticleJosh W. Comeau: usePrefersReducedMotion

    Hareket tercihini okuyan React hook'unun kodu ve SSR notu.

  • 19DocsMDN: forced-colors

    Forced colors modunda değişen özellikler, sistem renkleri ve öneriler.

  • 20VideoVal Head: Prefers Reduced Motion: Designing Safer Animation for Motion Sensitivities (Code 2020)

    Hareket hassasiyeti, `prefers-reduced-motion` ve güvenli animasyon alternatifleri.

Edit this page

Last updated: October 17, 2026

Previous step07. Klavye ve odak yönetimiNext step09. Erişilebilirlik testi