CSS animation · transition
이 폴더는 JavaScript 앞뒤에서 함께 쓰이는 CSS 기본 레이아웃과 움직임 효과를 정리합니다. display, float, hover, table 스타일, keyframes, animation, transition의 역할을 나누어 봅니다.
@keyframes는 애니메이션의 시간별 스타일 변화를 정의합니다. 원본은 0%에서 0도, 100%에서 360도로 회전합니다.
| 지점 | transform | 의미 |
|---|---|---|
| 0% | rotate(0deg) | 시작 상태 |
| 25% | rotate(90deg) | 중간 단계 예시 |
| 50% | rotate(180deg) | 절반 회전 |
| 100% | rotate(360deg) | 한 바퀴 회전 |
keyframes를 실제 요소에 적용하려면 animation-name, animation-duration, animation-iteration-count를 지정합니다.
| 속성 | 역할 | 예제 |
|---|---|---|
| animation-name | 사용할 keyframes 이름 | imagerotation |
| animation-duration | 한 번 재생 시간 | 1s |
| animation-iteration-count | 반복 횟수 | infinite |
| transform | 회전 효과 | rotate |
두 번째 animation은 -90도에서 90도로 갔다가 다시 -90도로 돌아옵니다. 한 방향으로 계속 도는 첫 예제와 달리 흔들리는 느낌이 납니다.
transition은 상태가 바뀔 때 중간 변화를 부드럽게 만들어 줍니다. 원본은 hover 시 width가 100%가 되며, 그 변화가 2초 동안 진행됩니다.
animation은 스스로 반복 재생될 수 있고, transition은 상태 변화가 있어야 움직입니다.
| 구분 | animation | transition |
|---|---|---|
| 시작 조건 | 적용되면 자동 재생 가능 | 상태 변화 필요 |
| 중간 단계 | keyframes로 여러 지점 지정 | 시작값과 끝값 사이 보간 |
| 반복 | iteration-count 가능 | 상태 변화 때마다 1회 |
| 예제 | 계속 회전 | hover 시 확대 |
회전은 transform으로 처리하고, transition 예제는 width를 바꿉니다. transform은 레이아웃 영향을 줄이는 편이고, width는 주변 레이아웃에 영향을 줄 수 있습니다.
animation-duration 값을 바꾸면 속도가 달라집니다. 1s는 빠르게, 3s는 느리게 움직입니다. infinite를 숫자로 바꾸면 지정 횟수만 반복됩니다.
| 설정 | 효과 | 예시 |
|---|---|---|
| duration 1s | 빠른 회전 | animation-duration:1s |
| duration 3s | 느린 회전 | animation-duration:3s |
| iteration 3 | 3번 반복 | animation-iteration-count:3 |
| iteration infinite | 무한 반복 | 계속 움직임 |
| 실수 | 증상 | 해결 |
|---|---|---|
| keyframes 이름 불일치 | 애니메이션이 실행되지 않습니다. | animation-name과 이름을 맞춥니다. |
| duration 누락 | 움직임이 보이지 않습니다. | animation-duration을 지정합니다. |
| deg 단위 누락 | 회전이 적용되지 않습니다. | rotate(90deg)처럼 단위를 씁니다. |
| transition 대상 없음 | 부드러운 변화가 없습니다. | transition: width 2s처럼 속성을 지정합니다. |
| hover만 테스트 | 터치 환경 차이를 놓칩니다. | 모바일 동작도 고려합니다. |
| 체크 | 통과 기준 |
|---|---|
| @keyframes | 시간 지점별 스타일을 정의합니다. |
| animation-name | keyframes 이름과 연결합니다. |
| duration | 한 번 재생 시간을 지정합니다. |
| iteration | 반복 횟수를 지정합니다. |
| transition | 상태 변화가 부드럽게 진행됩니다. |
| hover | 마우스 오버 상태에서 width가 바뀝니다. |
| 테스트 | 확인 내용 |
|---|---|
| 기본 회전 | 이미지가 계속 360도 회전하는지 봅니다. |
| 왕복 회전 | -90도와 90도 사이를 오가는지 확인합니다. |
| duration 변경 | 1s와 3s 속도 차이를 봅니다. |
| iteration 변경 | infinite 대신 3회 반복을 확인합니다. |
| hover width | 마우스 올릴 때 2초 동안 넓어지는지 봅니다. |
keyframes는 중간 지점을 늘릴수록 움직임을 세밀하게 제어할 수 있습니다. 회전뿐 아니라 크기, 투명도, 위치도 함께 바꿀 수 있습니다.
| 속성 | 효과 | 예시 |
|---|---|---|
| animation-direction | 재생 방향 | alternate |
| animation-timing-function | 속도 곡선 | linear, ease |
| animation-delay | 시작 지연 | 0.5s |
| animation-fill-mode | 시작/끝 상태 유지 | forwards |
| animation-play-state | 재생/일시정지 | paused |
transition은 hover 같은 상태 변화에 반응합니다. width뿐 아니라 transform, opacity, background-color 같은 속성에도 적용할 수 있습니다.
| transition 대상 | hover 변화 | 효과 |
|---|---|---|
| width | 100px → 100% | 가로 확장 |
| transform | scale(1) → scale(1.5) | 확대 |
| opacity | 1 → 0.5 | 투명도 변화 |
| background-color | white → yellowgreen | 배경색 변화 |
| border-radius | 0 → 50% | 모양 변화 |
무한 회전 애니메이션은 학습용으로는 좋지만, 실제 페이지에서는 사용자가 피로감을 느낄 수 있습니다. 움직임을 줄이는 설정도 고려해야 합니다.
| 상황 | 권장 처리 | 이유 |
|---|---|---|
| 무한 반복 | 필요한 경우에만 사용 | 시각 피로 감소 |
| 빠른 회전 | duration 늘리기 | 어지러움 감소 |
| 장식 애니메이션 | 일시정지 가능하게 설계 | 사용자 제어권 제공 |
| hover 확대 | 레이아웃 밀림 확인 | 주변 요소 겹침 방지 |
| 민감 사용자 | prefers-reduced-motion 고려 | 접근성 개선 |
애니메이션이 보이지 않을 때는 keyframes, 연결 이름, 시간, 변화 속성을 차례로 확인합니다. transition은 시작값과 끝값이 모두 있어야 변화가 보입니다.
| 순서 | 확인 | 이유 |
|---|---|---|
| 1 | @keyframes 이름 | animation-name과 정확히 같아야 합니다. |
| 2 | duration | 시간이 0이면 움직임이 보이지 않습니다. |
| 3 | transform 단위 | rotate에는 deg 단위가 필요합니다. |
| 4 | 반복 횟수 | 1회만 재생되면 놓칠 수 있습니다. |
| 5 | transition 대상 | width, transform처럼 변하는 속성을 지정해야 합니다. |
| 6 | hover 상태 | 마우스가 올라간 상태에서 끝값이 적용되는지 봅니다. |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| CSS 메뉴·리스트·animation 완전 정리 (1) | 2026.07.07 |
|---|---|
| CSS 기초 레이아웃 완전 정리 (0) | 2026.07.07 |
| JavaScript 기초 문법 실습 완전 정리 (0) | 2026.07.07 |
| JavaScript 객체 배열 · eval 수식 완전 정리 (0) | 2026.07.07 |
| JavaScript 객체 생성 · 배열 완전 정리 (0) | 2026.07.06 |
왕진 블로그

댓글