minstudio

CSS 애니메이션 레퍼런스

웹 UI를 생동감 있게 만들어주는 가장 트렌디하고 실용적인 CSS Keyframe 애니메이션 모음입니다.
각 카드의 미리보기 박스를 클릭하여 애니메이션을 확인하고 코드를 바로 복사해 사용하세요.

CLICK TO PLAY

Fade In (페이드 인)

요소가 서서히 나타나는 가장 기본적인 등장 효과입니다.

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.animate-fade-in {
  animation: fadeIn 0.5s ease-in-out forwards;
}
CLICK TO PLAY

Fade Up (아래에서 위로 페이드)

컨텐츠가 아래에서 부드럽게 올라오며 나타나는 효과입니다. 리스트 등장에 자주 쓰입니다.

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
.animate-fade-up {
  animation: fadeUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
CLICK TO PLAY

Pulse (맥박/강조)

크기가 커졌다가 작아지며 사용자의 시선을 이끄는 강조 효과입니다. 버튼에 유용합니다.

@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.05); }
  100% { transform: scale(1); }
}
.animate-pulse {
  animation: pulse 2s infinite ease-in-out;
}
CLICK TO PLAY

Bounce (바운스)

통통 튀는 효과로, 경고 메시지나 알림창 등장 시 생동감을 줍니다.

@keyframes bounce {
  0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
  40% { transform: translateY(-20px); }
  60% { transform: translateY(-10px); }
}
.animate-bounce {
  animation: bounce 1.5s infinite;
}
CLICK TO PLAY

Shake (흔들림/오류)

비밀번호가 틀렸거나 입력값이 잘못되었을 때 사용자에게 오류를 직관적으로 알려줍니다.

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-10px); }
  50% { transform: translateX(10px); }
  75% { transform: translateX(-10px); }
}
.animate-shake {
  animation: shake 0.4s ease-in-out;
}
CLICK TO PLAY

Spin (회전/로딩)

로딩 스피너나 아이콘을 무한히 회전시킬 때 사용합니다.

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.animate-spin {
  animation: spin 1s linear infinite;
}
CLICK TO PLAY

Slide In Right (오른쪽에서 슬라이드)

사이드바 메뉴나 토스트 알림이 우측에서 등장할 때 사용합니다.

@keyframes slideInRight {
  from { transform: translateX(100%); opacity: 0; }
  to { transform: translateX(0); opacity: 1; }
}
.animate-slide-in-right {
  animation: slideInRight 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}
CLICK TO PLAY

Heartbeat (심장 박동)

Pulse보다 조금 더 역동적인 심박수 느낌의 강조 효과입니다. '좋아요' 버튼 등에 어울립니다.

@keyframes heartbeat {
  0% { transform: scale(1); }
  14% { transform: scale(1.3); }
  28% { transform: scale(1); }
  42% { transform: scale(1.3); }
  70% { transform: scale(1); }
}
.animate-heartbeat {
  animation: heartbeat 1.5s ease-in-out infinite;
}
CLICK TO PLAY

Zoom In (줌 인)

화면 중앙에서 작았던 요소가 커지며 나타나는 효과입니다. 모달 창 등에 적합합니다.

@keyframes zoomIn {
  from { opacity: 0; transform: scale(0.3); }
  50% { opacity: 1; }
}
.animate-zoom-in {
  animation: zoomIn 0.5s ease-out forwards;
}
CLICK TO PLAY

Float (플로팅)

요소가 공중에 둥둥 떠 있는 것처럼 위아래로 부드럽게 움직이는 효과입니다.

@keyframes float {
  0% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
  100% { transform: translateY(0); }
}
.animate-float {
  animation: float 3s ease-in-out infinite;
}
CLICK TO PLAY

Swing (그네)

요소가 중심축을 기준으로 좌우로 흔들리는 경쾌한 효과입니다.

@keyframes swing {
  20% { transform: rotate(15deg); }
  40% { transform: rotate(-10deg); }
  60% { transform: rotate(5deg); }
  80% { transform: rotate(-5deg); }
  to { transform: rotate(0deg); }
}
.animate-swing {
  animation: swing 1s ease-in-out;
  transform-origin: top center;
}
CLICK TO PLAY

Tada (짜잔)

축하 메시지나 성공 알림, 혹은 중요한 요소가 등장할 때 쓰기 좋은 극적인 효과입니다.

@keyframes tada {
  from { transform: scale(1); }
  10%, 20% { transform: scale(0.9) rotate(-3deg); }
  30%, 50%, 70%, 90% { transform: scale(1.1) rotate(3deg); }
  40%, 60%, 80% { transform: scale(1.1) rotate(-3deg); }
  to { transform: scale(1); }
}
.animate-tada {
  animation: tada 1s ease-in-out;
}
CLICK TO PLAY

Rubber Band (고무줄)

고무줄이 늘어났다가 줄어드는 것처럼 탄력 있는 효과입니다.

@keyframes rubberBand {
  from { transform: scale(1); }
  30% { transform: scale(1.25, 0.75); }
  40% { transform: scale(0.75, 1.25); }
  50% { transform: scale(1.15, 0.85); }
  65% { transform: scale(0.95, 1.05); }
  75% { transform: scale(1.05, 0.95); }
  to { transform: scale(1); }
}
.animate-rubber-band {
  animation: rubberBand 1s ease-in-out;
}
CLICK TO PLAY

Flip (플립/뒤집기)

Y축을 기준으로 3D처럼 회전하며 나타나는 세련된 카드 뒤집기 효과입니다.

@keyframes flipInY {
  from { transform: perspective(400px) rotateY(90deg); opacity: 0; }
  40% { transform: perspective(400px) rotateY(-20deg); }
  60% { transform: perspective(400px) rotateY(10deg); opacity: 1; }
  80% { transform: perspective(400px) rotateY(-5deg); }
  to { transform: perspective(400px); opacity: 1; }
}
.animate-flip {
  animation: flipInY 1s ease-out forwards;
  backface-visibility: visible !important;
}