본문 바로가기
HTML/CSS

[HTML/CSS] CSS transition 속성 transition-timing-function

by teamnova 2024. 10. 22.
728x90

안녕하세요, 

 

오늘은 CSS에서 간단한 애니메이션 효과를 적용할 수 있는 transition 의 속성 중 하나인 transition-timing-function에 대해 알아보고자 합니다. 

 

transition은 일정 시간에 걸쳐 변화가 부드럽게 일어나도록 합니다. 

 

transition-timing-function은 이러한 변화가 일어나는 속도를 정의하는 데 사용됩니다. 애니메이션의 시작, 중간, 끝의 속도가 어떻게 변할 지 설정할 수 있습니다.

  • ease  : 애니메이션이 느리게 시작해서 중간에 빠르게 진행되며, 다시 느리게 끝남
  • linear : 애니메이션이 일정한 속도로 진행됩니다.
  • ease-in : 애니메이션이 천천히 시작되고, 끝날 때는 빨라짐
  • ease-out : 애니메이션이 빠르게 시작하고, 끝날 때는 천천히 마무리됨
  • ease-in-out : 애니메이션이 천천히 시작하고, 중간에 빨라졌다가 끝날 때는 다시 천천히 끝님
  • cubic-bezier( x1, y1, x2, y2 ) : 사용자가 정의하는 속도를 만들 때 사용
    - x값은 시간을 의미하고, x1과 x2는 0에서 1 사이의 값을 가짐
    - x1은 애니메이션이 처음 시작하는 시간에 대한 제어점을, x2는 애니메이션이 중간 시간에서 끝날 때까지의 시간을 제어함
    - y 값은 애니메이션의 진행 정도를 의미함
    - y1과 y2는 0보다 작거나 1보다 클 수도 있음
    - y1은 애니메이션이 처음 시작할 때의 속도, y2는 애니메이션이 끝날 때의 속도를 결정함
    - y 값이 높으면 더 빠르게 진행되고, 낮으면 더 느리게 진행됨
  • steps( n, direction )
  • 애니메이션을 특정 단계 수로 나누어 진행하는 방식입니다.
  • n은 단계 수를 의미하며, direction은 단계가 시작하는 방식입니다.
    direction : start, end 가 값으로 설정될 수 있음
    - start : 각 단계가 시작할 때 값이 변경됨
    - end: 각 단계가 끝날 때 값이 변경됨
  • initial : transition-timing-function 속성의 기본값(ease)으로 설정됨
  • inherit : 부모 요소로부터 transition-timing-function 값을 상속받음

위의 속성값들을 활용한 예제입니다. 

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>transition-timin-function예제</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      padding: 20px;
    }
    .container {
      display: flex;
      flex-direction: column;
      align-items: flex-start;
    }
    .bar {
      width: 100px;
      height: 40px;
      margin: 10px;
      background-color: #d5fed6;
      transition: width 2s;
    }

    .bar:hover {/*마우스를 바에 올릴 경우, 바 길이 변경*/
      width: 700px;
    }

    .ease {
      transition-timing-function: ease;
    }

    .linear {
      transition-timing-function: linear;
    }

    .ease-in {
      transition-timing-function: ease-in;
    }

    .ease-out {
      transition-timing-function: ease-out;
    }

    .ease-in-out {
      transition-timing-function: ease-in-out;
    }

    .cubic-bezier {
      transition-timing-function: cubic-bezier(0.75, 0.1, 0.25, 1.5);
    }

    .steps {
      transition-timing-function: steps(4, end);
    }

  </style>
</head>
<body>


  <div class="container">
    <div class="bar ease">ease</div>
    <div class="bar linear">linear</div>
    <div class="bar ease-in">ease-in</div>
    <div class="bar ease-out">ease-out</div>
    <div class="bar ease-in-out">ease-in-out</div>
    <div class="bar cubic-bezier">cubic-bezier</div>
    <div class="bar steps">steps</div>

  </div>

</body>
</html>

 

시연 영상입니다.