์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- UX๋์์ธ
- ์น๋์์ธ
- ์นUI
- ๊ฐ์์์ด๋
- UIUX
- ์ฌ์๋ณด์ด์ฆ
- kpopdemonhunters
- ํํธ๋ฆญ์ค
- ๋คํฌ๋ชจ๋ํ ๊ธ
- ํ๋ก ํธ์๋
- ์ผ๋ฐํ
- ๋ทํ๋ฆญ์ค์ ๋๋ฉ์ด์
- ๋น๋ณด๋์ฐจํธ
- ์คํฌ๋กค์ ๋๋ฉ์ด์
- ๋ทํ๋ฆญ์คost
- ๋ฐ๋๋ผjs
- ๋คํฌ๋ชจ๋
- Golden
- ๊ณจ๋
- ๋ฐ๋๋ผ์คํฌ๋ฆฝํธ
- ์น๊ฐ๋ฐ
- ์น์ ๊ทผ์ฑ
- ์๋ฐ์คํฌ๋ฆฝํธui
- ์๋ฐ์คํฌ๋ฆฝํธ
- js์คํฌ๋กค์ด๋ฒคํธ
- ui์ปดํฌ๋ํธ
- JavaScript
- ๋ฐ๋ง์ผํ
- ์ผ์ดํ๋ฐ๋ชฌํํฐ์ค
- ์ ๊ทผ์ฑ
- 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 ๋ณ์์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ํ์ฉํ๋ฉด
์ ์ง์ฑ๊ณผ ํ์ฅ์ฑ๋ ๋ฐ์ด๋ฉ๋๋ค.
๋ค์ ๊ธ์์๋
์์คํ ํ ๋ง ๊ฐ์ง ๊ธฐ๋ฅ์
์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์๊ฐํ ์์ ์ด์์.
๊ธฐ๋ํด์ฃผ์ธ์! ๐