<span id="darkmode" role="button" tabIndex="0" onClick="changeMode()" onKeyDown="changeMode()">
<div class="darkmode_icon">
<span class="ray"></span>
<span class="ray"></span>
<span class="ray"></span>
<span class="ray"></span>
<span class="ray"></span>
<span class="ray"></span>
<span class="ray"></span>
<span class="ray"></span>
</div>
</span>
:root {
--header: #4a4e69;
--background: #f4f3f2;
--page-color-transition: background .2s ease, color .2s ease;
}
[data-theme="dark"] {
--header: #c9ada7;
--background: #11112a;
}
body {
background: var(--background);
transition: transform 0.5s ease-in-out, var(--page-color-transition);
}
#darkmode {
padding: 0.3em 0.5em;
cursor: pointer;
width: 40px;
height: 40px;
position: absolute;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
transform: scale(3);
}
.darkmode_icon {
position: absolute;
width: 20px;
height: 20px;
border-radius: 10px;
background: var(--header);
transform-origin: center center;
transition: transform 0.75s ease-in-out, var(--page-color-transition);
}
.darkmode_icon::after {
position: absolute;
content: '';
width: 16px;
height: 16px;
left: 8px;
bottom: 4px;
border-radius: 10px;
background: var(--background);
transform-origin: center center;
transition: transform 0.5s ease, left 0.25s ease, bottom 0.25s ease, var(--page-color-transition);
}
.darkmode_icon .ray {
position: absolute;
left: 7px;
top: 7px;
width: 6px;
height: 6px;
border-radius: 6px;
background: var(--header);
transform-origin: center;
transition: transform 0.5s ease-in-out, var(--page-color-transition);
}
.ray:nth-child(1) {
transform: rotate(45deg) translateX(0);
}
.ray:nth-child(2) {
transform: rotate(90deg) translateX(0);
}
.ray:nth-child(3) {
transform: rotate(135deg) translateX(0);
}
.ray:nth-child(4) {
transform: rotate(180deg) translateX(0);
}
.ray:nth-child(5) {
transform: rotate(225deg) translateX(0);
}
.ray:nth-child(6) {
transform: rotate(270deg) translateX(0);
}
.ray:nth-child(7) {
transform: rotate(315deg) translateX(0);
}
.ray:nth-child(8) {
transform: rotate(360deg) translateX(0);
}
[data-theme="dark"] {
& .darkmode_icon {
transform: scale(0.6);
}
& .darkmode_icon::after {
left: 15px;
bottom: 8px;
transform: scale(0);
}
& .ray:nth-child(1) {
transform: rotate(45deg) translateX(-16px);
}
& .ray:nth-child(2) {
transform: rotate(90deg) translateX(-16px);
}
& .ray:nth-child(3) {
transform: rotate(135deg) translateX(-16px);
}
& .ray:nth-child(4) {
transform: rotate(180deg) translateX(-16px);
}
& .ray:nth-child(5) {
transform: rotate(225deg) translateX(-16px);
}
& .ray:nth-child(6) {
transform: rotate(270deg) translateX(-16px);
}
& .ray:nth-child(7) {
transform: rotate(315deg) translateX(-16px);
}
& .ray:nth-child(8) {
transform: rotate(360deg) translateX(-16px);
}
}
let body = document.querySelector("body");
body.dataset.theme = "light";
function changeMode() {
if (body.dataset.theme === "light") {
body.dataset.theme = "dark";
} else {
body.dataset.theme = "light";
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.