대부분의 UI 애니메이션은 라이브러리가 아냐 — Tailwind 유틸리티로 감싼 CSS primitive 셋. Primitive 알면 진짜 필요할 때만 Framer Motion 손이 가.
세 primitive
- Transition — 두 상태 사이 interpolate (예:
hover:bg-brand-strong transition-colors). 저렴, GPU 친화, state-구동 UI 의 디폴트. - Keyframe —
animation속성으로 참조하는 사전 정의 시퀀스 (@keyframes). Pulse, spinner, 루프나 여러 stop 있는 모든 것. - Web Animations API — JavaScript 구동, CSS 로 표현 불가한 오케스트레이션 (시퀀싱, 동적 duration) 용. 프레임 정확, 다만 거의 필요 없음.
Tailwind 빌트인 유틸리티
Tailwind v4 출하: transition, duration-200, ease-in-out, + 빌트인 keyframe 애니메이션 animate-spin, animate-pulse, animate-bounce, animate-ping. 본인의 @keyframes + 유틸리티 클래스 (lesson 3) 와 결합해서 필요의 90% 커버.
Framer Motion 손이 갈 때
복잡한 상호작용: 드래그앤드롭, 레이아웃 애니메이션 (FLIP), 라우트 간 공유 element 전환, 제스처 처리. 다른 easing 과 timing 가진 여러 element 시퀀싱 중이면 Framer Motion 의 animate + variants API 가 구원. 그 외 — transition 과 keyframe.
prefers-reduced-motion 존중
일부 사용자 (전정 장애, motion 민감성) 가 최소 애니메이션 선호. 사용자가 preference 설정했을 때 motion 무거운 효과를 disable 하는 미디어 쿼리로 감싸.
Transition 은 공짜처럼, keyframe 은 비싸게 느껴짐. 브라우저가 transform/opacity 의 transition 을 GPU compositing 에 최적화 — 레이어 repaint 안 함. 레이아웃 만지는 애니메이션 (width, height, top, left) 은 layout thrash.
top/left 보다 transform: translate; display 보다 opacity.