CSS Animation (Transition & Keyframes)

2020. 10. 22. 21:12웹 프론트엔드 개발 노하우/퍼블리싱(HTML, CSS) 노하우

[ transform ]

 

transform 속성 : 해당 요소의 위치나 크기를 바꾸는 속성으로, 값으로 translate(200px, 400px) 혹은 translateX(200px), translateY(400px) 있습니다.

 

혹은 해당 요소의 크기를 바꾸는 속성으로, 마찬가지로 scale(0.5, 2), scaleX(0.5), scaleY(2) 있습니다.

 

혹은 요소를 회전시키기 위해 3차원 에서 해당 요소를 가로축, 세로축에서 회전킨다 rotate(60deg, 90deg), rotateX(60deg), rotateY(90deg), 그리고 요소를 시계방향으로 회전시키는 rotateZ(180deg) 있다(마이너스값을 주면 반시계 방향으로 회전).

 

transform 일어나는 기준점을 변경하고 싶다면

 

transform-origin: x y

 

이런 식으로 적용 해주면 됩니다.

 

 

 

[ transition ]

 

transition 속성은 해당 요소가 다른 상태로 가게 , 예를들어 :hover 상태로 가게 , 기존의 css 속성과 다른 점이 있다면 자동으로 다른 속성이 변화하는 과정이 서서히 바뀌는 애니메이션 효과를 주는 것입ㄴ다.

 

그럴

 

transition: s

 

이런 식으로 주면 되지만, 트랜지션이 특정 속성으로 한정짓고 싶다면

 

transition: 속성명 s

 

트랜지션이 동작을 시작하기 전까지의 딜레이를 설정하고 싶다면

 

transition: 속성명 s 딜레이s

 

여러 트랜지션 대상 속성을 지정하고 싶으면

 

transition: 속성명 s 딜레이s 속성명2 s 딜레이s

 

트랜지션 타입을 결정하고 싶다면, 딜레이 옆에 붙여주면 됩니다.

 

transition: 속성명 s 딜레이s 트랜지션 타입

 

 

 

 

[ keyframes ]

 

나만의 애니메이션을 만들고 싶다면 keyframes 적극 활용할 있습니다.

 

@keyframes 이름 {

	from {
		대상 속성 : 속성 초기 값
	}

	to {
		대상 속성 : 변화된 속성 값
	}
    
}

 

혹은 진행도에 따른 속성 변화를 세밀하게 컨트롤하고 싶다면

 

@keyframes 이름 {

	0% {대상 속성 : 속성값}

	50% {대상 속성 : 속성값}

	100% {대상 속성 : 속성값}

}

 

통해 간단하게 만들 있고, 애니메이션을 등록하고 싶은 요소에 css 속성으로

 

animation-name: 이름

animation-duration: s

 

등록할 있습니다.

 

애니메이션은 페이지 로드와 함께 바로 일어나며, 애니메이션이 끝나면 초기 상태로 돌아갑니다. 하지만 초기상태로 돌이키지 않고, 애니메이션이 끝났을 때의 상태 그대로 두고 싶다면

 

animation-fill-mode: forwards;

 

쓰면된다. 하지만 애니메이션에서 설정한 요소의 초기상태와 실제 요소의 상태가 다르다면, 애니메이션이 수행될 요소가 갑작스럽게 움직이는 효과가 있을 것입니다. 이를 방지하고 싶다면

 

animation-fill-mode: backwards;

 

쓰면 되고, forwards backwards 동시에 쓰고 싶다면

 

animation-fill-mode: both

 

쓰면 됩니다.

 

애니메이션이 수행되기까지 딜레이를 넣고 싶다면

 

animation-delay: s

 

넣으면 됩니다.

 

애니메이션이 여러 수행되도록 만들고 싶다면

 

animation-iteration-count: 횟수;

 

넣으면 됩니다.

 

계속 실행시키고 싶다면

 

animation-iteration-count: infinite;

 

넣으면 된다.

 

애니메이션이 from 에서 to 아니라

 

to 에서 from으로 진행되도록 하고 싶다면

 

animation-direction: reverse;

 

줄수 있다.

 

from 에서 to, 다음에는 to에서 from 으로 가도록 하고 싶다면

 

animation-direction: alternate-reverse;

 

주면 된다.

 

애니메이션의 진행도에 따라 다른 애니메이션을 적용시키고 싶다면

 

animation-timing-function: 애니메이션 타입;

 

주면 된다. 애니메이션 타입으로는

 

linear

ease-in

ease-in-out

 

등을 있는데,

 

자신만의 애니메이션 타입을 만들어 넣을 있습니다.

 

animation-timing-function: cubic-bezier( 0.x, 0.x, 0.x, 0.x )

 

주면되는데,

 

이걸 일반인이 전문적으로 다루는 것은 힘드므로 cubic-bezier.com 에서 나만의 타입을 만들어낼 있으니 참고해 보시기 바랍니다.

 

지금까지는 너무 많은 속성을 길게 나열해놨는데, 이를 한번에 넣을 있는 shorthand 제공됩니다.

 

animation: 이름 듀레이션 타이밍펑션 딜레이 이터레이션카운트 디렉션;

 

으로 주면 됩니다.

 

애니메이션을 서로 연결시킬 수도 있습니다.

 

애니메이션을 따로 만들어두고, shorthand에서

 

animation: 이름 듀레이션 타이밍펑션 딜레이 이터레이션카운트 디렉션 이름 듀레이션 타이밍펑션 딜레이 이터레이션카운트 디렉션;

 

이런식으로 반복시키면 됩니다.

 

애니메이션이 끝나면 다른 애니메이션이 수행되는 것이 아니라, 둘이 같이 진행되므로 주의해야 합니다. 그런건 딜레이를 조정해서 구현할 있습니다.