CSS Keyframes 생성기

결과

@keyframes 규칙은 애니메이션의 이정표를 정의합니다. 요소가 시작, 중간, 끝에서 어떻게 보일지입니다. 이 생성기는 흔히 쓰는 네 가지 움직임, 페이드 슬라이드, 펄스, 스핀, 바운스의 규칙을 작성해 드립니다. 애니메이션에 이름을 붙이고 지속 시간을 설정한 다음, 슬라이드와 바운스 프리셋에서는 이동 거리를 픽셀로 지정하세요. 출력은 animation 축약형과 @keyframes 블록으로 스타일시트에 바로 붙여넣으면 됩니다.

Keyframes 생성 방법

  1. 1

    애니메이션 유형 선택

    페이드 슬라이드, 펄스, 스핀 또는 바운스. 각 프리셋에는 준비된 프레임이 포함됩니다.

  2. 2

    애니메이션 이름 짓기

    `fade-slide` 같은 kebab-case 이름을 사용하며, 나중에 `animation` 축약형에서 쓰입니다.

  3. 3

    지속 시간 설정

    초 단위로, 빠른 전환에는 예를 들어 0.6.

  4. 4

    거리 설정 (슬라이드와 바운스)

    수직 이동에 사용되는 픽셀 단위 거리.

  5. 5

    CSS 복사

    축약형과 `@keyframes` 블록을 스타일시트에 붙여넣으세요.

네 가지 프리셋

페이드 슬라이드

.animated {
  animation: fade-slide 0.6s ease both;
}

@keyframes fade-slide {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}

요소가 아래에서 위로 미끄러지며 나타납니다.

펄스

@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50%      { transform: scale(1.05); opacity: .8; }
}

부드러운 호흡 효과로, 알림 점과 배지에 좋습니다.

스핀

@keyframes spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

한 바퀴 회전. 로더와 아이콘에 유용합니다.

바운스

@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-24px); }
}

요소가 위로 튀었다가 돌아옵니다.

왜 transform과 opacity인가

브라우저는 transformopacity를 레이아웃 계산이나 다시 그리기 없이 GPU에서 합성하므로 애니메이션이 부드럽게 유지됩니다. 프리셋은 레이아웃 계산을 일으키는 속성을 의도적으로 피합니다.

animation 축약형

animation: fade-slide 0.6s ease both;는 fade-slide라는 애니메이션, 0.6초 길이, 기본 ease 이징을 뜻합니다. 채우기 모드 both는 애니메이션이 시작되기 전에 시작 상태를 적용하고 끝난 뒤에도 종료 상태를 유지하므로, 요소가 시작 전에 번쩍이거나 움직임 후에 갑자기 되돌아가지 않습니다.

이름 짓기 규칙

  • CSS 규칙에 맞게 kebab-case를 사용하세요.
  • 요소가 아닌 움직임을 나타내는 이름을 쓰세요. alert-appear보다 fade-in-up이 낫습니다.
  • 서드파티 라이브러리와 충돌할 수 있는 이름은 피하세요.

브라우저 지원

@keyframes는 보편적이며 IE 10 이후 모든 브라우저에서 지원됩니다.

자주 묻는 질문

카드, 배너, 대화상자처럼 페이지에 들어오는 콘텐츠에는 페이드 슬라이드를 쓰세요. 눈에 띄어야 하는 알림 점, 배지, 버튼에는 펄스. 로더와 진행 아이콘에는 스핀. 클릭 유도 화살표 같은 장난기 있는 강조에는 바운스입니다.

거리는 슬라이드와 바운스 프리셋에서 픽셀 단위의 수직 이동량입니다. 페이드 슬라이드 애니메이션은 24px 아래에서 시작해 위로 미끄러지고, 바운스는 24px 위로 튀었다가 돌아옵니다. 스핀 프리셋은 거리를 쓰지 않습니다.

네, 출력은 순수한 CSS입니다. ease를 다른 이징 키워드나 cubic-bezier(...) 값으로 바꾸고, @keyframes 블록 안에 25%나 75% 같은 중간 백분율을 추가해 움직임을 더 다듬을 수 있습니다.

프레임워크의 재렌더링이 클래스를 다시 적용해 애니메이션을 다시 시작할 수 있기 때문입니다. 종료 상태를 유지하려면 animation-fill-mode: both(이미 출력에 포함됨)를 쓰거나, 재렌더링되는 요소에서 애니메이션 트리거를 분리하세요.

관련 도구