August 7, 2025

πŸ™ˆ CSS μ• λ‹ˆλ©”μ΄μ…˜, transition 속성 뢄리 λˆ„λ½: 예기치 λͺ»ν•œ μ• λ‹ˆλ©”μ΄μ…˜ λ™μž‘, μš”μ•½: transition 속성은 단좕 μ†μ„±μ΄λ―€λ‘œ, 속성값을 λΆ„λ¦¬ν•˜μ—¬ μž‘μ„±ν•˜μ§€ μ•ŠμœΌλ©΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ μ• λ‹ˆλ©”μ΄μ…˜ λ™μž‘μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ³€κ²½ν•˜λ €λŠ” 속성을 λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έν•˜μ—¬ μ˜λ„λŒ€λ‘œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ œμ–΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.

CSS
μ„±λŠ₯
μ• λ‹ˆλ©”μ΄μ…˜/UI
μ›Ήν‘œμ€€
UX

Summary

CSS transition 속성 μ‚¬μš© μ‹œ 단좕 μ†μ„±μœΌλ‘œ 인해 μ˜λ„μΉ˜ μ•Šμ€ μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 변경될 속성을 λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜μ—¬ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ œμ–΄ν•˜κ³ , will-change 속성을 ν™œμš©ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Why Wrong?

CSS transition 속성은 단좕 μ†μ„±μœΌλ‘œ, transition: all 0.3s;처럼 μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  속성에 0.3초 λ™μ•ˆ transition이 μ μš©λ©λ‹ˆλ‹€. μ΄λŠ” κ°œλ°œμžκ°€ μ˜λ„ν•˜μ§€ μ•Šμ€ 속성 변화에 λŒ€ν•΄μ„œλ„ μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ°œμƒν•˜κ²Œ λ§Œλ“€μ–΄ 예기치 μ•Šμ€ μ‹œκ°μ  문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, hover μ‹œ 배경색과 κΈ€μžμƒ‰μ΄ λ™μ‹œμ— λ³€ν•˜λŠ” 경우, κΈ€μžμƒ‰ transition νš¨κ³Όκ°€ μ˜λ„μΉ˜ μ•Šκ²Œ λ‚˜νƒ€λ‚  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λΈŒλΌμš°μ €λŠ” λͺ¨λ“  속성을 κ°μ‹œν•΄μ•Ό ν•˜λ―€λ‘œ μ„±λŠ₯에도 λ―Έλ―Έν•˜κ²Œ 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€. 특히 λ³΅μž‘ν•œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 이런 ν˜„μƒμ΄ λˆ„μ λ˜λ©΄ UI μ„±λŠ₯ μ €ν•˜λ‘œ μ΄μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

How to Fix?

μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό μ μš©ν•˜λ €λŠ” νŠΉμ • CSS 속성을 λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 배경색 λ³€ν™”μ—λ§Œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•˜λ €λ©΄ transition: background-color 0.3s; 와 같이 μž‘μ„±ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ λ‹€λ₯Έ 속성 변화에 λΆˆν•„μš”ν•œ μ• λ‹ˆλ©”μ΄μ…˜ νš¨κ³Όκ°€ μ μš©λ˜λŠ” 것을 λ°©μ§€ν•˜κ³ , μ½”λ“œμ˜ μ˜λ„λ₯Ό λͺ…ν™•ν•˜κ²Œ λ“œλŸ¬λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, will-change 속성을 μ‚¬μš©ν•˜μ—¬ 변경될 속성을 미리 λΈŒλΌμš°μ €μ— μ•Œλ €μ£Όλ©΄ μ„±λŠ₯ μ΅œμ ν™”μ— 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

Before Code (Bad)

.button {
  background-color: #eee;
  color: #333;
  transition: all 0.3s; /* λͺ¨λ“  속성에 transition 적용 */
}

.button:hover {
  background-color: #333;
  color: #eee;
}

After Code (Good)

.button {
  background-color: #eee;
  color: #333;
  transition: background-color 0.3s, color 0.3s; /* background-colorμ—λ§Œ transition 적용 */
  will-change: background-color, color; /* 변경될 속성 미리 μ•Œλ¦Ό */
}

.button:hover {
  background-color: #333;
  color: #eee;
}