css 애니메이션은 여러 개의 css스타일을 부드럽게 전환해준다. 그 중에서도 @keyframe
키워드를 활용하면 시간 순서대로 정밀하게 짜여진 애니메이션을 만들 수 있다.
키프레임을 활용하기 위해서는 우선 CSS로 키프레임 블록을 만들어야 한다.
@keyframes 애니메이션이름 {
0% {
/* from 이라고 작성해도 됩니다.*/
CSS속성 : 속성값;
}
50% {
/* 애니메이션 진행도에 따른 스타일을 설정합니다. */
/* 필요하다면 1부터 99까지도, 소수점까지도 모두 작성해도 됩니다.*/
CSS속성 : 속성값;
}
100% {
/* to 라고 작성해도 됩니다.*/
CSS속성 : 속성값;
}
}
해당 방법으로 회전하는 키프레임 애니메이션을 만드는 코드
@keyframes lotate {
0% {
transform : rotate(0deg)
}
50% {
transform : rotate(180deg)
}
100% {
transform : rotate(360deg)
}
}
/* 시작 시점에선 0도, 50% 시점에선 180도,
완료 시점에선 360도 회전시키는 애니메이션입니다. */
해당 키프레임 애니메이션을 적용시키고 싶은 요소에 animation 속성으로 키프레임 이름을 불러와 사용할 수 있다.
animation 에 전달해줄 수 있는 속성들은 다음과 같다.
애니메이션을 적용하고 싶은 요소에 animation 속성의 첫번째 값으로, 혹은 animation-name 이라는 속성으로 @keyframes 키워드를 사용해서 만든 애니메이션 이름을 작성해주면 된다.
#logo {
animation : lotate;
}
or
#logo {
animation-name : lotate;
}
애니메이션이 재생될 시간을 animation 속성의 두번째 값으로, 혹은 animation-duration 이라는 속성으로 시간 단위로 작성한다. 작성해주지 않을 경우 기본값이 0 이기 때문에 애니메이션이 재생되지 않는다.
#logo {
animation : lotate 3s ;
}
or
#logo {
animation-name : lotate;
animation-duration : 3s;
}
애니메이션 재생을 미룰 시간을 지정한다. 역시 animation 속성에 띄어쓰기로 구분해준 다음, 혹은 animation-delay 이라는 속성으로 시간 단위로 작성한다.
#logo {
animation : lotate 3s 3s ;
}
or
#logo {
animation-name : lotate;
animation-duration : 3s;
animation-delay : 3s;
}
애니메이션 재생 방향을 지정한다. animation 속성에 띄어쓰기로 구분해준 다음, 혹은 animation-direction 이라는 속성으로 작성해준다.
#logo {
animation : lotate 3s reverse ;
}
or
#logo {
animation-name : lotate;
animation-duration : 3s;
animation-direction : alternate;
}
전달해줄 수 있는 값은 다음과 같다.
애니메이션이 재생 상태를 설정한다. 기본 값인 running, 애니메이션을 정지시키는 pause 를 값으로 지정할 수 있으며 보통 이벤트로 애니메이션의 재생 상태를 변경할 때 사용한다.
#logo {
animation : lotate 3s pause ;
}
or
#logo {
animation-name : lotate;
animation-duration : 3s;
animation-play-state : pause ;
}
애니메이션의 진행 속도를 설정한다.
애니메이션 재생 전 후의 상태를 지정한다.
none : 기본 값. 재생중이 아닌 경우 요소의 스타일을 유지한다.
forwards : 재생중이 아닌 경우 마지막 키프레임 스타일을 유지한다.
backwards : 재생중이 아닌 경우 첫 번째 키프레임 스타일을 유지한다.
both : 재생 전에는 첫 번째 키프레임 스타일을, 재생 후에는 마지막 키프레임 스타일을 유지한다.
#logo {
**animation-name : lotate;**
/* lotate 라는 이름의 키프레임 애니메이션을 */
animation-duration : 3s;
/* 3초 동안 재생하며, */
animation-iteration-count : infinite;
/* 애니메이션을 무한 반복하고, */
animation-timing-function : linear;
/* 선형으로 재생합니다. */
}
/* 아래와 같이 일괄 작성해도 동일하게 적용됩니다. */
#logo {
animation : **lotate** 3s infinite linear;
}
3초동안 로고가 서서히 회전하는 것을 알 수 있다. 이때 중간값만 50%에서 80% 으로 바꾸게 된다면,
80%인 2.4초 동안 180도 회전하고, 나머지 20%인 0.6초 동안 360도까지 회전한다. 이 처럼 키프레임을 설정하면서 주는 중간값은 애니메이션 재생 시간을 기준으로 함을 알 수 있다.