<input type="checkbox" id="darkTheme" name="darkTheme" onclick='onChange(this);'>
<label for="darkTheme">Dark theme</label><br>
html {
background: white;
}
.dark {
background: black;
filter: invert(1) hue-rotate(180deg);
}
function toggle(on) {
if (on) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
}
function save(on) {
const params = new URLSearchParams(window.location.search);
params.set('dark_theme', on.toString());
history.pushState(null, null, `?${params.toString()}`);
}
function load() {
const params = new URLSearchParams(window.location.search);
return params.get('dark_theme') === 'true';
}
function onChange(checkbox) {
const value = checkbox.checked;
toggle(value);
save(value);
}
const initialValue = load();
toggle(initialValue);
document.querySelector('#darkTheme').checked = initialValue;
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.