# [[CSS Animations|CSS Animations]] ## πŸ“Œ Brief Summary CSS μ• λ‹ˆλ©”μ΄μ…˜μ€ UI/UXμ—μ„œ μ‚¬μš©μžμ™€ μ‹œμŠ€ν…œ κ°„μ˜ μƒν˜Έμž‘μš©μ„ κ°•ν™”ν•˜κ³  μ‹œκ°μ  ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜λ©°, μ‹œμŠ€ν…œ μƒνƒœλ‚˜ 계측 ꡬ쑰λ₯Ό λͺ…ν™•νžˆ ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” κΈ°μˆ μ΄λ‹€ [1, 2]. λ‹¨μˆœν•œ μ‹œκ°μ  μž₯식이 μ•„λ‹Œ 인지 λΆ€ν•˜λ₯Ό 쀄이고 μ‚¬μš©μ„±μ„ λ†’μ΄λŠ” κΈ°λŠ₯적 λͺ©μ μ„ κ°€μ§€λ©° [2-4], μ‹€λ¬΄μ μœΌλ‘œλŠ” λΈŒλΌμš°μ €μ˜ λ¦¬ν”Œλ‘œμš°(Reflow)와 리페인트(Repaint)λ₯Ό μ΅œμ†Œν™”ν•˜μ—¬ 60FPS의 λ Œλ”λ§ μ„±λŠ₯을 μœ μ§€ν•˜κ³  μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄μ•Ό ν•œλ‹€ [5, 6]. ## πŸ“– Core Content * **μ• λ‹ˆλ©”μ΄μ…˜μ˜ κΈ°λŠ₯적 μ—­ν•  및 UX 원칙** μ• λ‹ˆλ©”μ΄μ…˜μ€ λ‹¨μˆœνžˆ 화면을 κΎΈλ―ΈλŠ” 것이 μ•„λ‹ˆλΌ, μ‚¬μš©μžμ—κ²Œ 즉각적인 ν”Όλ“œλ°±μ„ μ£Όκ³  주의λ₯Ό μœ λ„ν•˜λ©° 원인과 결과의 관계λ₯Ό μ„€λͺ…ν•˜λŠ” κΈ°λŠ₯적 도ꡬ이닀 [1, 2, 4]. ν˜Έλ²„(Hover) 효과, λ²„νŠΌ 클릭 μ‹œμ˜ 마이크둜 μΈν„°λž™μ…˜, λ‘œλ”© μƒνƒœ μ§„ν–‰ ν‘œμ‹œ, λΆ€λ“œλŸ¬μš΄ ν™”λ©΄ μƒνƒœ μ „ν™˜ 등에 주둜 ν™œμš©λœλ‹€ [7-10]. μ• λ‹ˆλ©”μ΄μ…˜μ˜ 지속 μ‹œκ°„μ€ μ‚¬μš©μž λŒ€κΈ° μ‹œκ°„μ„ 쀄이기 μœ„ν•΄ 200msμ—μ„œ 500ms μ‚¬μ΄λ‘œ 짧게 μœ μ§€ν•˜λŠ” 것이 μ’‹μœΌλ©°, 기계적인 μ„ ν˜• μ›€μ§μž„ λŒ€μ‹  `ease-in-out`κ³Ό 같은 이징(Easing) ν•¨μˆ˜λ₯Ό ν™œμš©ν•΄ 물리 법칙에 κΈ°λ°˜ν•œ μžμ—°μŠ€λŸ¬μš΄ μ›€μ§μž„μ„ 섀계해야 ν•œλ‹€ [11-14]. * **μ„±λŠ₯ μ €ν•˜λ₯Ό μœ λ°œν•˜λŠ” μ•ˆν‹° νŒ¨ν„΄ ([[Reflow & Repaint|Reflow & Repaint]])** ν”„λ‘ νŠΈμ—”λ“œ μ‹€μ „ μ„€κ³„μ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜ μ„±λŠ₯은 λ³€κ²½λ˜λŠ” CSS 속성에 크게 μ’Œμš°λœλ‹€ [15, 16]. `width`, `height`, `margin`, `padding`, `top`, `left` λ“±μ˜ λ ˆμ΄μ•„μ›ƒ 속성을 μ• λ‹ˆλ©”μ΄μ…˜ μ²˜λ¦¬ν•˜λ©΄ λΈŒλΌμš°μ €μ˜ λ¦¬ν”Œλ‘œμš°(Reflow)와 리페인트(Repaint)κ°€ μ§€μ†ν•΄μ„œ λ°œμƒν•˜μ—¬ μ• λ‹ˆλ©”μ΄μ…˜μ΄ λŠκΈ°λŠ” ν˜„μƒ(Jank)이 λ°œμƒν•œλ‹€ [5, 6, 15, 17]. λ˜ν•œ `box-shadow`, `filter`, `border-radius` 및 크고 λ³΅μž‘ν•œ λ°°κ²½ μ΄λ―Έμ§€μ˜ μ• λ‹ˆλ©”μ΄μ…˜μ€ λ Œλ”λ§ μžμ› μ†Œλͺ¨κ°€ 크기 λ•Œλ¬Έμ— μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€ [16, 18]. λ™μ‹œμ— λ„ˆλ¬΄ λ§Žμ€ μš”μ†Œλ₯Ό μ• λ‹ˆλ©”μ΄μ…˜ν•˜κ±°λ‚˜ λΆˆν•„μš”ν•œ λ¬΄ν•œ 루프(`infinite`)λ₯Ό μ μš©ν•˜λŠ” 것도 λΈŒλΌμš°μ € μ„±λŠ₯을 크게 μ €ν•˜ν•˜λŠ” 원인이 λœλ‹€ [19, 20]. * **μœ μ§€λ³΄μˆ˜ κ°€λŠ₯ν•˜κ³  ν™•μž₯μ„± μžˆλŠ” μ„±λŠ₯ μ΅œμ ν™” μ „λž΅** λΆ€λ“œλŸ½κ³  λ Œλ”λ§ λΉ„μš©μ΄ 적은 μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ ˆμ΄μ•„μ›ƒμ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ” `transform` (예: `translateZ()`, `scale()`)κ³Ό `opacity` 속성을 적극 ν™œμš©ν•΄μ•Ό ν•œλ‹€ [16, 21-23]. μ΄λŸ¬ν•œ 속성듀은 λΈŒλΌμš°μ € λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ—μ„œ λ ˆμ΄μ•„μ›ƒκ³Ό 페인트 단계λ₯Ό κ±΄λ„ˆλ›°κ³  μ»΄ν¬μ§€νŒ…(Compositing) λ‹¨κ³„λ§Œ 거치게 되며, GPU ν•˜λ“œμ›¨μ–΄ 가속을 λ°›μ•„ λͺ¨λ°”일 κΈ°κΈ°μ—μ„œλ„ λ›°μ–΄λ‚œ μ„±λŠ₯을 보μž₯ν•œλ‹€ [16, 23, 24]. λ˜ν•œ `position: absolute`λ‚˜ `position: fixed` μš”μ†Œμ— μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•˜λ©΄ DOM 트리의 λ‹€λ₯Έ μš”μ†Œμ— λ―ΈμΉ˜λŠ” λ¦¬ν”Œλ‘œμš° 영ν–₯을 차단할 수 μžˆλ‹€ [24-26]. μ• λ‹ˆλ©”μ΄μ…˜μ΄ ν™•μ •λœ μš”μ†Œμ—λŠ” `will-change` 속성을 λΆ€μ—¬ν•΄ λΈŒλΌμš°μ €κ°€ μ΅œμ ν™”λ₯Ό 미리 μ€€λΉ„ν•˜λ„λ‘ 힌트λ₯Ό 쀄 수 μžˆμœΌλ‚˜, κ³Όλ„ν•˜κ²Œ μ‚¬μš©ν•  경우 였히렀 μ„±λŠ₯을 μ €ν•˜μ‹œν‚€λ―€λ‘œ μ΅œμ†Œν™”ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ [27, 28]. * **μ ‘κ·Όμ„±κ³Ό 싀무 ν™˜κ²½μ—μ„œμ˜ μ œμ–΄** 보이지 μ•ŠλŠ” μš”μ†Œμ˜ λ¬΄ν•œ 루프 μ• λ‹ˆλ©”μ΄μ…˜μ€ μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό κ³ κ°ˆμ‹œν‚€λ―€λ‘œ, `animation-play-[[State|State]]`λ₯Ό μ‚¬μš©ν•΄ ν™”λ©΄ μ΄νƒˆ μ‹œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μΌμ‹œ μ •μ§€μ‹œν‚€λŠ” μ œμ–΄κ°€ ν•„μš”ν•˜λ‹€ [5, 20]. μ•„μšΈλŸ¬, κ³Όλ„ν•œ λͺ¨μ…˜μ€ 일뢀 μ‚¬μš©μžμ—κ²Œ μ–΄μ§€λŸ¬μ›€μ„ μœ λ°œν•  수 μžˆμœΌλ―€λ‘œ μ›Ή μ½˜ν…μΈ  μ ‘κ·Όμ„± μ§€μΉ¨(WCAG)에 따라 `prefers-reduced-motion` λ―Έλ””μ–΄ 쿼리λ₯Ό ν™œμš©ν•΄ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ„ νƒμ μœΌλ‘œ μ€„μ΄κ±°λ‚˜ μ œκ±°ν•  수 μžˆλŠ” μ ‘κ·Όμ„± μž₯치λ₯Ό λ°˜λ“œμ‹œ λ§ˆλ ¨ν•΄μ•Ό ν•œλ‹€ [11, 29, 30]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Reflow and Repaint|Reflow and Repaint]], Hardware Acceleration (GPU), Micro-interactions, [[Accessibility|Accessibility]] (prefers-reduced-motion) - **Projects/Contexts:** [[Large Frontend Projects|Large Frontend Projects]], [[Performance Optimization|Performance Optimization]] - **Contradictions/Notes:** λ¬΄ν•œ 루프 μ• λ‹ˆλ©”μ΄μ…˜κ³Ό ν™”λ €ν•œ λͺ¨μ…˜μ€ μΈν„°νŽ˜μ΄μŠ€μ— ν™œλ ₯을 쀄 수 μžˆμ§€λ§Œ μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό 크게 μ†Œλͺ¨ν•˜λ©°, μ „μ •κΈ°κ΄€ μž₯μ• κ°€ μžˆλŠ” μ‚¬μš©μžμ—κ²Œ μœ„ν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11, 20]. λ”°λΌμ„œ 싀무 ν™˜κ²½μ—μ„œλŠ” μ• λ‹ˆλ©”μ΄μ…˜ μ μš©μ„ ν•„μˆ˜μ μΈ κΈ°λŠ₯κ³Ό 마이크둜 μΈν„°λž™μ…˜μœΌλ‘œ μ œν•œν•˜κ³ , ν™”λ©΄μ—μ„œ 벗어났을 λ•Œ μ •μ§€μ‹œν‚€κ±°λ‚˜(`animation-play-state`) μ‚¬μš©μžμ˜ ν™˜κ²½ 섀정에 따라 λͺ¨μ…˜μ„ μ€„μ΄λŠ”(`prefers-reduced-motion`) 방어적 섀계가 λ™λ°˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [20, 29, 30]. --- *Last updated: 2026-04-26*