Skip to content

Instantly share code, notes, and snippets.

@jabed-web-dev
Last active December 2, 2023 09:31
Show Gist options
  • Select an option

  • Save jabed-web-dev/7f795b505adea8e484b4c80a10b84bfc to your computer and use it in GitHub Desktop.

Select an option

Save jabed-web-dev/7f795b505adea8e484b4c80a10b84bfc to your computer and use it in GitHub Desktop.
color-scheme and media-screen
window.addEventListener('load', () => {
const html = document.documentElement,
button = document.createElement('button'),
light = '๐Ÿ”†',
dark = '๐ŸŒ™';
let styles = {
position: 'absolute',
top: '2px',
right: '2px',
zIndex: 99,
width: '20px',
height: '20px',
cursor: 'pointer',
userSelect: 'none',
outline: 'none',
border: 'none',
padding: 0,
borderRadius: '5px',
fontSize: '14px',
lineHeight: '1.3',
textAlign: 'center',
backgroundColor: 'rgba(200,200,200,0.3)',
};
for (let key in styles) {
button.style[key] = styles[key];
}
if (
localStorage['color-scheme'] === 'dark' ||
(!('color-scheme' in localStorage) &&
window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
button.innerText = dark;
html.classList.add('dark');
} else {
button.innerText = light;
html.classList.remove('dark');
}
button.addEventListener('click', (event) => {
event.preventDefault();
if (
localStorage['color-scheme'] === 'dark' ||
(!('color-scheme' in localStorage) &&
window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
button.innerText = light;
html.classList.remove('dark');
localStorage.setItem('color-scheme', 'light');
} else {
button.innerText = dark;
html.classList.add('dark');
localStorage.setItem('color-scheme', 'dark');
}
});
// Whenever the user explicitly chooses to respect the OS preference
// localStorage.removeItem('color-scheme')
html.appendChild(button);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment