React와 함께 사용하는 CSS 키프레임 애니메이션
컴포넌트 상태와 이벤트에 따라 @keyframes 애니메이션을 동적으로 적용하고 제거합니다.
React와 함께 사용하는 CSS 키프레임 애니메이션은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
@keyframes 정의하기
@keyframes 규칙은 시간 순서상의 지점에서 속성 값을 지정하여 여러 단계의 애니메이션을 설명합니다. from/to를 사용하거나 0%, 50%, 100%와 같은 백분율을 사용할 수 있습니다.
전환과 달리 키프레임은 각 단계마다 상태를 변경하지 않아도 스스로 실행되는 복잡한 다단계 움직임을 설명할 수 있습니다.
애니메이션 단축 표기
animation 속성을 사용하여 키프레임 집합을 적용합니다. animation: slideIn 400ms ease forwards처럼 작성하며, 이름과 지속 시간, 시간 조절 함수, 채우기 모드를 한데 묶습니다.
forwards 채우기 모드를 사용하면 애니메이션이 끝난 뒤에도 요소가 마지막 키프레임의 값을 유지하므로 시작 상태로 튀어 돌아가지 않습니다.
상태로 애니메이션 클래스 적용하기
리액트에서는 일반적으로 상태가 참이 될 때 animation 선언을 포함한 클래스를 추가합니다. 예를 들어 is-entering을 추가하면 요소가 마운트되는 순간이나 플래그가 전환되는 순간 키프레임이 시작됩니다.
이렇게 하면 애니메이션 로직은 CSS에 두고, 리액트는 클래스를 언제 연결할지만 결정할 수 있습니다.
애니메이션 채우기 모드
animation-fill-mode는 애니메이션이 실행되기 전과 후에 어떤 스타일을 적용할지 결정합니다. forwards는 마지막 키프레임을 유지하고, backwards는 지연 시간 동안 첫 번째 키프레임을 적용하며, both는 두 동작을 모두 수행합니다.
forwards가 없으면 페이드인 상태로 애니메이션되는 요소가 애니메이션이 끝나는 순간 다시 보이지 않는 상태로 튀어 돌아갑니다.
애니메이션 방향 교대 설정
animation-direction: alternate는 반복할 때마다 애니메이션을 정방향으로 재생한 뒤 역방향으로 재생합니다. animation-iteration-count: infinite와 함께 사용하면 맥박이 뛰거나 숨을 쉬는 듯한 부드러운 왕복 효과를 만들 수 있습니다.
로딩 표시기나 은은하게 시선을 끄는 움직임에 유용합니다.
animation-play-state로 일시 정지하기
animation-play-state는 running 또는 paused일 수 있습니다. 예를 들어 클래스를 전환하여 마우스를 올렸을 때 흐르는 텍스트 애니메이션을 일시 중지하는 식으로 리액트 상태에서 제어할 수 있습니다.
애니메이션을 초기화하는 대신 일시 중지하므로, 정확히 중단된 지점부터 다시 시작됩니다.
키 속성을 변경하여 다시 실행하기
키프레임 애니메이션은 클래스를 처음 적용할 때 한 번만 재생되며, 같은 클래스를 다시 추가해도 재시작되지 않습니다. 가장 깔끔한 리액트 방법은 요소의 key를 변경하여 리액트가 새로운 노드를 다시 마운트하게 만드는 것입니다. 그러면 애니메이션이 처음부터 다시 재생됩니다.
예를 들어 토스트 알림에 key={count}를 지정하면 count가 증가할 때마다 토스트 알림이 다시 마운트됩니다.
prefers-reduced-motion 설정 존중하기
일부 사용자는 편안함이나 접근성을 위해 OS에서 모션 감소를 활성화합니다. 중요하지 않은 애니메이션을 @media (prefers-reduced-motion: reduce)로 감싸고, 그 안에서 애니메이션을 비활성화하거나 짧게 줄이십시오.
이 설정을 존중하면 인터페이스가 더 많은 사용자를 포용하고 불편함을 유발하는 일을 피할 수 있습니다.
IntersectionObserver로 스크롤 시 실행하기
요소가 뷰포트에 들어올 때 애니메이션을 실행하려면 useEffect에서 IntersectionObserver를 사용하십시오. 관찰 대상 항목이 표시되면 상태를 설정하고, 그러면 애니메이션 클래스가 추가됩니다.
이렇게 하면 매 프레임마다 실행되는 무거운 스크롤 리스너 없이 스크롤 시 나타나는 효과를 만들 수 있습니다.
animation-delay로 순서 조정하기
animation-delay는 각 키프레임 애니메이션이 시작되는 시점을 엇갈리게 합니다. 항목 목록에 점점 증가하는 지연 시간을 지정하면 안무처럼 순서대로 애니메이션이 실행됩니다.
style={{ animationDelay: i * 80 + 'ms' }}를 사용하면 리액트에서 항목별 지연 시간을 계산할 수 있습니다.
키프레임과 전환 비교하기
상호작용으로 발생하는 간단한 두 상태의 변화에는 전환을 사용하고, 여러 단계의 움직임이나 반복, 상태 전환과 독립적으로 실행되는 애니메이션이 필요할 때는 키프레임을 사용하십시오.
둘 다 순수한 CSS이므로 리액트는 클래스가 언제 연결될지만 결정하고, 프레임 처리는 브라우저가 담당합니다.
빠른 확인
키프레임 동작에 대한 이해도를 확인해 보십시오.
복습
@keyframes를 정의하고, animation 단축 속성으로 적용하며, 채우기 모드와 방향을 제어하고, 애니메이션을 일시 중지하거나 다시 실행하며, IntersectionObserver로 스크롤 시 요소를 나타내는 방법을 배웠습니다.
접근성을 고려한 모션을 위해 prefers-reduced-motion을 존중하는 방법도 살펴보았습니다.
자주 묻는 질문
“React와 함께 사용하는 CSS 키프레임 애니메이션” 강의는 무료인가요?
네 — “React와 함께 사용하는 CSS 키프레임 애니메이션” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“React와 함께 사용하는 CSS 키프레임 애니메이션”에서 뭘 배우나요?
컴포넌트 상태와 이벤트에 따라 @keyframes 애니메이션을 동적으로 적용하고 제거합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
React Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“React와 함께 사용하는 CSS 키프레임 애니메이션” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- React 상태 변경과 CSS 전환
- React와 함께 사용하는 CSS 키프레임 애니메이션
- 애니메이션 전 측정을 위한 useLayoutEffect
- 라이브러리 없이 진입 및 종료 애니메이션 구현하기