์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋คํฌ๋ชจ๋ํ ๊ธ
- ์น๋์์ธ
- ๋ก์ปฌ์คํ ๋ฆฌ์ง
- ๋ฐ๋๋ผjs
- preferscolorscheme
- ui์ปดํฌ๋ํธ
- UX๋์์ธ
- ์นui๋์์ธ
- ํ๋ก ํธ์๋
- ์๋ฐ์คํฌ๋ฆฝํธ์ปดํฌ๋ํธ
- UIUX
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์น์ ๊ทผ์ฑ
- css๋ณ์
- ์น๊ฐ๋ฐ
- uiux๋์์ธ
- ํ ๋ง์๋์ ํ
- ๋คํฌ๋ชจ๋
- ์ ๊ทผ์ฑ
- JavaScript
- ์คํฌ๋กค์ ๋๋ฉ์ด์
- ์คํฌ๋ฆฐ๋ฆฌ๋์ง์
- js์คํฌ๋กค์ด๋ฒคํธ
- ์๋ฐ์คํฌ๋ฆฝํธui
- css์ ๋๋ฉ์ด์
- ์นUI
- ์ธํฐ๋ ํฐ๋ธui
- ๋ฐ์ํ์น
- ๋ฐ๋๋ผ์คํฌ๋ฆฝํธ
- ์ฝ๋ฉ์์
- Today
- Total
UI Code Lab
๐ ๋คํฌ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ – ๋ฐ๋๋ผ JS๋ก UX ํฅ์์ํค๊ธฐ ๋ณธ๋ฌธ
๐ ๋คํฌ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ – ๋ฐ๋๋ผ JS๋ก UX ํฅ์์ํค๊ธฐ
๐ฏ๊ฟ์์ด๐ 2025. 7. 23. 15:00
์์ฆ ์น์ฌ์ดํธ๋ฅผ ๋ณด๋ฉด ๋คํฌ ๋ชจ๋ ๊ธฐ๋ฅ์ด
๊ธฐ๋ณธ์ฒ๋ผ ํ์ฌ๋์ด ์์ฃ .
๋์ ํผ๋ก๋ฅผ ์ค์ด๊ณ ,
์ฌ์ฉ์์ ํ๊ฒฝ์ ๋ง์ถฐ ํ ๋ง๋ฅผ ๋ฐ๊ฟ ์ ์๋
๋คํฌ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ์
UX๋ฅผ ๋์ด๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค.
์ด๋ฒ ๊ธ์์๋
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด
๋ฐ๋๋ผ JavaScript์ CSS ๋ณ์๋ง์ผ๋ก
๋คํฌ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋
๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
โ ๊ตฌํ ๋ชฉํ
- ๋ฒํผ ํด๋ฆญ ์ ๋ผ์ดํธ ↔ ๋คํฌ ๋ชจ๋ ์ ํ
- CSS ๋ณ์(--color, --bg)๋ฅผ ํ์ฉํ ํ ๋ง ์คํ์ผ๋ง
- JavaScript๋ก data-theme ์์ฑ ์ ์ด
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ฌ์ฉ์ ํ ๋ง ์ ์ฅ
๐งฑ HTML ๊ตฌ์กฐ
<label class="theme-toggle">
<input type="checkbox" id="toggle" />
<span class="slider"></span>
</label>
- input[type="checkbox"]๋ก ํ ๊ธ ๊ธฐ๋ฅ ๊ตฌํ
- label๊ณผ span.slider๋ก ์คํ์ผ๋ง
๐จ CSS ์คํ์ผ
:root {
--bg-color: #ffffff;
--text-color: #000000;
}
[data-theme="dark"] {
--bg-color: #121212;
--text-color: #ffffff;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.3s ease, color 0.3s ease;
}
- :root์ ๊ธฐ๋ณธ ์์ ์ ์
- data-theme="dark"์ผ ๋ ๋ณ์ ๋ฎ์ด์ฐ๊ธฐ
โ๏ธ JavaScript ๋ก์ง
const toggle = document.getElementById("toggle");
toggle.addEventListener("change", () => {
const isDark = toggle.checked;
document.documentElement.setAttribute("data-theme", isDark ? "dark" : "light");
localStorage.setItem("theme", isDark ? "dark" : "light");
});
// ํ์ด์ง ๋ก๋ ์ ์ ์ฅ๋ ํ
๋ง ์ ์ฉ
window.addEventListener("DOMContentLoaded", () => {
const savedTheme = localStorage.getItem("theme") || "light";
document.documentElement.setAttribute("data-theme", savedTheme);
toggle.checked = savedTheme === "dark";
});
- data-theme ์์ฑ์ผ๋ก CSS ์คํ์ผ ๋ณ๊ฒฝ
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉ์ ์ค์ ์ ์ง
๐ก ํ์ฅ ์์ด๋์ด
- ์์ด์ฝ(๐/๐)์ ํจ๊ป ํ์ํด ์ง๊ด์ฑ ๊ฐํ
- ์์คํ ํ ๋ง ๊ฐ์ง (prefers-color-scheme)๋ก ์๋ ์ ์ฉ
- ์ ๋๋ฉ์ด์ ํจ๊ณผ ์ถ๊ฐ๋ก ๋ถ๋๋ฌ์ด ์ ํ
๐งพ ๋ง๋ฌด๋ฆฌ
๋คํฌ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ์ ๋จ์ํ UI ์์์ง๋ง,
์ฌ์ฉ์ ๋ง์กฑ๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์๋ ์์์ ๋๋ค.
๋ฐ๋๋ผ JS๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๊ตฌํ ๊ฐ๋ฅํ๋ฉฐ,
CSS ๋ณ์์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ํ์ฉํ๋ฉด
์ ์ง์ฑ๊ณผ ํ์ฅ์ฑ๋ ๋ฐ์ด๋ฉ๋๋ค.
๋ค์ ๊ธ์์๋
์์คํ ํ ๋ง ๊ฐ์ง ๊ธฐ๋ฅ์
์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์๊ฐํ ์์ ์ด์์.
๊ธฐ๋ํด์ฃผ์ธ์! ๐