본문 바로가기
Front-end/HTML + CSS

HTML/CSS - Animation

by devraphy 2020. 8. 30.

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

 

animation

The animation shorthand CSS property applies an animation between styles.

developer.mozilla.org

 

 

 

animate.style/

 

Animate.css

Animate.css v4 brought some breaking changes, please refer to the migration guide before updating from v3.x and under. Animate.css is a library of ready-to-use, cross-browser animations for use in your web projects. Great for emphasis, home pages, sliders,

animate.style

 

 

 

animista.net/play/basic/shadow-inset

 

Animista

Animista is a place where you can play with a collection of ready to use CSS animations, tweak them and download only those you will actually use.

animista.net

 

 

댓글