π CSS μ λλ©μ΄μ , transition μμ± λΆλ¦¬ λλ½: μκΈ°μΉ λͺ»ν μ λλ©μ΄μ λμ, μμ½: transition μμ±μ λ¨μΆ μμ±μ΄λ―λ‘, μμ±κ°μ λΆλ¦¬νμ¬ μμ±νμ§ μμΌλ©΄ μμμΉ λͺ»ν μ λλ©μ΄μ λμμ΄ λ°μν μ μμ΅λλ€. λ³κ²½νλ €λ μμ±μ λͺ μμ μΌλ‘ μ μΈνμ¬ μλλλ‘ μ λλ©μ΄μ μ μ μ΄ν΄μΌ ν©λλ€.
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;
}