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