1. Animation
- 이전 포스팅에서 언급했던 Transition과 Transformation은 특정 행동과 같은 발동 조건을 기반하여 상태의 변화를 animation으로 표현하는 방법이었다.
- 이와 다르게, animation은 아무 조건없이 계속적으로 작동되는 것을 의미한다. 그렇다면 예시를 통해서
예시 1) x축을 기준으로 360도 회전하는 animation
<style>
@keyframes coninFlip {
/* anotation + 애니메이션 이름 지정*/
/*animation 사용 첫번째 조건 - 시작과 종료지점을 정의*/
from {
transform: rotateX(0deg);
}
to {
transform: rotateX(360deg);
}
}
img {
border: 5px solid black;
border-radius: 50%;
animation: coninFlip 3s ease-in-out infinite;
}
</style>
</head>
<body>
<img src="logo.png"/>
</body>
[Animation 작성 방법 - 위의 코드를 참고하세요.]
1. @keyframes 어노테이션을 부여하고 animation이름을 정의한다.
2. animation의 시작과 끝을 정의한다.
3. 정의한 animation이 적용할 엘리먼트에 animation 속성을 정의한다. 적용할 수 있는 속성값은 아래와 같다
- 위의 코드에서 infinite이라는 부분이 timing-function을 의미하고 이는 애니메이션이 무한대로 실행되며 3초마다 한번씩 애니메이션이 실행됨을 의미한다.(애니메이션 동작 시간이 3초이기 때문)
예시 2) transition의 여러가지 속성값을 조합하여 만든 animation(코드 필독)
<style>
@keyframes coninFlip {
/* anotation + 애니메이션 이름 지정*/
/*animation 사용 첫번째 조건 - 시작과 종료지점을 정의*/
from {
transform: rotateX(0deg);
}
to {
transform: rotateX(360deg) translateX(200px);
}
}
img {
border: 5px solid black;
border-radius: 50%;
animation: coninFlip 3s ease-in-out infinite;
}
</style>
</head>
<body>
<img src="logo.png"/>
</body>
- 위의 움짤(GIF)를 보면 움직임이 부자연스럽다. 왜냐면 x축으로 200픽셀만큼 이동하게 했으나 animation이 끝남과 동시에 그림이 제자리로 돌아가기 때문이다. 자연스럽게 animation이 끝난 그 지점에서 다시 돌아가는 방식으로 만들 수는 없을까?
- 이걸 하기 위해서는 animation에 절차 또는 단계를 적용하면 된다.
예시 3) 예시 2번에서 만든 애니메이션을 자연스럽게 만드는 방법 (단계적용 / 코드 필독)
<style>
@keyframes coninFlip {
/* anotation + 애니메이션 이름 지정*/
0% {/*애니메이션 시작*/
transform: rotateX(0deg);
}
50% {/*애니메이션 중간*/
transform: rotateX(180deg) translateX(200px);
}
100% {/*애니메이션 끝*/
transform: rotateX(0deg);
}
}
img {
border: 5px solid black;
border-radius: 50%;
animation: coninFlip 3s ease-in-out infinite;
}
</style>
</head>
<body>
<img src="logo.png"/>
</body>
- 위의 코드에서 보이는 것과 같이 from/to를 사용하지 않고 0%/50%/100%를 이용하여 애니메이션의 진행 단계를 정의한다. 이렇게 설정해 놓으면 0%에서 100%로 갔다가 다시 100%에서 0%로 역순으로 transition/transform 요소들이 작동되는 것이다.
- animation의 단계는 개발자가 원하는 만큼 나눌 수 있다. 간격을 좁게, 여러 단계를 만들수록 다이나믹한 animation을 만들 수 있다. 단계가 많아질수록 적용할 수 있는 transform/transition 속성의 종류가 다양해지기 때문이다.
예시 3) 25%간격으로 애니메이션 만들기(단계적용 / 코드 필독)
<style>
@keyframes coninFlip {
/* anotation + 애니메이션 이름 지정*/
0% {
transform: rotateX(180deg) translateY(-300px);
border: 5px solid black;
}
25% {
transform: translateX(300px);
border: 20px solid black;
}
50% {
transform: rotateX(180deg);
border-color: tomato;
}
75% {
transform: translateX(300px) translateY(300px);
border: 20px solid black;
}
100% {
transform: rotateX(180deg) translateY(-300px);
border: 5px solid black;
}
}
img {
border: 5px solid black;
margin-top: 500px;
margin-left: 200px;
border-radius: 50%;
animation: coninFlip 4s ease-in-out infinite;
}
</style>
</head>
<body>
<img src="logo.png"
</body>
- 위의 움짤(GIF)처럼 단순히 transition과 transform 이외에 상태를 변화시키는 속성들을 이용해서도 animation을 만들 수 있다. 더욱 다양하고 화려한 animation을 사용해보고 싶다면 아래의 링크에 들어가서 찾아보길 바란다.
developer.mozilla.org/en-US/docs/Web/CSS/animation
animista.net/play/basic/shadow-inset
'Front-end > HTML + CSS' 카테고리의 다른 글
HTML/CSS - 꿀팁(Tips) (0) | 2020.09.11 |
---|---|
HTML/CSS - Media Query(반응형 웹사이트 만들기) (0) | 2020.08.30 |
HTML/CSS - Transition & Transformation (0) | 2020.08.30 |
HTML/CSS - CSS Variable (0) | 2020.08.27 |
HTML/CSS - State & 속성 선택자(selector) (0) | 2020.08.26 |
댓글