일정 시간에 걸쳐 css의 속성값을 변화시키는 효과
transition
- 효과과 일정한 시간(duration)에 걸쳐 일어난다.
- 스스로 작동할 수 없기 때문에 onClick 함수나 hover와 함께 쓰인다.
- element 상태 변화에 사용하기 좋다.
animation
- transition에 비해 훨씬 구현할 수 있는 요소가 다양하다.
- 이벤트 없이 스스로 시작, 정지, 반복을 제어할 수 있다.
- @keyframes으로 이루어졌다.
@media (prefers-reduced-motion: no-preference) { .App-logo { animation: App-logo-spin infinite 20s linear; } }
App-logo-spin
keyframes 이름으로 여기서 설정한 keyframes대로 동작
infinite
무한정 돌아가게 하는 속성
20s
duration으로 해당 시간만큼 애니메이션을 지속
linear
애니메이션이 끊기지 않고 자연스럽게 이어지도록 하는 속성
React 파일을 생성하면 자동으로 생성되는 css 기본값이다.
현재는 속성이 한 줄에 축약돼서 적혀있지만 animation-name
, animation-timing-function
, animation-duration
, animation-delay
등으로 각각 따로 적을 수도 있다.
animation에서 사용하는 속성 혹은 animation에 주는 규칙. 특정한 구간에서 특정한 효과를 적용하는 기능이다. 영상편집시 사용하는 키프레임과 비슷한 개념이라고 생각하자.
@keyframes App-logo-spin {
from { /* 시작 지점 */
transform: rotate(0deg);
}
to { /* 끝나는 지점 */
transform: rotate(360deg);
@keyframes App-logo-spin {
0% {
transform: rotate(0deg);
}
50% {
transform: rotate(240deg);
}
100% {
transform: rotate(360deg);
}
}
시작 지점과 끝나는 지점은 from
과 to
로 혹은 %
로 설정할 수 있다. %
의 경우 세밀한 표현이 가능하다.
import styled, {keyframes} from 'styled-components';
styled-componets는 keyframes를 제공하기 때문에 패키지 설치 후 import 해주기만 하면 된다. 속성은 css와 똑같지만 사용법에서 약간의 차이가 있다.
const boxAnimation = keyframes`
0% {
left: 20px;
background: red;
}
16.6666667% {
left: 420px;
background: orange;
}
33.3333333% {
left: 20px;
background: yellow;
}
50% {
left: 420px;
background: green;
}
66.6666667% {
left: 20px;
background: blue;
}
83.3333333% {
left: 420px;
background: navy;
}
100% {
left: 20px;
background: purple;
}
`;
const Box = styled.div`
width: 100px;
height: 100px;
background: red;
border-radius: 0%;
position: absolute;
top: 20px;
left: 20px;
animation: ${boxAnimation} 3s 0s infinite linear alternate;
`;
animation
속성에서 ${변수}
로 사용할 수 있다.