transition은 user의 action(ex. hover) 이 있어야 효과를 보는 것이지만 animation은 요소가 계속 변할 수 있는 하나의 세트를 만들수있다 (다수의 스타일 변화를 자동으로 재생될 수 있게 해준다 )
ex) keyframs 세트로 작성된 예시
.cylon_eye { background-color: red; background-image: linear-gradient(to right, rgba(0, 0, 0, .9) 25%, rgba(0, 0, 0, .1) 50%, rgba(0, 0, 0, .9) 75%); color: white; height: 100%; width: 20%; -webkit-animation: 4s linear 0s infinite alternate move_eye; animation: 4s linear 0s infinite alternate move_eye; }
아래 처럼 작성된 move eye라는 keyframs를 불러와서 사용하는 것이다
@-webkit-keyframes move_eye { from { margin-left: -20%; } to { margin-left: 100%; } } @keyframes move_eye { from { margin-left: -20%; } to { margin-left: 100%; } }
개발자가 애니메이션 중간중간 특정 지점들을 거칠 수 있는 프레임들을 설정함으로써 애니메이션의 중간 절차를 제어할 수 있게 한다
브라우저가 자동으로 애니메이션을 처리하는 것 보다 더 세밀하게 중간 동작을 제어
@keyframes 라는 키워드를 사용하여 작성하면된다
/*두가지 만 적용 했을 때 예시*/
/* @keyframes +이름 */
@keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
여기 top (en-US) 속성은 0%, 30%, 100% 키 프레임을 이용하여 애니메이션 됩니다. left (en-US) 속성은 0%, 68%, 100% 키 프레임을 사용합니다.
@keyframes identifier {
0% { top: 0; left: 0; } /* 0 , 0으로시작해서 */
30% { top: 50px; } /*3초에는 이 동작*/
68%, 72% { left: 50px; }/*6.8초 그리고 7.2초에는 이동작*/
100% { top: 100px; left: 100%; } /*끝날 때 동작*/
}
미리 작성해 놓은 keyframs 이름을 작성해주면된다 .
name 대소문자를 구분한다 , 0~9 , a-z ,_, - 만 섞어서 사용이 가능하다
global로 적용되어있는 값들을 이름으로 사용해서는 안된다
/* Global values */ animation-name: initial; animation-name: inherit; animation-name: revert; animation-name: unset;
animation-name: slide; /사용자가 지정해둔 slide 라는 keyframs/
몇 동안에 재생되서 동작할건지를 정의하는 것
계속 반복적으로 재생할 수 있기 때문에 keyframs 하나를 한 사이클로 본다
delay 는 음수값을 허용하지만 duration은 0 이상의 양수 시간을 작성해줘야한다
/* Single animation */
animation-duration: 6s;
animation-duration: 120ms;
/* Multiple animations */
animation-duration: 1.64s, 15.22s;
animation-duration: 10s, 35s, 230ms;
/* Single animation */
animation-delay: 3s;
animation-delay: 0s;
animation-delay: -1500ms;
/* Multiple animations */
animation-delay: 2.1s, 480ms;
양수 값은 지정된 시간이 경과한 후 애니메이션이 시작되어야 함을 의미 기본값이 0인 애니메이션이 적용되는 즉시 시작해야함을 의미
만약 음수 -1s 로 음수 값을 지정하면 애니메이션이 즉시 시작되지만 재생되는 시점이 애니메이션 시퀀스의 1초 부터 시작하게된다
🚨 여러 value들과 동작하는 모습까지 확인 가능!
https://developer.mozilla.org/en-US/docs/Web/CSS/animation-timing-function
animation-direction : alternate-reverse;
noremal : 애니메이션 사이클마다 정방향으로 재생 순환할 때 마다 시작상태로 설정 다시 시작 이게 기본값이다
reverse : 매 사이클마다 역방향으로 재생
alternate : 매 사이클 마다 각 주기의 방향을 뒤집고 첫 번째 반복은 정방향으로 진행
alternate-reverse : 매 사이클마다 각 주기의 방향을 뒤집으며, 첫번째 반복은 역방향으로 진행
animation-play-state : paused;
running : 재생되고 있는 상태가 된다
paused : 애니메이션이 정지되는 상태
none : keyframs 에 적용한 스타일 말고 자기가 원래 가지고 있는 스타일만 적용하라
forwards : keyframs 실행된 마지막 모습으로 유지해라
backwards : 지연시간일때 keyframs들을 가지고 미리 준비해라
👌 여기서 동작을 한 번 비교해보자
https://developer.mozilla.org/ko/docs/Web/CSS/animation-fill-mode
- animation-name (en-US): none
- animation-duration: 0s
- animation-timing-function (en-US): ease
- animation-delay: 0s
- animation-iteration-count (en-US): 1
- animation-direction: normal
- animation-fill-mode: none
- animation-play-state (en-US): running
/* @keyframes duration | timing-function | delay |
iteration-count | direction | fill-mode | play-state | name */
animation: 3s ease-in 1s 2 reverse both paused slidein;
/* @keyframes duration | timing-function | delay | name */
animation: 3s linear 1s slidein;
/* @keyframes duration | name */
animation: 3s slidein;