🐨CoalaCoding
Docs▾
JavaScriptReactHTML & CSSBackendAI & LLMDev ToolsCreative
B반1
👾숏츠
🙉B반2
게시판
🐨CoalaCoding

디지털 크리에이터를 위한 한국어 기술 문서

문서

  • JavaScript
  • React
  • HTML & CSS
  • Backend
  • AI & LLM
  • Dev Tools
  • Creative

커뮤니티

  • 게시판
  • 예제 모음

기타

  • 관리자

정책

  • 소개
  • 개인정보처리방침
  • 이용약관
  • 연락처
© 2026 CoalaCoding. All rights reserved.
  • 1. 선택자
  • 2. 문자
  • 3. 문단
  • 4. 박스모델
  • 5. 배경
  • 6. 레이아웃
  • 7. 트랜지션과-애니메이션
  • 8. 마스크
  • 10. hover효과
  • 11. var
  • 12. 클립패스
  • 13. 네스팅
  • 15. containerQuery
  • 16. 가로스크롤
  • 17. retina
  • 18. 반응형 햄버거메뉴
  • 19. 반응형-폰트크기
  • 20. svg
  • 21. 리퀴드글래스
  • 22. 폼디자인
  • 23. clamp(),min(),max()
  • 24. 세로정렬
  • 25. calc
  1. 홈
  2. 문서
  3. HTML & CSS
  4. CSS
  5. 7. 트랜지션과-애니메이션

7. 트랜지션과-애니메이션

이미지 다운로드

개요 본 학습 문서는 웹 페이지에 생동감을 불어넣는 CSS의 핵심 동적 효과인 트랜지션(Transition), 트랜스폼(Transform), 그리고 애니메이션(Animation) 기술을 심도 있게 다룹니다. 요소의 상태 변화를 부드럽게 이어주는 트랜지션의 기본 원리부터, 2D 및 3D 공간에서의 공간 변형을 제어하는 트랜스폼, 그리고 @keyframes를 활용한 정교한 시무브먼트 구현법을 체계적으로 학습합니다. 실무에서 즉시 활용 가능한 카드 뒤집기, 호버 확대, 경로 애니메이션 등 풍부한 실전 예제와 시작/완료 코드 쌍을 통해 동적 퍼블리싱 능력을 한 단계 높일 수 있도록 구성되었습니다.


01. transition

설명

CSS 속성값이 변경될 때 그 변화를 일정 시간 동안 부드럽게 이어주는 효과를 생성한다. 주로 :hover나 :focus 같은 가상 클래스와 조합하여 상태 변화를 시각화할 때 사용된다.

값설명
transition-property효과를 적용할 속성 (예: all, width, opacity)
transition-duration효과가 지속될 시간 (단위: s, ms)
transition-timing-function속도 곡선 (ease, linear, ease-in-out 등)
transition-delay효과가 시작되기 전 대기 시간

transition은 초기 상태와 변화된 상태가 모두 정의되어 있어야 작동한다. 자세한 내용은 🔗MDN 참고.

1-1. 호버 이미지 확대 효과

시작 transition-hover.html
<div class="container">
  <div class="item">Hover Me</div>
</div>
<style>
  .item { width: 200px; height: 100px; background: #3498db; color: white; text-align: center; line-height: 100px; cursor: pointer; }
</style>
완료 transition-hover.html
<div class="container">
  <div class="item">Hover Me</div>
</div>
<style>
  .item { width: 200px; height: 100px; background: #3498db; color: white; text-align: center; line-height: 100px; cursor: pointer; transition: all 0.3s ease; }
  .item:hover { transform: scale(1.2); background: #2ecc71; }
</style>

02. transform (2D)

설명

요소를 평면 공간에서 이동, 회전, 크기 조절, 기울이기 등의 변형을 가한다. 실제 레이아웃의 흐름에는 영향을 주지 않고 시각적인 변형만 일어나는 것이 특징이다.

함수설명
translate(x, y)지정한 좌표만큼 요소 이동
rotate(angle)지정한 각도만큼 요소 회전 (단위: deg)
scale(x, y)요소의 크기를 배율로 조절 (1=원본)
skew(x, y)요소를 특정 각도로 기울임

여러 변형을 동시에 적용하려면 공백으로 구분하여 나열한다 (예: transform: rotate(45deg) scale(1.2);). 자세한 내용은 🔗MDN 참고.

2-1. 2D 변형 실습

시작 transform-2d.html
<div class="box">2D Transform</div>
<style>
  .box { width: 100px; height: 100px; background: orange; margin: 50px; }
</style>
완료 transform-2d.html
<div class="box">2D Transform</div>
<style>
  .box { width: 100px; height: 100px; background: orange; margin: 50px; transition: 0.5s; }
  .box:hover { transform: translate(50px, 20px) rotate(45deg) scale(1.5); }
</style>

03. transform (3D)

설명

요소를 3차원 공간(X, Y, Z축)에서 변형한다. 깊이감을 표현하기 위해 부모 요소에 perspective 속성을 설정하는 것이 필수적이다.

속성/함수설명
translate3d(x, y, z)3차원 좌표로 이동
rotateX, rotateY각 축을 중심으로 입체적 회전
perspective원근감의 깊이 설정 (값이 작을수록 왜곡이 심함)
backface-visibility요소의 뒷면 표시 여부 (visible, hidden)

perspective는 변형될 요소의 부모에 작성하고, transform: perspective()는 요소 본인에게 직접 원근감을 부여할 때 사용한다.

3-1. 카드 뒤집기 효과

시작 card-flip.html
<div class="card-container">
  <div class="card">
    <div class="front">Front</div>
    <div class="back">Back</div>
  </div>
</div>
완료 card-flip.html
.card-container { perspective: 1000px; }
.card { width: 200px; height: 300px; transition: 0.6s; transform-style: preserve-3d; position: relative; }
.card:hover { transform: rotateY(180deg); }
.front, .back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; text-align: center; line-height: 300px; font-size: 2em; color: white; border-radius: 10px; }
.front { background: #3498db; }
.back { background: #e74c3c; transform: rotateY(180deg); }

04. animation

설명

@keyframes로 정의한 키프레임 흐름에 따라 요소에 복잡한 애니메이션을 적용한다. 트랜지션과 달리 시작과 종료 상태 외에도 중간 단계의 세밀한 제어가 가능하며 무한 반복이 가능하다.

속성설명
animation-name사용할 @keyframes의 이름
animation-duration한 주기가 걸리는 시간
animation-iteration-count반복 횟수 (예: 3, infinite)
animation-direction재생 방향 (normal, alternate, reverse)
animation-fill-mode시작 전/후 상태 유지 (forwards, backwards, both)

animation-play-state를 사용하면 마우스 호버 시 애니메이션을 일시 정지(paused)하거나 재생(running)할 수 있다. 자세한 내용은 🔗MDN 참고.

4-1. 심장 박동 효과

시작 heartbeat.html
<div class="heart">❤</div>
<style>
  .heart { font-size: 100px; color: pink; text-align: center; }
</style>
완료 heartbeat.html
.heart { font-size: 100px; color: pink; text-align: center; animation: heartbeat 1s infinite ease; }
@keyframes heartbeat {
  0% { transform: scale(1); }
  50% { transform: scale(1.3); }
  100% { transform: scale(1); }
}

05. 애니메이션 심화

설명

변수(CSS Variables)나 경로(path)를 활용하여 더욱 역동적이고 효율적인 애니메이션을 구현한다. 여러 애니메이션을 동시에 적용하거나 재생 방향 및 채우기 모드를 정밀하게 제어한다.

기법설명
변수 활용--i: 1과 같이 인라인 변수를 선언하여 키프레임 수치 동적 계산
경로 애니메이션offset-path를 사용하여 특정 곡선을 따라 요소 이동
멀티 애니메이션쉼표로 구분하여 여러 개의 키프레임을 하나의 요소에 적용

animation-fill-mode: forwards는 애니메이션이 끝난 후 마지막 상태를 유지하게 하여 시각적 연속성을 보장한다.

5-1. 경로 이동 애니메이션

시작 path-animation.html
<div class="wrap"><div class="box"></div></div>
<style>
  .wrap { width: 600px; height: 200px; background: #eee; position: relative; }
  .box { width: 50px; height: 50px; background: red; border-radius: 50%; }
</style>
완료 path-animation.html
.box {
  offset-path: path('M0,100c10,-50 82,-82 127,0c19,-79 119,-102 151,0c5,-77 101,-104 149,-52') auto;
  animation: moveto 5s infinite ease-in-out;
}
@keyframes moveto {
  0% { offset-distance: 0%; }
  100% { offset-distance: 100%; }
}

목차

  • 01. transition
  • 02. transform (2D)
  • 03. transform (3D)
  • 04. animation
  • 05. 애니메이션 심화