Pengalih Mode Gelap Otomatis dan Manual
Bangun pengalih tema yang secara bawaan mengikuti preferensi sistem dan memungkinkan pengguna mengubahnya secara manual.
Pengalih Mode Gelap Otomatis dan Manual adalah pelajaran CSS Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar CSS Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus CSS Academy mencakup 4 pelajaran total.
Tujuannya
Implementasi mode dark yang ideal secara default mendeteksi preferensi OS dan menyediakan tombol toggle yang memungkinkan pengguna menggantinya secara mandiri, dengan preferensi yang disimpan di antara pemuatan halaman.
Gambaran Umum Arsitektur
Tiga states yang perlu ditangani:
- Preferensi sistem: gunakan
prefers-color-schemedengan variabel CSS - Penggantian pengguna: dark: atur kelas atau atribut data pada
<html> - Penggantian pengguna: terang: atur kelas lain untuk mencegah mode dark otomatis
Penyiapan Token CSS
Definisikan variabel CSS yang melakukan pewarisan dengan benar untuk semua states:
<div class="demo" data-theme="dark">Dark token demo</div>
<div class="demo" data-theme="light">Light token demo</div>
Logika Toggle JavaScript
Baca preferensi yang tersimpan, terapkan, lalu perbarui saat toggle:
<div class="demo" id="theme-demo">Toggle my theme</div>
<div class="demo" data-theme="dark">Dark override example</div>
<button id="toggle-btn">Toggle Theme</button>
<script>
function toggleTheme() {
const current = document.getElementById('theme-demo').dataset.theme;
const system = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
if (!current) {
const next = system === 'dark' ? 'light' : 'dark';
document.getElementById('theme-demo').dataset.theme = next;
} else {
delete document.getElementById('theme-demo').dataset.theme;
}
}
document.getElementById('toggle-btn').addEventListener('click', toggleTheme);
</script>
Toggle Tiga Keadaan
Toggle tiga keadaan yang lebih terperinci: Terang | Sistem | Dark:
<div class="demo" id="theme-demo">Cycles: light → system → dark</div>
<div class="demo" data-theme="dark">Dark state example</div>
<p id="state-label">system</p>
<button id="cycle-btn">Cycle Theme</button>
<script>
const states = ['light', 'system', 'dark'];
let current = 'system';
const demo = document.getElementById('theme-demo');
const label = document.getElementById('state-label');
document.getElementById('cycle-btn').addEventListener('click', () => {
current = states[(states.indexOf(current) + 1) % states.length];
label.textContent = current;
if (current === 'system') { delete demo.dataset.theme; } else { demo.dataset.theme = current; }
});
</script>
Mencegah Kilatan Tema yang Salah
Terapkan tema yang tersimpan secara sinkron sebelum halaman dirender:
<pre class="code-sample"><!-- In <head>, before any styles -->
<script>
const t = localStorage.getItem("theme");
if (t) document.documentElement.dataset.theme = t;
</script></pre>
Aksesibilitas Tombol Toggle
Tombol toggle harus menyampaikan keadaan saat ini kepada pembaca layar. Perbarui label aksesibel saat toggle:
<button id="theme-toggle" aria-label="Switch to dark mode">🌙</button>
Transisi Tema Beranimasi
Transisi warna yang mulus saat tema berubah:
<div class="demo" id="at-demo">Smooth theme transition</div>
<button onclick="document.documentElement.classList.add('theme-transitioning'); const d=document.getElementById('at-demo'); const dark = d.style.background==='rgb(17, 17, 17)'; d.style.background = dark ? '#fff' : '#111'; d.style.color = dark ? '#111' : '#fff'; setTimeout(()=>document.documentElement.classList.remove('theme-transitioning'),250);">Toggle</button>
Mendengarkan Perubahan Sistem
Bereaksi juga jika pengguna mengubah preferensi OS saat halaman sedang terbuka:
<p id="status">Listening for system theme changes…</p>
<script>
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
document.getElementById('status').textContent = 'System changed to ' + (e.matches ? 'dark' : 'light');
});
</script>
Ikon Mode dark
Tukar ikon untuk setiap mode. Gunakan elemen picture untuk gambar yang menyesuaikan tema, atau CSS untuk menampilkan atau menyembunyikan ikon yang berbeda:
<div>Light: <span class="icon-sun">☀️</span><span class="icon-moon">🌙</span></div>
<div data-theme="dark">Dark: <span class="icon-sun">☀️</span><span class="icon-moon">🌙</span></div>
Ringkasan: Daftar Periksa Implementasi
Daftar periksa mode dark:
- Variabel CSS untuk semua token warna
- Kueri media preferensi skema warna untuk deteksi otomatis
- Atribut data tema untuk penggantian manual
- localStorage untuk penyimpanan
- Skrip sebaris di bagian head untuk mencegah kilatan
- Tombol toggle yang aksesibel dengan label aria dinamis
Pemeriksaan Cepat
Teknik apa yang mencegah "kilatan tema yang salah" saat halaman dimuat?
Rangkuman
Toggle mode dark yang lengkap menggunakan variabel CSS untuk token tema, kueri prefers-color-scheme untuk deteksi otomatis, atribut data-theme untuk penggantian manual, localStorage untuk penyimpanan, dan skrip sinkron di bagian head untuk mencegah kilatan. Sediakan toggle tiga keadaan yang aksesibel, yaitu terang/sistem/dark, untuk pengalaman pengguna terbaik.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengalih Mode Gelap Otomatis dan Manual” gratis?
Ya — teks lengkap “Pengalih Mode Gelap Otomatis dan Manual” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus CSS Academy, upgrade ke CoddyKit PRO. Kursus CSS Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengalih Mode Gelap Otomatis dan Manual”?
Bangun pengalih tema yang secara bawaan mengikuti preferensi sistem dan memungkinkan pengguna mengubahnya secara manual. Kamu berlatih CSS Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai CSS Academy?
Tidak diperlukan pengalaman sebelumnya. CSS Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pengalih Mode Gelap Otomatis dan Manual” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran CSS Academy ini?
Ya. Setiap pelajaran CSS Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kueri Media prefers-color-scheme
- Variabel CSS untuk Tema
- Properti color-scheme
- Pengalih Mode Gelap Otomatis dan Manual