다크 테마 전용 CSS, 미디어 쿼리 및 Javascript 포함
코드펜: Con js y css
코드펜: solo css
설치
가지고 있는 모든 가상 서버에서 실행할 수 있지만 이 점이 100% 필요한 것은 아닙니다.
First clone the repository and install.
git clone https://github.com/205mdp/html-css-js-dark-light-theme.git
yarn add
운영
yarn dev
옵션 1 - CSS만
Documentation CSS Variables
/* just variable example */
body {
/* create variable */
--main-back-color: red;
/* assign variable */
background-color: var(--main-back-color);
}
:root {
--background: white;
--color: black;
}
/* media query dark */
@media (prefers-color-scheme: dark) {
:root {
--background: black;
--color: white;
}
}
옵션 2 Javascript 및 미디어 쿼리 사용
시스템에 어떤 구성이 있는지 감지합니다.
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
// dark mode
localStorage.setItem('theme', 'dark');
} else {
localStorage.setItem('theme', 'light');
}
스키마 색상 변경 이벤트
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
event.matches ? enableDarkMode() : disableDarkMode();
});
옵션 3 버튼으로 수동으로 Javascript 사용.
본문 .dark , .light 에 클래스를 추가하여 수행할 수 있습니다. localStorage에도 저장합니다.
// Change from dark mode to light mode.
const enableDarkMode = () => {
document.body.classList.add('darkmode');
// 2. Update darkMode in localStorage
localStorage.setItem('theme', 'dark');
}
// change from light mode to dark mode.
const disableDarkMode = () => {
// 1. Remove the class from the body
document.body.classList.remove('darkmode');
// 2. Update darkMode in localStorage
localStorage.setItem('theme', 'light');
}
버튼 이벤트
// btn btn-theme
const btnTheme = document.querySelector('#btn-theme');
btnTheme.addEventListener('click', () => {
// 1. Check if dark mode is enabled
localStorage.getItem('theme') === 'dark' ? disableDarkMode() : enableDarkMode();
})
Note: There is a better solution to not duplicate both css variables and classes. Which is controlling from JS. We see it in the next branch.
Javascript를 사용하지만 미디어 쿼리는 사용하지 않음
/* global variables */
:root {
--header-color: #f5f5f5;
--header-back-color: rgb(84, 121, 241);
--main-back-color: #f5f5f5;
--main-color: #333;
--header-container-max-width: 70rem;
}
.darkmode {
--header-color: #b2b2b2;
--header-back-color: rgb(31, 31, 31);
--main-back-color: #595959;
--main-color: rgb(235, 235, 235);
--header-container-max-width: 70rem;
}
// Detect system color
const detectColorScheme = () => {
const localTheme = localStorage.getItem('theme');
// Check which theme the system/browser has
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
// dark mode
(localTheme === 'dark' || localTheme === null) ? enableDarkMode() : disableDarkMode();
} else {
(localTheme === 'dark') ? enableDarkMode() : disableDarkMode();
}
}
// Check for changes to the theme and change it
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
event.matches ? enableDarkMode() : disableDarkMode();
});
// Detect system color
detectColorScheme();
// btn btn-theme
const btnTheme = document.querySelector('#btn-theme');
btnTheme.addEventListener('click', () => {
// 1. Check if dark mode is enabled
localStorage.getItem('theme') === 'dark' ? disableDarkMode() : enableDarkMode();
})
// Change from dark mode to light mode.
const enableDarkMode = () => {
document.body.classList.add('darkmode');
// 2. Update darkMode in localStorage
localStorage.setItem('theme', 'dark');
}
// cambio de light mode a dark mode.
const disableDarkMode = () => {
// 1. Remove the class from the body
document.body.classList.remove('darkmode');
// 2. Update darkMode in localStorage
localStorage.setItem('theme', 'light');
}
Final note: you could add more color themes or let the client select the colors and save them to localstorage or the database.
Each point is a different branch on github
Reference
이 문제에 관하여(다크 테마 전용 CSS, 미디어 쿼리 및 Javascript 포함), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/geepk/dark-theme-only-css-media-query-and-also-with-javascript-2ph2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)