프론트엔드 공부/CSS 기초

17일차 프론트엔드 공부 - animation

프망생222 2024. 9. 22. 18:31

- 17일차 프론트엔드 공부 -

 

animation

여러 이미지를 연결해서 자연스럽게 움직이는 것처럼 보이게 만드는 기법

 

CSS을 이용해서 애니메이션을 만드는 방법

1. transition 속성 활용

2. animation 속성과 keyframe 활용



transition / animation 차이

 

transition 

특정한 이벤트를 기점으로 작동한다. (hover 등)

 

animation

시작하기 위한 이벤트가 없다.

시작, 정지, 반복까지 제어할 수 있다.



animation

@keyframes로 애니메이션을 정의하고, 정의한 애니메이션을 불러와서 제어 해주어야 한다.

즉 하나의 동작을 만들기 위해서 1개의 keyframe 1개, 애니메이션 속성 1개가 만들어야 한다.

 

transition이 사용하기 더 간편하기 때문에 애니메이션을 만들 때 주로 transition을 이용하여 만들고, transition을 통해 만들 수 없는 경우 animation과 keyframes을 사용한다.

 

keyframes

CSS 애니메이션의 시작, 중간, 끝 등의 중간상태를 정의한다. 

 

@keyframes 애니메이션 이름 {

시작 시점의 CSS

종료 시점의 CSS

}

 

ex)

@keyframes moveRight {

from {

left: 0;

  }

to {

left: 200px;

}

}

 

from 과 to 대신 진행도(%) 표기도 가능하다.



animation 관련 속성들

animation-name

animation-duration

animation-direction

animation-iteration-count

animation-timing-function

animation-delay

 

animation-name

어떠한 keyframes를 요소에 적용할 것인지 지정합니다.

animation-name: moveRight

 

animation-duration

애니메이션을 한 번 재생하는데 걸리는 시간을 설정합니다.

animation-duration: 2s

 

animation-direction

애니메이션 재생 방향을 정의 합니다. (정방향/역방향)

animation-direction: alternate / normal / reverse / alternate-reverse

normal : 정방향으로 재

reverse : 역방향으로 재생

alternate : 정방향으로 재생 (단, 정방향/역방향을 번갈아 재생)

alternate-reverse : 역방향으로 재생 (단, 역방향/정방향을 번갈아 재생)

 

animation-iteration-count

애니메이션 재생 횟수를 정의 합니다.

animation-iteration-count : infinite / 3

 

animation-timing-function

애니메이션 재생 패턴을 정의하며, transition-timing-function과 유사함

animation-timing-function : ease-in-out

 

animation-delay

애니메이션 시작을 얼마나 지연할 지 설정합니다.

animation-delay: 2s

 

animation 단축 속성

animation: name duration timing-function delay iteration-count direction

animation: moveRight 0.4s linear 1s infinite alternate

 

animation 실습

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="container">
        <div class="item">
            <span>item</span>
        </div>
    </div>
</body>
</html>

 

* {
    box-sizing: border-box;
}

.container {
    width: 100%;
    height: 104px;
    border: 2px solid red;
    position: relative;
}

.item {
    width: 100px;
    height: 100px;
    background: blue;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    animation: moveBox 2s ease-in-out infinite alternate;
    position: absolute;
}

.item span {
    color: white;
}

@keyframes moveBox {
    from {
        border-radius: 0;
        left: 0;
        background: blue;
        transform: scale(1);
    }
    to {
        border-radius: 50%;
        left: calc(100% - 100px);
        background: green;
        transform: scale(0.5);
    }
}

 

animation 실습

 

 

animation 실습