Menyediakan dark-mode pada website

Beberapa kali mungkin kamu pernah melihat website yang menyediakan 2 mode: 1. mode terang (light) 2. mode gelap (dark) saya mencoba mengimplementasikannya pada website pribadi saya di hilman.space

Kamu bisa klik tombol di pojok kanan atas untuk mengujinya. Logikanya cukup simple, kalau user menginginkan "darkmode" maka tampilkan tombol kebalikanya (seperti saklar on-off) dan ubah cssnya: background menjadi gelap, tulisan menjadi terang.

Agar tidak melakukan stylingnya full di javascript, kita berikan satu kelas nama extra untuk "body"

body.darkmode {
    background: rgb(57, 57, 57);
    color: rgb(227, 227, 227);
}

Jadi idenya, kelas "darkmode" akan ditoggle via javascript seperti ini:

<div id="theme">
      <div onclick="setDarkMode(true)" id="darkBtn" class="">  <span>Dark</span></div>
    <div onclick="setDarkMode(false)" id="lightBtn" class="is-hidden"> <span>Light</span> </div>
</div>

<script>
 function setDarkMode(isDark) {
        var darkBtn = document.getElementById('darkBtn')
        var lightBtn = document.getElementById('lightBtn')

        if(isDark) {
            lightBtn.style.display = "block"
            darkBtn.style.display = "none"
        } else {
            lightBtn.style.display = "none"
            darkBtn.style.display = "block"
        }

        document.body.classList.toggle("darkmode");
    }
</script>

Dan untuk memudahkan user, kita akan menyimpan pilihannya di LocalStorage, agar setiap berkunjung kembali, sudah automatis dengan tema yang dimau:

//check localstorage
if(localStorage.getItem('preferredTheme') == 'dark') {
    setDarkMode(true)
}

function setDarkMode(isDark) {
    var darkBtn = document.getElementById('darkBtn')
    var lightBtn = document.getElementById('lightBtn')

    if(isDark) {
        lightBtn.style.display = "block"
        darkBtn.style.display = "none"
    //tambahan localstorage
        localStorage.setItem('preferredTheme', 'dark');
    } else {
        lightBtn.style.display = "none"
        darkBtn.style.display = "block"
     //tambahan localstorage
        localStorage.removeItem('preferredTheme');
    }

    document.body.classList.toggle("darkmode");
}

avatar hilmanski
@hilmanski

2670 Kontribusi 2132 Poin

Diperbarui 3 tahun yang lalu

Tanggapan

Sangat menarik, terimakasih sudah sharing.

sama sama gan

7 Jawaban:

Makasih !!! ternyata ada cara yang lebih simple. selama ini saya naro nya di setting user, jadi kalo user set dark datanya disimpan di database nanti di cek dulu login. logic nya saya bikin 2 css 1 dark 1light, makasih ilmunya !!!

avatar pemudakoding
@pemudakoding

342 Kontribusi 120 Poin

Dipost 5 tahun yang lalu

Membantu sekali bang, Terima kasih!!

avatar momoji
@momoji

108 Kontribusi 44 Poin

Dipost 5 tahun yang lalu

<div>berarti utk class2 yg lain seperti .blog .entry .entry-title a tinggal menambahkan .darkmode yang bang ? jadinya .blog .entry .entry-title .darkmode a gitu ya ? atau gimana ? trimakasih</div>

avatar hilmih3101
@hilmih3101

38 Kontribusi 23 Poin

Dipost 3 tahun yang lalu

Tanggapan

iya seperti contoh body di atas

Jawaban Terpilih

<div>Di playlist ini juga ada dua cara berbeda saya membuat dark mode pada website<br><a href="https://www.youtube.com/playlist?list=PLCZlgfAG0GXCyd70hT8jYl24bLuPpH9iR">playlist main main javascript</a></div>

avatar hilmanski
@hilmanski

2670 Kontribusi 2132 Poin

Dipost 3 tahun yang lalu

<div>kalau versi desktop bisa dinamis tp utk versi mobilenya knapa teksnya ga bisa berubah dark mode/light mode ya bang ... sy pakai &lt;li&gt; di navbar (ga pake &lt;div&gt; sperti di video tutorial). seperti ini code yg sy gunakan<br><br></div><pre> &lt;li class="get-started-btn" id="theme" style="padding: 13px 30px 9px 30px"&gt; &lt;span class="icon" onclick="setDarkMode()" id="darkBtn"&gt;🌚 Dark Mode&lt;/span&gt; &lt;/li&gt;</pre><div><br>dan scriptnya seperti ini</div><pre>&lt;script&gt; if (localStorage.getItem('theme') == 'dark') setDarkMode()<br>&nbsp; &nbsp; &nbsp; <em>// 🌝🌚</em>&nbsp; &nbsp; &nbsp;&nbsp;<br>&nbsp; <em>function</em> setDarkMode() { <em>let</em> emoticon = '' <em>let</em> isDark = document.body.classList.toggle('darkmode') if (isDark) {
emoticon = '🌝 Light Mode'
localStorage.setItem('theme','dark') } else {
emoticon = '🌚 Dark Mode' localStorage.removeItem('theme')&nbsp; &nbsp; }
document.getElementById('darkBtn').innerHTML = emoticon&nbsp; }&nbsp;&nbsp;<br>&nbsp;&lt;/script&gt;</pre>

avatar hilmih3101
@hilmih3101

38 Kontribusi 23 Poin

Dipost 3 tahun yang lalu

<div>mas yang menyimpan di local storage itu bagaimana ya, masih bingung saya</div>

avatar bimol7
@bimol7

8 Kontribusi 6 Poin

Dipost 3 tahun yang lalu

<div>Ada kendala, pada saat berganti halaman mode dark kembali ke mode light dihalaman berikutnya.<br><br>Di localhost script tidak ada masalah tapi saat hosting diweb hanya halaman index yang mode dark tapi halaman yang lain tetap di mode light.<br><br>Ada solusi?</div>

avatar Rodd
@Rodd

1 Kontribusi 0 Poin

Dipost 3 tahun yang lalu

Login untuk ikut Jawaban