| μΌ | μ | ν | μ | λͺ© | κΈ | ν | 
|---|---|---|---|---|---|---|
| 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 | 
- λ°λ§μΌν
 - μ€ν¬λ‘€μ λλ©μ΄μ 
 - μΉUI
 - λ·νλ¦μ€ost
 - λΉλ³΄λμ°¨νΈ
 - kpopdemonhunters
 - μΌμ΄νλ°λͺ¬νν°μ€
 - λ€ν¬λͺ¨λν κΈ
 - JavaScript
 - λ€ν¬λͺ¨λ
 - jsμ€ν¬λ‘€μ΄λ²€νΈ
 - κ°μμμ΄λ
 - μ κ·Όμ±
 - λ°λλΌμ€ν¬λ¦½νΈ
 - 골λ
 - uiμ»΄ν¬λνΈ
 - μΉκ°λ°
 - μΉμ κ·Όμ±
 - λ°λλΌjs
 - Golden
 - μλ°μ€ν¬λ¦½νΈ
 - μΉλμμΈ
 - μ¬μ보μ΄μ¦
 - ννΈλ¦μ€
 - νλ‘ νΈμλ
 - μλ°μ€ν¬λ¦½νΈui
 - UIUX
 - μΌλ°ν
 - λ·νλ¦μ€μ λλ©μ΄μ 
 - UXλμμΈ
 
- Today
 
- Total
 
UI Code Lab
π λ€ν¬ λͺ¨λ μ ν μ, λΆλλ½κ³ μμ±λ λμ μΉ UI λ§λ€κΈ° λ³Έλ¬Έ
π λ€ν¬ λͺ¨λ μ ν μ, λΆλλ½κ³ μμ±λ λμ μΉ UI λ§λ€κΈ°
π―κΏμμ΄π 2025. 7. 28. 09:58
μ΅κ·Ό μΉμ¬μ΄νΈμμ λ€ν¬ λͺ¨λ μ ν κΈ°λ₯μ
λ¨μν νΈλ λλ₯Ό λμ΄
μ¬μ©μ κ²½ν(UX)μ ν΅μ¬ μμλ‘ μ리 μ‘κ³ μμ΅λλ€.
λ³Έ κΈμμλ CSSμ JavaScriptλ₯Ό νμ©νμ¬
ν λ§ λ³κ²½ μ λΆλλ½κ³ λ§€λλ¬μ΄ μ νμ ꡬννλ
λ°©λ²μ μ¬λ μκ² λ€λ€λ΄ λλ€.
νλ°νΈμλ κ°λ°μλ λ¬Όλ‘ ,
UX/UI λμμ΄λμκ²λ λμμ΄ λλ
μ€μ  νμ μ 리νμ΅λλ€.
β¨ μ λΆλλ¬μ΄ ν λ§ μ νμ΄ μ€μνκ°?
- κ°μμ€λ¬μ΄ νλ©΄ μ νμ μκ°μ  νΌλ‘λ₯Ό μ λ°ν μ μμ
 - μ ν λ°©μμ΄ μΈλ ¨λ μλ‘ μλΉμ€ νμ§μ λν μΈμμ΄ μμΉ
 - νΉν λ€ν¬ λͺ¨λλ λ°κΈ° λλΉκ° ν¬κΈ° λλ¬Έμ, μ ν μκΈ μ‘°μ μ΄ μ€μ
 
π¨ CSS TransitionμΌλ‘ λΆλλ¬μ΄ μ€νμΌ μ ν
CSS λ³μ κΈ°λ° ν λ§ μμ€ν μ νμ©νλ©΄, transition μμ±λ§μΌλ‘λ λΆλλ¬μ΄ μκ° ν¨κ³Όλ₯Ό λΌ μ μμ΅λλ€.
body {
  background-color: var(--bg-color);
  color: var(--text-color);
  transition: background-color 0.3s ease-in-out, color 0.3s ease-in-out;
}
λ³μ μ μ©μ΄ νμν μμμ transitionμ λ°λμ μ€μ ν΄μΌ μλν©λλ€.
π§© μμ΄μ½·κ·Έλν½ μμλ ν¨κ» μ νμν€κΈ°
μμ΄μ½μ opacity, transform λ±μ μ μ©νλ©΄ ν λ§ μ νμ΄ λμ± μλκ° μκ² λκ»΄μ§λλ€.
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.theme-icon {
  animation: fadeIn 0.5s ease;
}
λλ νμ π ↔οΈ λ¬ π μ νμ²λΌ rotate λλ scaleμ νμ©ν λͺ¨μ λ μλν΄λ³Ό μ μμ΅λλ€.
π§ JavaScriptλ‘ ν λ§ μ€μ  μν κ΄λ¦¬νκΈ°
CSSλ§μΌλ‘λ μ νμ μΌ μ μμΌλ―λ‘, JSλ‘ data-theme μμ± κ°μ μ€μ ν΄ λμ μΌλ‘ μ€νμΌμ λ³κ²½ν©λλ€.
function setTheme(theme) {
  document.documentElement.setAttribute("data-theme", theme);
}
π μ΄μμ²΄μ  ν λ§ κ°μ§ + μ€μκ° μ μ©
μ¬μ©μκ° λ³λλ‘ μ€μ νμ§ μμ κ²½μ°, μ΄μ체μ μ λΌμ΄νΈ/λ€ν¬ μ€μ μ λ°μν μ μμ΅λλ€:
window.matchMedia("(prefers-color-scheme: dark)")
  .addEventListener("change", (e) => {
    const newTheme = e.matches ? "dark" : "light";
    setTheme(newTheme);
  });
matchMedia μ΄λ²€νΈλ₯Ό ν΅ν΄ μ΄μμ²΄μ  ν λ§ λ³κ²½μ μ€μκ° κ°μ§ν μ μμ΅λλ€.
π· ν λ§ μ ν UIμ νλ¦μ μ΄λ―Έμ§λ‘ νννλ©΄ μ’μ΅λλ€
- λ€ν¬ λͺ¨λ μ μ© μ /ν λΉκ΅ μ΄λ―Έμ§
 - μ¬μ©μ ν΄λ¦ → μ λλ©μ΄μ  νλ¦μ μκ°νν λ€μ΄μ΄κ·Έλ¨
 - ν λ§ ν κΈ μΈν°νμ΄μ€ ꡬμ±λ
 
π κ΄λ ¨ μ½ν μΈ
- prefers-color-scheme λ―Έλμ΄μΏΌλ¦¬λ‘ μλ ν λ§ λ°μνκΈ°
 - λ°λλΌ JSλ‘ λ§λ λ€ν¬ λͺ¨λ UX κ°ν κ°μ΄λ
 
π μμ½νλ©°
CSSμ transitionκ³Ό λ³μ,
JSμ matchMediaμ μ΄λ²€νΈ κ°μ§λ₯Ό μ μ ν μ‘°ν©νλ©΄
λΆλλ¬μ΄ ν λ§ μ ν UXλ₯Ό ꡬνν μ μμ΅λλ€.
μ΄λ λ¨μ κΈ°λ₯μ λμ΄
μ¬μ©μ μ€μ¬ μΉ λμμΈμ
μ€μν ν¬μΈνΈμ λλ€.
λ€μ κΈμμλ
ν λ§ λ³κ²½ μ λ°°κ²½ κ·Έλν½μ΄λ
λͺ¨μ μ λ μ κ΅νκ² λ€λ£¨λ
κ³ κΈ UI ꡬνλ²λ μκ°ν μμ μ λλ€.