본문 바로가기

CSS

애니메이션

1. 애니메이션 

 

트랜지션과 비슷하지만 수도 클래스를 사용하지 않고 적용할 수 있다는 점에서 차이점이 있다.

특정 지점을 변경 지점(keyframe)으로 잡아 일정한 스타일의 변화를 주게 된다.

 

 

2. @keyframes 속성 : 애니메이션 변경 지점 설정하기

@keyframes <keyfram의 이름 지정> {<선택자 from | to | 백분율> {<스타일>}}

애니메이션은 진행율에 따라 0% 부터 100%까지 지정되며 세부 지점을 따로 지정할 수 있다.

또는 from(0%) , to(100%) 로도 지정이 가능하다.

    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: blue;
            animation-name: change-bg;
            animation-duration: 3s;
        }
        @keyframes change-bg {
            0% {
                background-color: blue;
                border: 1px solid black;
            }
            100% {
                background-color: #a5d6ff;
                border: 1px solid blue;
                border-radius: 50%;
            }
        }
    </style>
</head>
<body>
    <div></div>
</body>

위의 예시는 진행율이 0% 즉 시작할 때에는 배경 색상이 파란색에 테두리가 검정색이고 형태는 사각형으로 시작한다.

하지만 애니메이션이 3초간 진행이 되면서 100% 로 향해갈 때에 배경 색상은 하늘색에 테두리는 파란색 형태는 원형으로 변형이 되고 애니메이션이 끝나면 원래의 모양으로 돌아가게 된다.  

 

 

 

3. animation-name 속성 : 애니메이션 이름 지정하기

animation-name : <키프레임 이름> | none

위의 예시에서도 사용했듯이 

애니메이션의 변경되는 사항을 제대로 지정하기 위해서는 지정할 대상에게 keyframe 을 알려줘야 한다.

자신이 어떠한 변경 지점을 가지고 애니메이션을 적용할지는 바로 이 animation-name 속성에 지정되는 keyframe 의 이름으로 알게 되는 것이다.

 

 

 

4. animation-duration 속성 : 애니메이션 실행 시간 설정하기

animation-duration : <시간>

animation-duration 은 필수적으로 작성해야 하는 속성 중 하나인데,

이를 작성하지 않으면 기본값이 0s 로 지정되어 애니메이션이 실행하지 않게 된다.

 

 

 

5.animation-direction 속성 : 애니메이션 방향 지정하기

animation-direction : normal | alternate | reverse | alternate-reverse
1️⃣ normal : 기본값으로 애니메이션 실행을 마치면 원래 스타일로 돌아간다.
2️⃣ alternate : 애니메이션 실행을 마치면 실행했던 스타일에서 원래 스타일로 되돌아간다.
3️⃣ reverse : 실행 마지막에서부터 시작하여 시작 스타일로 돌아간다.
4️⃣ alternate-reverse : 애니메이션 시작에서 마지막으로 실행하고 다시 마지막에서 시작으로 실행한다.

이 속성으로는 진행의 방향성을 조절할 수 있게 된다.

기본적인 방향성은 시작 👉 마지막이지만, 마지막 👉 시작 으로 변화를 줄 수도 있게 된다.

하지만 되돌아가는 등의 애니메이션 실행은 횟수가 2회 이상이어야 확인할 수 있기 때문에 

반드시 animation-iteration-count 속성과 함께 사용해야 한다.

 

 

6. animation-iteration-count 속성 : 반복 횟수 지정하기

animation-iteration-count : <반복 횟수> | infinite

기본값은 0으로 방향성에 있어서 단방향 진행을 하게 되기 때문에 되돌아가는 등의 진행은 반복을 해야 한다.

    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: blue;
            animation-name: change-bg;
            animation-duration: 3s;
            animation-iteration-count: infinite;
            animation-direction: alternate;
        }
        @keyframes change-bg {
            0% {
                background-color: blue;
                border: 1px solid black;
            }
            100% {
                background-color: #a5d6ff;
                border: 1px solid blue;
                border-radius: 50%;
            }
        }
    </style>
</head>
<body>
    <div></div>
</body>

이렇게 작성하게 되면 alternate 값으로 인하여 시작 👉 마지막, 마지막 👉 시작으로의 변화를 살펴볼 수 있다.

사각형에서 원형으로 원형에서 다시 사각형으로 무한히 변형된다.

 

 

 

7. animation-timing-function 속성 : 애니메이션 속도 곡선 지정하기

animation-timing-function : linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier(x, y, x, y)

애니메이션에서도 트랜디션과 마찬가지로 진행에 따른 속도를 곡선 그래프로 지정할 수 있고, 사용 방법도 동일하다.

 

📌 animation 속성 한 번에 표기하기

animation : <animation-name> | <animation-duration> | <animation-timing-function> | <animation-delay> |
                  <animation-iteration-count> | <animation-direction>

이 속성 중 duration 속성은 반드시 작성되어야 한다.

duration 속성 값의 기본값은 0 이기 때문에 지정해주지 않으면 애니메이션 효과가 진행되지 않는다.

속성에 따라 keyframe 을 따로 지정하였다면, keyframe 별로도 애니메이션 효과를 개별적으로 지정할 수 있고

구분은 쉼표로 가능하다.

    <style>
        .box {
            width: 60px;
            height: 60px;
            margin: 60px;
            background-color: aquamarine;
            animation: rotate 1.5s infinite, background 1.5s infinite alternate;
        }
        @keyframes rotate {
            from {
                transform: perspective(120px) rotateX(0deg) rotateY(0deg);
            }
            50% {
                transform: perspective(120px) rotateX(-180deg) rotateY(0deg);
            }
            to {
                transform: perspective(120px) rotateX(-180deg) rotateY(-180deg);
            }
        }
        @keyframes background {
            from {
                background-color: red;
            }
            50% {
                background-color: green;
            }
            to {
                background-color: blue;
            }
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>

 

'CSS' 카테고리의 다른 글

CSS Diner : selector 연습하기 (11 ~ 20번)  (1) 2022.10.30
CSS Diner : selector 연습하기 (1 ~ 10번)  (0) 2022.10.30
transition : 전환  (0) 2022.10.28
transform : 변형  (0) 2022.10.28
가상 클래스와 가상 요소  (0) 2022.10.26