SVG에서 CSS Transform 애니메이션: Scale, Rotate, Translate

발행: (2026년 4월 11일 오후 06:49 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

CSS + SVG 애니메이션을 사용하는 이유

현대 브라우저에는 강력하고 아직 충분히 주목받지 못한 애니메이션 시스템이 내장되어 있습니다: SVG + CSS 키프레임. 런타임도, 번들러 매직도 필요 없습니다 — 브라우저가 자동으로 하드웨어 가속하는 마크업과 스타일만 있으면 됩니다. SVG 형태는 DOM에 존재하므로 CSS가 다른 요소와 똑같이 애니메이션을 적용할 수 있습니다. 컴포지터 스레드가 부드러운 60 fps로 작업을 처리하고, 사용자에게 추가 바이트를 전송하지 않아도 됩니다.

기본 변형 애니메이션 예시

@keyframes example {
  0%   { opacity: 0; transform: scale(0.8); }
  50%  { opacity: 1; transform: scale(1.05); }
  100% { opacity: 1; transform: scale(1); }
}

.my-shape {
  animation: example 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

  

<svg>, <path>, <circle>, <rect> 등 모든 SVG 요소에 클래스를 부여하고 일반 HTML 요소처럼 애니메이션을 적용할 수 있습니다.

Transform + opacity

transformopacity 모두 GPU 컴포지팅을 트리거합니다 — 레이아웃 재계산이나 재페인트가 일어나지 않으며, 부드러운 애니메이션을 위한 첫 번째 선택이 되어야 합니다.

animation-delay 로 계단식 애니메이션 만들기

.item:nth-child(1) { animation-delay: 0s; }
.item:nth-child(2) { animation-delay: 0.1s; }
.item:nth-child(3) { animation-delay: 0.2s; }

점진적인 딜레이를 사용해 추가 JavaScript 없이도 연속적인 효과를 만들 수 있습니다.

완전한 자체 포함 SVG + CSS 애니메이션

  @keyframes orbit {
    from { transform: rotate(0deg) translateX(60px) rotate(0deg); }
    to   { transform: rotate(360deg) translateX(60px) rotate(-360deg); }
  }
  .dot { animation: orbit 2s linear infinite; transform-origin: center; }

이 스니펫을 HTML, React, Vue, Svelte 파일 어디에든 붙여넣기만 하면 바로 동작합니다.

시각적 타임라인 편집기

키프레임 수식을 직접 작성하지 않고 시각적으로 모션을 디자인하고 싶다면 CSSVG 를 사용해 보세요. 깔끔한 SVG + CSS 코드를 내보내어 프로젝트에 바로 넣을 수 있습니다.

정리

  • SVG 형태는 DOM 요소이므로 CSS가 네이티브하게 애니메이션을 적용할 수 있습니다.
  • @keyframes + transform/opacity = GPU‑컴포지팅, JavaScript 없이 구현되는 애니메이션.
  • 결과물은 포터블 마크업이며, React, Vue, Svelte 혹은 일반 HTML 어디서든 동작합니다.

다음에 다루었으면 하는 특정 애니메이션 기법이 있다면 댓글로 알려 주세요!

0 조회
Back to Blog

관련 글

더 보기 »