A Pen by Mike Greeff on CodePen.
Created
March 21, 2022 19:31
-
-
Save modster/73f803fd659ca8d074e9ee21be8be851 to your computer and use it in GitHub Desktop.
Light / Dark Mode Toggle Switch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos ducimus repellendus dolorem eum consequatur id exercitationem nesciunt, inventore modi perferendis impedit esse, tempora officia, ipsam quae libero. Nostrum, alias dignissimos.</p> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"; | |
h1 { | |
margin: 0; | |
color: var(--color-headings); | |
} | |
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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment