keyframes
키워드를 활용하면 시간 순으로 정밀하게 짜여진 애니메이션을 만들 수 있다. .pika { // 요소 지정 animation : 애니메이션 이름 3s ; // 2. animation 속성 지정 (이름과 시간 필수) } @keyframes 애니메이션이름 { // 1. 키프레임 블록 0% { CSS속성 : 속성값; } 50% { CSS속성 : 속성값; } 100% { CSS속성 : 속성값; } } ... <div className='pika'></div> // class가 pika인 요소
%
단위로 시간 진행 상태를 표시한다.0%
는 from
, 100%
는 to
라고 써도 된다)Ex) 회전하는 키프레임 애니메이션
@keyframes lotate { 0% { transform : rotate(0deg) } 50% { transform : rotate(180deg) } 100% { transform : rotate(360deg) } }
animation
을 속성으로 주고, 값으로 animation-name
, animation-duration
의 값을 필수로 준다.Ex) 회전하는 키프레임 애니메이션
#logo { animation: lotate 3s; // animation 속성. 값으로는 애니메이션 이름과 시간 } ... <div id='logo'></div>
animation
속성을 따로따로 지정할 수도 있다. animation
속성에 값으로 아래 속성들을 순서대로 띄어쓰기해서 쭉 나열하면 한 번에 지정할 수도 있다. @keyframes 블록
에 작성하는 애니메이션 이름
- animation 속성으로 한 번에 작성
#logo { animation : lotate; }
- 따로따로 작성
#logo { animation-name : lotate; }
0
이기 때문에 애니메이션이 재생되지 않는다. #logo { animation : lotate 3s; }
#logo { animation-name : lotate; animation-duration : 3s; }
#logo { animation : lotate 3s 3s; }
#logo { animation-name : lotate; animation-duration : 3s; animation-delay : 3s; }
전달 가능한 값
- normal : 기본 값. 재생이 끝나면 처음부터 다시 재생.
- reverse : 역방향으로 재생.
- alternate : 순방향부터 역방향을 번갈아가며 재생.
- alternate-reverse : 역방향부터 순방향을 번갈아가며 재생.
#logo { animation : lotate 3s reverse; }
#logo { animation-name : lotate; animation-duration : 3s; animation-direction : alternate; }
전달 가능한 값
- 기본값은
1
infinite
로 설정할 경우 무한반복- 소수점으로 작성할 경우 재생 도중 처음 상태로 돌아감
#logo { animation : lotate 3s infinite; }
#logo { animation-name : lotate; animation-duration : 3s; animation-iteration-count : 3; // 3번 반복 }
전달 가능한 값
running
: 기본값pause
: 애니메이션 정지
#logo { animation : lotate 3s pause; }
#logo { animation-name : lotate; animation-duration : 3s; animation-play-state : pause; }
전달 가능한 값
- linear
- ease (기본 값)
- ease-in
- ease-out
- ease-in-out
전달 가능한 값
- none : 기본 값. 재생 중이 아닌 경우 요소의 스타일을 유지.
- forwards : 재생 중이 아닌 경우 마지막 키프레임 스타일을 유지합니다.
- backwards : 재생중이 아닌 경우 첫 번째 키프레임 스타일을 유지합니다.
- both : 재생 전에는 첫 번째 키프레임 스타일을, 재생 후에는 마지막 키프레임 스타일을 유지합니다.
#logo { animation : lotate 3s infinite linear; }
@keyframes lotate { 0% { transform : rotate(0deg) } 50% { transform : rotate(180deg) } 100% { transform : rotate(360deg) } }
@keyframes lotate { 0% { transform : rotate(0deg) } 80% { transform : rotate(180deg) } 100% { transform : rotate(360deg) } }
- 애니메이션이 재생되는 3초 중 80%인 2.4초 동안 180도 회전하고, 나머지 20%인 0.6초 동안 360도까지 회전한다.
👉🏽
@keyframes
의 중간값은 애니메이션 재생 시간을 기준으로 한다!
import { keyframes } from 'styled-components';
animation-name
을 변수명으로 해서 키프레임 블록 만들기const boxMove = keyframes` 0%{ transform : rotate(0deg) }50% { transform : rotate(180deg) }100% { transform : rotate(360deg) } `;
animation-name
은 위에서 변수로 설정했으므로 ${}
를 사용해 표현한다.img { // img 요소 지정 animation: ${boxMove} 3s 0s infinite; // animation 속성 설정 }