Dark Mode — Tailwind CSS

Tailwind mendukung dark mode dengan prefix dark:: Otomatis berubah sesuai tema Strategi dark mode: media (default) — mengikuti prefers-color-scheme sistem…

Dark mode adalah tampilan gelap: latar gelap, teks terang, enak dibaca malam-malam. Di Tailwind, kamu cukup menempelkan awalan dark: di depan class. dark:bg-gray-800 artinya "pakai latar gray-800, tapi cuma waktu mode gelap aktif". Bayangin lampu teras yang pakai sensor cahaya. Siang hari lampunya mati, begitu langit gelap dia nyala sendiri, tanpa ada yang menekan saklar. dark: bekerja seperti itu: class di belakangnya cuma dipakai waktu "gelap", dan yang menentukan gelap atau gak, awalnya, adalah setelan tema di HP atau laptop pengguna.

🧪 Tebakan cepat: kartu bg-white dark:bg-gray-800 dibuka di HP yang temanya gelap. Kamu belum menulis satu baris JavaScript pun. Kartunya putih atau gelap? Tebak dulu, jawabannya ada di bagian "Siapa yang menentukan gelap?".

Satu class untuk terang, satu untuk gelap

Kamu sudah kenal awalan dari pelajaran responsive: md:flex artinya "flex mulai layar md". dark: sama cara kerjanya, cuma syaratnya beda: bukan lebar layar, tapi mode gelap. Ini kartu yang sama dengan yang ada di Lab:

<body class="bg-gray-100 dark:bg-gray-900 p-6">
  <div id="card" class="bg-white dark:bg-gray-800 text-gray-900 dark:text-white p-4 rounded-lg">
    Kartu Adaptif
  </div>
</body>
Bagian Mode terang Mode gelap
Latar kartu bg-white: putih dark:bg-gray-800: abu-abu tua
Teks kartu text-gray-900: hampir hitam dark:text-white: putih
Latar halaman bg-gray-100: abu-abu muda dark:bg-gray-900: hampir hitam

Polanya selalu sama: tulis warna terang tanpa awalan, lalu timpa dengan dark: untuk mode gelap. Urutan class di dalam atribut class gak ngaruh.

Siapa yang menentukan "gelap"?

Di Tailwind v4, dark: bawaannya mengikuti setelan tema di sistem operasi. Browser memberi tahu setelan itu lewat media query prefers-color-scheme. Dari dark:bg-gray-800, Tailwind membuat CSS ini:

@media (prefers-color-scheme: dark) {
  .dark\:bg-gray-800 {
    background-color: var(--color-gray-800);
  }
}

Jadi kartu tadi gelap, tanpa JavaScript. Itu jawaban tebakannya. Begitu pengguna mengganti tema HP-nya ke terang, kartunya ikut putih lagi.

Tombol tema sendiri: strategi class

Banyak website punya tombol bulan dan matahari, dan pilihan pengguna harus menang walaupun HP-nya bilang lain. Untuk itu, sensornya diganti jadi saklar: dark: dibuat mengikuti class dark di <html>, bukan setelan sistem. Caranya satu baris di file CSS kamu, sesudah @import "tailwindcss";:

@import "tailwindcss";
@custom-variant dark (&:where(.dark, .dark *));

Lalu tombolnya tinggal memasang atau mencabut class itu:

<html class="dark">
  <body>
    <button onclick="document.documentElement.classList.toggle('dark')">Ganti tema</button>
  </body>
</html>

Kalau Tailwind-nya dipasang lewat CDN (seperti di Playground), tulis baris @custom-variant itu di dalam <style type="text/tailwindcss">. Tutorial lama menulis darkMode: "class" di tailwind.config.js. Itu cara Tailwind v3; di v4 file config itu gak dibaca lagi kecuali kamu memintanya.

⚠️ Jebakan yang sering ketemu

TL;DR: dark: di depan class artinya class itu cuma dipakai di mode gelap, misalnya bg-white dark:bg-gray-800. Tulis warna terang tanpa awalan, lalu timpa dengan dark:, dan beri pasangan untuk tiap warna: latar, teks, border. Di Tailwind v4, dark: bawaannya mengikuti tema sistem lewat prefers-color-scheme, tanpa JavaScript. Mau tombol tema sendiri? Tulis @custom-variant dark (&:where(.dark, .dark *)); di CSS, lalu pasang atau cabut class dark di <html>.

Yang akan kamu pelajari