This JavaScript and CSS code snippet helps you to create light/dark theme toggle functionality for your website. It comes with a checkbox toggle button that switch between light and dark mode. The JavaScript function detects the checkbox checked property and add an attribute “data-theme” to the root of document with two possible values, “light” and “dark”. The CSS contains the styles for the dark and light mode in variables. So, when a user checked the checkbox, the dark mode will be activated.
How to Create Light/Dark Theme Toggle with CSS and JavaScript
1. First of all, create an input element with a unique id “switch” and define its name attribute with “theme” value. Similarly, create a label tag associated with it, wrap both elements into a div tag and define its class name “toggle-container”. You can place this toggle button anywhere in your HTML where you want to display a light/dark switch button.
<div class="container"> <h1>Light / Dark Mode</h1> <div class="toggle-container"> <input type="checkbox" id="switch" name="theme" /><label for="switch">Toggle</label> </div> <p>CodeHim is one of the best developer websites that provide web designers and developers with a simple way to view and download a variety of HTML, CSS, and JavaScript code snippets.</p> </div>
2. Now, add the following CSS styles to your project. You can modify the styles for the html selector according to your webpage.
html { height: 100%; font-family: "Montserrat"; display: grid; align-items: center; justify-items: center; --bg: #FCFCFC; --bg-panel: #EBEBEB; --color-headings: #0077FF; --color-text: #333333; } html[data-theme=dark] { --bg: #333333; --bg-panel: #434343; --color-headings: #3694FF; --color-text: #B5B5B5; } body { background-color: var(--bg); } .container { background-color: var(--bg-panel); margin: 5em; padding: 5em; border-radius: 15px; display: grid; grid-template-columns: 80% auto; grid-template-rows: auto auto; grid-template-areas: "title switch" "content content"; } .container h1 { margin: 0; color: var(--color-headings); } .container p { color: var(--color-text); grid-area: content; font-size: 1.1em; line-height: 1.8em; margin-top: 2em; } input[type=checkbox] { height: 0; width: 0; visibility: hidden; } label { cursor: pointer; text-indent: -9999px; width: 52px; height: 27px; background: grey; float: right; border-radius: 100px; position: relative; } label:after { content: ""; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; background: #fff; border-radius: 90px; transition: 0.3s; } input:checked + label { background: var(--color-headings); } input:checked + label:after { left: calc(100% - 5px); transform: translateX(-100%); } label:active:after { width: 45px; } html.transition, html.transition *, html.transition *:before, html.transition *:after { transition: all 750ms !important; transition-delay: 0 !important; }
3. Finally, add the following JavaScript function before closing of the body tag.
var checkbox = document.querySelector('input[name=theme]'); checkbox.addEventListener('change', function() { if(this.checked) { trans() document.documentElement.setAttribute('data-theme', 'dark') } else { trans() document.documentElement.setAttribute('data-theme', 'light') } }) let trans = () => { document.documentElement.classList.add('transition'); window.setTimeout(() => { document.documentElement.classList.remove('transition') }, 1000) }
That’s all! hopefully, you have successfully created light/dark theme toggle with CSS and JavaScript. If you have any questions or suggestions, feel free to comment below.
Similar Code Snippets:
I code and create web elements for amazing people around the world. I like work with new people. New people new Experiences.
I truly enjoy what I’m doing, which makes me more passionate about web development and coding. I am always ready to do challenging tasks whether it is about creating a custom CMS from scratch or customizing an existing system.