์ต๊ทผ ์น์ฌ์ดํธ๋ค์ ์ฌ์ฉ์ ํธ์๋ฅผ ์ํด ๋คํฌ๋ชจ๋๋ฅผ ๊ธฐ๋ณธ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋คํฌ๋ชจ๋๋ ๋๋ถ์ฌ์ ์ค์ด๊ณ , OLED ํ๋ฉด์์๋ ์ ๋ ฅ ์๋ชจ๋ฅผ ์ค์ด๋ ์ฅ์ ์ด ์์ต๋๋ค.
ํฐ์คํ ๋ฆฌ์์๋ ์ง์ CSS๋ฅผ ์์ ํ๋ฉด ๋คํฌ๋ชจ๋๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.

์ ๋ธ๋ก๊ทธ์์๋ ๋ฌ์ด๋ ํด ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ตฌํ๋๋๋ก ๋ง๋ค์ด๋ณด์์ต๋๋ค.
(1) ๊ด๋ฆฌ์ ํ์ด์ง ์ด๋
- ํฐ์คํ ๋ฆฌ ๊ด๋ฆฌ์ → ์คํจ ํธ์ง ๋ฉ๋ด๋ก ๋ค์ด๊ฐ๋๋ค.
- HTML/CSS ํธ์ง์ด ๊ฐ๋ฅํ ์คํจ ํธ์ง๊ธฐ๋ฅผ ์ฝ๋๋ค.
(2) CSS ๋ณ์ ์ถ๊ฐํ๊ธฐ
/* ๊ธฐ๋ณธ(๋ผ์ดํธ) ๋ชจ๋ */
body {
background-color: #ffffff;
color: #000000;
}
/* ๋คํฌ๋ชจ๋ */
body.dark-mode {
background-color: #121212;
color: #e0e0e0;
}
/* ์ถ๊ฐ ์คํ์ผ (์์) */
body.dark-mode a {
color: #80cbc4; /* ๋งํฌ ์์ */
}
body.dark-mode header,
body.dark-mode footer {
background-color: #1f1f1f;
}
์ด๋ ๊ฒ CSS ๋ณ์๋ฅผ ์ ์ํด๋๋ฉด, ๋คํฌ๋ชจ๋์ผ ๋ ์๋์ผ๋ก ์์์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
*์ฃผ์ํ ์ : ๋ค๋ฅธ ์คํจ์ผ ๊ฒฝ์ฐ html ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ์ค์ ์ด ๋์ง์์ ์ ์์ต๋๋ค.

(3)ํ ๊ธ ๋ฒํผ ์ถ๊ฐํ๊ธฐ
์คํจHTML์ ๋ฒํผ ํ๋๋ฅผ ๋ฃ์ต๋๋ค. ์์น๋ ์์ ๋กญ์ง๋ง ์ ๋ header์ ๋ฒํผ๋ฉ๋ด ์์ ๋์์ต๋๋ค.
<button id="themeToggle">๐ ๋คํฌ๋ชจ๋</button>
(4) ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ ๋ง ์ ํ ๊ธฐ๋ฅ ์ถ๊ฐ
(function() {
const body = document.body;
const toggleBtn = document.getElementById("themeToggle");
const savedTheme = localStorage.getItem("theme");
if (savedTheme === "dark") {
body.classList.add("dark-mode");
if (toggleBtn) toggleBtn.textContent = "โ๏ธ";
}
if (toggleBtn) {
toggleBtn.addEventListener("click", function() {
body.classList.toggle("dark-mode");
if (body.classList.contains("dark-mode")) {
localStorage.setItem("theme", "dark");
this.textContent = "โ๏ธ";
} else {
localStorage.setItem("theme", "light");
this.textContent = "๐";
}
});
}
})();
์ด๋ ๊ฒ ํ๋ฉด ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค ๋ผ์ดํธ/๋คํฌ ๋ชจ๋๊ฐ ์ ํ๋๊ณ , ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋์ด ์ฌ์ ์ ์์๋ ๋ชจ๋๊ฐ ์ ์ง๋ฉ๋๋ค.
์ถ๊ฐ ๊ธฐ๋ฅ
์์์๋ ํ ๊ธ ๋ฒํผ์ผ๋ก ๋คํฌ๋ชจ๋ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ค๋๋ฐ
CSS๋ง์ผ๋ก๋ ๋ธ๋ผ์ฐ์ /OS ๋คํฌ๋ชจ๋ ์ค์ ์ ์๋์ผ๋ก ๊ฐ์งํด์ ์ ์ฉํ ์ ์์ต๋๋ค.
/* ๋ผ์ดํธ ๋ชจ๋ ๊ธฐ๋ณธ */
body {
background-color: #ffffff;
color: #000000;
}
/* ๋ธ๋ผ์ฐ์ ๊ฐ ๋คํฌ๋ชจ๋์ผ ๊ฒฝ์ฐ */
@media (prefers-color-scheme: dark) {
body {
background-color: #121212;
color: #e0e0e0;
}
}
์ด๋ ๊ฒ ์์ฑํด๋๋ฉด,
- ์ฌ์ฉ์๊ฐ ๋ผ์ดํธ ๋ชจ๋ ๋ธ๋ผ์ฐ์ → ํฐ์ ๋ฐฐ๊ฒฝ ์ ์ฉ
- ์ฌ์ฉ์๊ฐ ๋คํฌ ๋ชจ๋ ๋ธ๋ผ์ฐ์ → ๊ฒ์ ์ ๋ฐฐ๊ฒฝ ์ ์ฉ
์๋์ผ๋ก ํ ๋ง๊ฐ ์ ํ๋ฉ๋๋ค.
ํ ๊ธ ๊ธฐ๋ฅ + ์๋ ๊ฐ์ง ํผํฉํ๊ธฐ
๋ง์ฝ ์๋ ๊ฐ์ง๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ , ์ฌ์ฉ์๊ฐ ์ง์ ๋คํฌ๋ชจ๋๋ฅผ ์ผ๊ฑฐ๋ ๋ ์ ์๋๋ก ํ๊ณ ์ถ๋ค๋ฉด
์๋์ฒ๋ผ localStorage + matchMedia๋ฅผ ๊ฐ์ด ์ฐ๋ฉด ๋ฉ๋๋ค.
(function() {
const body = document.body;
const toggleBtn = document.getElementById("darkModeToggle");
// ์ ์ฅ๋ ํ
๋ง ๋ถ๋ฌ์ค๊ธฐ
let savedTheme = localStorage.getItem("theme");
// ์ ์ฅ๋ ํ
๋ง๊ฐ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์ค์ ๋ฐ๋ผ๊ฐ๊ธฐ
if (!savedTheme) {
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
savedTheme = "dark";
} else {
savedTheme = "light";
}
}
// ํ
๋ง ์ ์ฉ ํจ์
function applyTheme(theme) {
if (theme === "dark") {
body.classList.add("dark-mode");
if (toggleBtn) toggleBtn.textContent = "โ๏ธ";
} else {
body.classList.remove("dark-mode");
if (toggleBtn) toggleBtn.textContent = "๐";
}
}
// ์ด๊ธฐ ์ ์ฉ
applyTheme(savedTheme);
// ํ ๊ธ ์ด๋ฒคํธ
if (toggleBtn) {
toggleBtn.addEventListener("click", function() {
const newTheme = body.classList.contains("dark-mode") ? "light" : "dark";
applyTheme(newTheme);
localStorage.setItem("theme", newTheme);
});
}
})();
์ด๋ ๊ฒ ํ๋ฉด:
์ฒ์ ์ ์ → ๋ธ๋ผ์ฐ์ ๋ชจ๋๋ฅผ ๋ฐ๋ผ๊ฐ
๋ฒํผ์ผ๋ก ์ ํ → ์ฌ์ฉ์๊ฐ ์ ํํ ๋ชจ๋๊ฐ ์ ์ฅ๋จ
๋ค์ ์ ์ ์ → ์ ์ฅ๋ ๋ชจ๋๊ฐ ์ฐ์ ์ ์ฉ๋ฉ๋๋ค.
'๐ฅ๏ธ ํ๋ก ํธ์๋ > โค๏ธ ํฐ์คํ ๋ฆฌ๊พธ๋ฏธ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| # Tistory(ํฐ์คํ ๋ฆฌ) - ๋ง์ฐ์ค ํจ๊ณผ (๋ณ ๋ฐ์ง์ด, ํํธ) ์ค์ ๋ฐฉ๋ฒ (9) | 2025.08.13 |
|---|---|
| # ํฐ์คํ ๋ฆฌ(tistory) ๋ง์ฐ์ค ์ปค์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ (2) | 2025.07.04 |