CSS değişkenleriyle karanlık mod ve tema uygulamak
Kısaca: Renkler için CSS değişkenleri, prefers-color-scheme medya sorgusu ve bir anahtarla sistem ayarına saygı gösteren ve seçimi kaydeden temiz bir karanlık mod kurabilirsin.
Biraz daha ayrıntılı: İyi bir karanlık mod renkleri tersine çevirmekten fazlasıdır: yeterli kontrast, yumuşatılmış yüzeyler, uyarlanmış gölgeler ve görseller. Tasarım belirteçleriyle (adlandırılmış renk değişkenleri) her şey bakımı yapılabilir kalır.
Ayrıntılı
Tasarım belirteçleri olarak değişkenler
:root {
--bg: #ffffff;
--text: #1a1a1a;
--muted: #5c6370;
--accent: #0b6bcb;
--border: #d9dde3;
color-scheme: light dark;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--bg: #12141a; --text: #e8eaf0; --muted: #9aa3b2;
--accent: #6ea8ff; --border: #2a2f3a;
}
}
:root[data-theme="dark"] { --bg: #12141a; --text: #e8eaf0; /* … */ }
body { background: var(--bg); color: var(--text); }--blue değil, anlamsal adlar (--bg, --text, --accent) kullan. color-scheme: light dark, form öğelerini, kaydırma çubuklarını buna göre renklendirir. Yeni: light-dark() işlevi ve @property.
Sistem, anahtar, kaydetme
prefers-color-schemeile sistemi izle (varsayılan).- Açık / koyu / sistem anahtarı:
<html>üzerindedata-themeayarlar; seçimi localStorage’da hatırla (try/catch içinde). - Titremeyi önle (FOUC): tercihi ilk işlemeden önce ayarlayan küçük bir
<head>içi betik. - Next.js’te: next-themes gibi bir kütüphane veya kendi sağlayıcın; hidrasyon farklarına dikkat et (
htmlüzerindesuppressHydrationWarning). - Tarayıcı çubuğu için
<meta name="theme-color">ekle.
Karanlıkta tasarım
- WCAG’a göre kontrastı denetle (metin ≥ 4,5:1), saf siyah/beyaz değil (#000/#fff göz kamaştırır): daha çok
#12141ave#e8eaf0. - Vurgu renklerini aç ve doygunluğu düşür.
- Gölgeler yerine daha açık yüzeylerle yükseklik.
- Görseller/logolar: koyu varyantlar,
filter/mix-blend-mode,currentColorile SVG. - Grafikler ve kod vurgulama kendi paletleriyle.
- Şeffaf PNG’leri koyu zeminde test et.
- Retro/oyun stilleri kendi temalarıdır: aynı değişken yapısı, farklı değerler.
Test ve erişilebilirlik
DevTools’ta Rendering → prefers-color-scheme taklit et; gerçek cihazlarda test et (OLED, güneş ışığı). Odak halkaları ve hata renkleri her iki kipte de görünür olmalı. Ayrıca forced-colors/yüksek kontrast (@media (forced-colors: active)) ve prefers-contrast ayarlarına saygı göster. Yazdırma stilini açık tut. Rengi asla tek başına bilgi olarak kullanma (desen/metin ekle). Belirteçleri küçük bir stil kılavuzunda belgele.
Ayrıca bak: Erişilebilir web siteleri