JavaScript ile Web Sayfası İçin Gece Modu Geçişi Nasıl Yapılır?
Modern web tasarımında kullanıcı deneyimini iyileştiren en önemli özelliklerden biri, kullanıcıların göz yorgunluğunu azaltan ve pil tasarrufu sağlayan gece modu (dark mode) seçeneğidir. JavaScript ile web sayfası için gece modu geçişi nasıl yapılır sorusu, özellikle kullanıcı dostu arayüzler geliştirmek isteyen frontend geliştiricilerin en sık araştırdığı konulardan biridir.
Bu rehberde, modern JavaScript sözdizimi ve CSS değişkenlerini kullanarak, tarayıcı tercihlerine duyarlı ve kullanıcı seçimini hatırlayan profesyonel bir gece modu mekanizmasını adım adım inşa edeceğiz. Bu eğitim, HTML, CSS ve JavaScript temellerine sahip olan ancak dinamik tema yönetimi konusunda pratik bir rehber arayan geliştiriciler için hazırlanmıştır.
Gereksinimler ve Ön Hazırlık
Bu uygulamayı hayata geçirmek için ekstra bir kütüphaneye veya framework'e ihtiyacınız yoktur. Modern tarayıcıların desteklediği standart Web API'leri yeterlidir. Çalışma ortamınızda şunların hazır olduğundan emin olun:
- Modern bir kod editörü (VS Code gibi).
- Temel düzeyde HTML5 ve CSS3 bilgisi.
- JavaScript'te DOM (Document Object Model) manipülasyonu hakkında temel bilgi.
- Tarayıcıda yerel depolama (LocalStorage) mantığına aşinalık.
Adım 1: CSS Değişkenleri ile Temel Yapıyı Kurma
Gece modu geçişinin en temiz yolu, renkleri doğrudan CSS içinde değil, CSS değişkenleri (root değişkenleri) üzerinden tanımlamaktır. Bu sayede sadece bir sınıf değişikliği ile tüm sayfanın renk paletini güncelleyebiliriz.
:root {
--bg-color: #ffffff;
--text-color: #333333;
}
body.dark-mode {
--bg-color: #121212;
--text-color: #f4f4f4;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.3s, color 0.3s;
}
Yukarıdaki kodda, :root seçicisi varsayılan aydınlık modu, .dark-mode sınıfı ise gece modu renklerini tanımlar. transition özelliği ise geçişlerin sert değil, yumuşak bir animasyonla gerçekleşmesini sağlar.
Adım 2: HTML Buton Yapısını Oluşturma
Kullanıcının modu değiştirebilmesi için etkileşimli bir öğeye ihtiyacımız var. Basit bir buton veya checkbox yapısı işimizi görecektir.
Modu Değiştir
Bu buton, JavaScript tarafında tıklama olayını (event listener) dinleyeceğimiz ana tetikleyici görevini görecektir.
Adım 3: JavaScript ile Tema Değiştirme Mantığı
Şimdi butona tıklandığında body etiketine dark-mode sınıfını ekleyen veya kaldıran JavaScript kodunu yazalım. Bu işlem için classList.toggle metodu en verimli yöntemdir.
const toggleButton = document.getElementById('theme-toggle');
const body = document.body;
toggleButton.addEventListener('click', () => {
body.classList.toggle('dark-mode');
});
Bu kod bloğu, kullanıcı butona her tıkladığında dark-mode sınıfını body üzerinde açıp kapatır. Böylece CSS değişkenleri otomatik olarak güncellenir.
Adım 4: Kullanıcı Tercihini Yerel Depolamada (LocalStorage) Saklama
Kullanıcı sayfayı yenilediğinde seçtiği modun kaybolmaması gerekir. Bunun için localStorage kullanarak kullanıcının tercihini tarayıcıda kalıcı hale getiriyoruz.
toggleButton.addEventListener('click', () => {
body.classList.toggle('dark-mode');
if (body.classList.contains('dark-mode')) {
localStorage.setItem('theme', 'dark');
} else {
localStorage.setItem('theme', 'light');
}
});
Bu işlem, her mod değişikliğinde tarayıcının hafızasına 'theme' anahtarı ile 'dark' veya 'light' değerini yazar.
Adım 5: Sayfa Yüklendiğinde Kayıtlı Tercihi Uygulama
Sayfa ilk açıldığında, localStorage içerisinde bir kayıt olup olmadığını kontrol etmeli ve varsa o temayı uygulamalıyız. Aksi takdirde, kullanıcı her sayfayı yenilediğinde aydınlık mod ile karşılaşır.
const savedTheme = localStorage.getItem('theme');
if (savedTheme === 'dark') {
body.classList.add('dark-mode');
}
Bu kontrolü script dosyanızın en başında çalıştırmanız, sayfa render edilmeden önce temanın uygulanmasını sağlar ve "flash of white" (beyaz parlama) sorununu önler.
Adım 6: Sistem Tercihlerine Duyarlı Hale Getirme
Profesyonel bir yaklaşım, kullanıcının işletim sistemi düzeyindeki gece modu tercihini de dikkate almaktır. window.matchMedia metodu ile bunu kolayca yapabiliriz.
const userPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (!savedTheme && userPrefersDark) {
body.classList.add('dark-mode');
}
Bu mantık, eğer kullanıcı daha önce özel bir seçim yapmadıysa, işletim sistemi gece modundaysa web sayfasının da otomatik olarak gece modunda açılmasını sağlar.
Gece Modu Uygulama Yöntemleri Karşılaştırması
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| CSS Değişkenleri | Performanslı, yönetimi kolay | Eski tarayıcı desteği kısıtlı |
| Class Değişimi | Basit, hızlı uygulanır | Çok büyük projelerde karmaşıklaşabilir |
| Data-attribute | CSS seçicilerinde daha spesifik kontrol | JavaScript tarafında ek işlem gerektirir |
Güvenlik Uyarısı: Yerel depolama (LocalStorage) üzerinden veri okurken, bu verinin kullanıcı tarafından değiştirilebileceğini unutmayın. Uygulamanızda bu veriye dayalı kritik bir güvenlik kararı vermeyin; sadece arayüz tercihi gibi görsel ayarlar için kullanın.
Sıkça Sorulan Sorular
Gece modu geçişlerinde neden beyaz parlama oluyor?
Bu genellikle JavaScript kodunun sayfanın en altında çalıştırılmasından kaynaklanır. Kodunuzu içerisinde veya defer özelliği ile yükleyerek bu sorunu çözebilirsiniz.
Kullanıcı tercihini nasıl sıfırlayabilirim?
localStorage.removeItem('theme') komutunu kullanarak kullanıcının kaydettiği tercihi silebilir ve varsayılan ayarlara dönmesini sağlayabilirsiniz.
Resimlerin gece modunda çok parlak görünmesini nasıl engellerim?
CSS içerisinde .dark-mode img { filter: brightness(0.8); } gibi bir kural ekleyerek resimlerin parlaklığını gece modunda otomatik olarak kısabilirsiniz.
Tüm tarayıcılar LocalStorage destekler mi?
Evet, modern tarayıcıların tamamı destekler. Ancak gizli sekme modlarında bazı kısıtlamalar olabilir; bu yüzden kodunuzu try-catch blokları içinde çalıştırmak iyi bir pratiktir.
İşletim sistemi teması değiştiğinde sayfa da otomatik değişebilir mi?
Evet, window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ...) kullanarak sistem teması değiştiğinde sayfa modunu anlık olarak güncelleyebilirsiniz.
Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamında (production) kullanırken, özellikle büyük ölçekli projelerde CSS-in-JS kütüphaneleri veya Tailwind CSS gibi araçların tema yönetimi özelliklerini incelemeniz önerilir.
Gece Modu Tasarımında Performans ve Optimizasyon İpuçları
Gece modu geçişlerini uygularken, özellikle karmaşık sayfa yapılarında performans kayıpları yaşanabilir. Kullanıcı bir butona tıkladığında sayfanın "titremesi" veya geçişin gecikmeli gerçekleşmesi, kullanıcı deneyimini doğrudan olumsuz etkiler. Bu durumu minimize etmek için aşağıdaki teknikleri uygulayabilirsiniz.
CSS Geçişlerinde (Transition) Performans Yönetimi
Tema geçişleri sırasında tüm öğelere transition: all 0.3s ease; atamak, tarayıcının her bir öğeyi yeniden hesaplamasına neden olur. Bunun yerine, sadece renk ve arka plan gibi değişen özellikleri hedeflemek performansı artırır.
/* Kötü Uygulama */
* { transition: all 0.3s; }
/* İyi Uygulama */
body {
transition: background-color 0.3s ease, color 0.3s ease;
}
Ayrıca, will-change özelliğini kullanarak tarayıcının değişecek olan öğeleri önceden optimize etmesini sağlayabilirsiniz. Ancak bu özelliği aşırı kullanmaktan kaçınmalısınız.
Gece Modu İçin İleri Seviye Hata Ayıklama (Debugging)
Gece modu geçişlerinde en sık karşılaşılan sorunlardan biri, JavaScript'in localStorage verisini okumadan önce tarayıcının varsayılan (genellikle açık) temayı render etmesidir. Bu durum, sayfanın bir anlığına beyaz yanıp sönmesine (FOUC - Flash of Unstyled Content) yol açar.
FOUC Sorununu Çözmek İçin Kritik Önlem
Bu sorunu aşmak için JavaScript kodunuzu etiketi içerisine, mümkünse en üst kısma yerleştirerek tarayıcı henüz DOM'u oluşturmadan tema kontrolünü yapmasını sağlayın.
(function() {
const savedTheme = localStorage.getItem('theme');
if (savedTheme === 'dark' || (!savedTheme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
}
})();
Bu yöntem, tarayıcının CSS dosyalarını yüklemeden önce tema sınıfını belirlemesini sağlar ve böylece sayfa ilk açıldığında istenmeyen parlama efektini tamamen ortadan kaldırır.
Test Süreçlerinde Dikkat Edilmesi Gerekenler
Geliştirdiğiniz gece modu yapısını test ederken şu senaryoları mutlaka göz önünde bulundurun:
- Tarayıcı Geliştirici Araçları: Chrome DevTools içerisindeki "Rendering" sekmesinden "Emulate CSS media feature prefers-color-scheme" seçeneğini kullanarak sistem temasını manuel olarak değiştirip test edin.
- Gizli Sekme Testi:
localStorageverisinin temiz olduğu bir ortamda (Gizli Sekme), sistem tercihinin doğru algılanıp algılanmadığını kontrol edin. - Dinamik İçerik: AJAX veya Fetch API ile sonradan yüklenen içeriklerin, mevcut tema sınıfını (
.dark) doğru şekilde miras alıp almadığını doğrulayın.
Sonuç
JavaScript ile gece modu geçişi oluşturmak, web sitenizin erişilebilirliğini ve kullanıcı memnuniyetini artıran temel bir beceridir. CSS değişkenleri ile renkleri yönetmek, LocalStorage ile kullanıcı tercihini saklamak ve sistem tercihlerine uyum sağlamak, profesyonel bir geliştiricinin izlemesi gereken en temiz yoldur.
Bir sonraki adım olarak, bu yapıyı daha da geliştirerek "Otomatik Gece Modu" (örneğin saat 20:00'den sonra otomatik geçiş) özelliğini ekleyebilir veya CSS filter özelliklerini kullanarak daha gelişmiş bir görsel deneyim tasarlayabilirsiniz.


Yorumlar (0)
Yorum Yaz