์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- ๋ก์ปฌ์คํ ๋ฆฌ์ง
- preferscolorscheme
- ์๋ฐ์คํฌ๋ฆฝํธ
- uiux๋์์ธ
- ์นui๋์์ธ
- ์๋ฐ์คํฌ๋ฆฝํธ์ปดํฌ๋ํธ
- css๋ณ์
- ์คํฌ๋ฆฐ๋ฆฌ๋์ง์
- ๋คํฌ๋ชจ๋
- JavaScript
- UIUX
- ๋ฐ๋๋ผ์คํฌ๋ฆฝํธ
- js์คํฌ๋กค์ด๋ฒคํธ
- ํ๋ก ํธ์๋
- ์นUI
- ์ฝ๋ฉ์์
- ํ ๋ง์๋์ ํ
- ui์ปดํฌ๋ํธ
- ์๋ฐ์คํฌ๋ฆฝํธui
- ๋ฐ๋๋ผjs
- ์น๊ฐ๋ฐ
- ์ธํฐ๋ ํฐ๋ธui
- ๋คํฌ๋ชจ๋ํ ๊ธ
- ์น์ ๊ทผ์ฑ
- css์ ๋๋ฉ์ด์
- ์ ๊ทผ์ฑ
- ์น๋์์ธ
- ๋ฐ์ํ์น
- ์คํฌ๋กค์ ๋๋ฉ์ด์
- UX๋์์ธ
- Today
- Total
UI Code Lab
๐ ์ฌ์ฉ์์๊ฒ ํธ์ํจ์ ์ ๊ณตํ๋ ์น – ๋ฐ๋๋ผ JS๋ก ๋คํฌ ๋ชจ๋ ์ ํ ๊ตฌํํ๊ธฐ ๋ณธ๋ฌธ
๐ ์ฌ์ฉ์์๊ฒ ํธ์ํจ์ ์ ๊ณตํ๋ ์น – ๋ฐ๋๋ผ JS๋ก ๋คํฌ ๋ชจ๋ ์ ํ ๊ตฌํํ๊ธฐ
๐ฏ๊ฟ์์ด๐ 2025. 7. 23. 11:23
์น์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ ํ๊ฒฝ์ด ๋ค์ํด์ง๋ฉด์,
์ด์ฉ์๋ค์ ๋ฐ๊ณ ํ๋ คํ ์ธํฐํ์ด์ค๋ณด๋ค
๋์ ํธ์ํ ์ด๋์ด ํ ๋ง๋ฅผ ์ ํธํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ก์ต๋๋ค.
ํนํ ๋ฐค ์๊ฐ์ด๋ ์กฐ๋ช ์ด ๋ฎ์ ๊ณณ์์ ์ ์ํ ๊ฒฝ์ฐ,
ํ๋ฉด์ด ์ง๋์น๊ฒ ๋ฐ์ผ๋ฉด ์์ผ์ ๋ถ๋ด์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ .
์ด๋ฒ ๊ธ์์๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ(๋ฐ๋๋ผ JS)๋ง์ผ๋ก
๊ฐ๋จํ๋ฉด์๋ ์ง๊ด์ ์ธ ๋คํฌ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๊ตฌํํ ์ ์๊ณ ,
์ฌ์ฉ์ ์ค์ ์ ๊ธฐ์ตํ๋ ๊ธฐ๋ฅ๊น์ง ํฌํจ๋์ด ์์ด
์ค๋ฌด์๋ ์ถฉ๋ถํ ์ ์ฉํ ์ ์์ต๋๋ค.
๐งฑ HTML ๊ตฌ์ฑ – ๊ฐ์ฅ ๋จ์ํ ์์
๋จผ์ ํ ๋ง ์ ํ ๋ฒํผ์ ํ๋ ์ถ๊ฐํด์ค๋๋ค.
<button id="toggle-theme">๐ / ๐ ๋ชจ๋ ์ ํ</button>
์ด ๋ฒํผ์ ๋ผ์ดํธ/๋คํฌ ๋ชจ๋ ์ ํ์ ๋ด๋นํ๋ฉฐ,
id ์์ฑ์ ํตํด ์คํฌ๋ฆฝํธ์์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ์ค์ ํฉ๋๋ค.
๐จ CSS ์ค๊ณ – CSS ๋ณ์๋ก ์ ์ฐํ ํ ๋ง ์ ์ฉ
์์ ์ ํ์ ๋ถ๋๋ฝ๊ฒ ํ๊ธฐ ์ํด CSS ๋ณ์๋ก ๋ฐฐ๊ฒฝ์๊ณผ ํ ์คํธ ์์ ์ ์ํฉ๋๋ค.
:root {
--bg-color: #ffffff;
--text-color: #000000;
}
[data-theme="dark"] {
--bg-color: #1e1e1e;
--text-color: #ffffff;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: all 0.3s ease;
}
์์ ๋ณ์๋ :root์ ์ ์๋๋ฉฐ, data-theme ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก ์ ์ฉ๋๋ ๋ฐฉ์์ ๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ ์ ์ง ๊ด๋ฆฌ์๋ ํจ๊ณผ์ ์ด์์.
โ๏ธ JavaScript ๋ก์ง – ์ฌ์ฉ์ ์ค์ ๊ธฐ์ตํ๊ธฐ
์ ํ ๋ฒํผ์ด ํด๋ฆญ๋์์ ๋ ํ์ฌ ํ ๋ง๋ฅผ ๋ณ๊ฒฝํ๊ณ ,
์ฌ์ฉ์๊ฐ ์ ํํ ํ ๋ง๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํด ๋ค์ ๋ฐฉ๋ฌธ ์์๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
const toggleBtn = document.getElementById("toggle-theme");
const currentTheme = localStorage.getItem("theme");
if (currentTheme) {
document.documentElement.setAttribute("data-theme", currentTheme);
}
toggleBtn.addEventListener("click", () => {
let theme = document.documentElement.getAttribute("data-theme");
if (theme === "dark") {
document.documentElement.setAttribute("data-theme", "light");
localStorage.setItem("theme", "light");
} else {
document.documentElement.setAttribute("data-theme", "dark");
localStorage.setItem("theme", "dark");
}
});
์ฌ์ฉ์๊ฐ ์ด์ ์ ์ ํํ ํ ๋ง๋ฅผ ๊ธฐ์ตํจ์ผ๋ก์จ,
์ฌ๋ฐฉ๋ฌธ ์ ๊ฒฝํ์ ์ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
๐ ๊ธฐ๋ฅ ํ์ฅ ํ
๋จ์ํ ํ ๋ง ์ ํ์ ๊ทธ์น์ง ์๊ณ ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ๋์ฑ ํ๋ถํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค:
- ๋ฒํผ ๋ด ์ด๋ชจ์ง ์ ํ์ผ๋ก ์๊ฐ์ ํผ๋๋ฐฑ ์ ๊ณต
- ์ด์์ฒด์ ์ ๊ธฐ๋ณธ ํ ๋ง ์๋ ๊ฐ์ง (prefers-color-scheme)
- ํ ๋ง ์ ํ ์ ํ์ด๋ ์ธ/์์ ์ ๋๋ฉ์ด์ ์ถ๊ฐ
์ด๋ฌํ ๋ํ ์ผ์ UI๋ฅผ ์์ฑ๋ ์๊ฒ ๋ง๋ค๊ณ , ์ฌ์ฉ์์๊ฒ ๋ ๋งค๋ ฅ์ ์ผ๋ก ๋ค๊ฐ๊ฐ ์ ์๊ฒ ํด์ค๋๋ค.
๐ฌ ์ฌ์ฉ์ ์ค์ฌ ์น์ ์ํ ๋ง๋ฌด๋ฆฌ ์๊ฐ
์ด์ฒ๋ผ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ CSS๋ง์ผ๋ก๋ ํ ๋ง ์ ํ ๊ธฐ๋ฅ์ ์ถฉ๋ถํ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ณต์กํ ์ฝ๋ ์์ด๋ ์ ์ฉ ๊ฐ๋ฅํ๋ฉฐ,
์ฌ์ฉ์ ํธ์์ฑ๊ณผ ๋์์ธ์ ๋์์ ๊ณ ๋ คํ ์ ์๋ ๊ธฐ๋ฅ์ด์ฃ .
๋คํฌ ๋ชจ๋๋ ์น ๋์์ธ์ ํ๋ฆ์์ ์ ์ ๋ ์ค์ํด์ง๊ณ ์์ผ๋ฉฐ,
ํฌํธํด๋ฆฌ์ค๋ ๊ธฐ์ ๋ธ๋ก๊ทธ, ๋ธ๋๋ ํํ์ด์ง ๋ฑ์ ์์ฐ์ค๋ฝ๊ฒ ๋ น์ฌ๋ด๋ฉด
์ ์ฒด์ ์ธ ํ์ง๊ณผ ๋ง์กฑ๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
โ ๋ง๋ฌด๋ฆฌ
๋จ ๋ช ์ค์ JavaScript์ CSS ๋ณ์๋ง์ผ๋ก๋ ๊ฐ๋ ฅํ ๋คํฌ ๋ชจ๋ UI๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ฐ์ธ ๋ธ๋ก๊ทธ๋ฟ ์๋๋ผ ๋ค์ํ ์น ํ๋ก์ ํธ์๋ ์ฝ๊ฒ ์ ์ฉํ ์ ์๊ณ ,
์ฌ์ฉ์ ์ค์ฌ์ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค.
๋คํฌ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ์ ๋ง์คํฐํ๋ค๋ฉด,
์ด์ ์ฌ์ฉ์์๊ฒ ๋ ๋ง์ ์ ํ์ง๋ฅผ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ก ํ์ฅํด๋ณผ ์๊ฐ์ ๋๋ค.
๋ค์ ๊ธ์์๋ ๋ฒํผ ํด๋ฆญ๋ง์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ํํฐ๋งํ ์ ์๋
ํ ๋ง๋ณ ์ฝํ ์ธ ํํฐ UI๋ฅผ ๋ฐ๋๋ผ JavaScript๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฝํ ์ธ ๋ฅผ ๋ถ๋ฅํ๊ณ ,
์ฌ์ฉ์ ์ฐธ์ฌ๋๋ฅผ ๋์ด๋ ์ธํฐ๋ํฐ๋ธํ UI๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๊ธฐ๋ํด๋ ์ข์์.
ํ ๋ฒ ํด๋ฆญ์ผ๋ก ์ํ๋ ์ ๋ณด๋ง ๋ณด๋ ๊ฒฝํ,
๊ทธ ์์์ ํจ๊ป ๋ง๋ค์ด๋ณด์ธ์. ๐