[CSS] 트랜지션 (transition)


Study/Javascript, Jquery, CSS  2020. 2. 18. 00:11

안녕하세요. 명월입니다.


이 글은 CSS에서 트랜지션(transition)에 대한 글입니다.

CSS의 트랜지션(transition)은 속성을 변경할 때 변경 속도를 조절하고, 변경 주기를 설정하는 것이라고 생각합니다.

예를 들어, "div" 태그의 배경색을 노란색으로 설정하고 마우스를 태그 위에 올리면(hover) 녹색으로 설정한다고 했을 때, 실제로는 변경 속도나 주기가 없이 바로 바뀌게 될 것입니다.

마우스를 위에 올려 주세요.

하지만 트랜지션(transition)을 설정하게 되면 순식간에 바뀌지 않고 천천히 바뀌게 될 것입니다.

마우스를 위에 올려 주세요.
<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <div>마우스를 위에 올려 주세요.</div>
  </body>
</html>
div {
  /* div 태그 배경색 설정이 노란색으로 설정 */
  background-color: yellow;
  /* transition의 설정은 배경색 설정으로 한다. */
  transition-property: background-color;
  /* transition의 변경 완료 시간 2초, 노란색에서 녹색으로 변경되는데 시간 */
  transition-duration: 2s;
  /* 변하는 속도가 점점 빨라지는 패턴 */
  transition-timing-function: ease-out;
  /* 0.5초 뒤에 transition이 변경되는 딜레이 시간 */
  transition-delay: 50ms  
}
div:hover {
  /* div 태그 배경색 설정이 녹색으로 설정 */
  background-color: green;
  /* transition의 설정은 배경색 설정, 녹색에서 노란색으로 2초, 점점 빨라지는 패턴으로 딜레이는 0.5초 뒤에 실행하는 설정 */
  transition: background-color 2s ease-out 50ms;
}

트랜지션(transition)은 총 4가지 속성이 있습니다. 4가지 속성이라고 해도 delay 속성 이외에 3가지 속성을 설정을 해야 transition이 설정이 됩니다.

transition의 shorthand 설정은 style property, 변경 시간, 패턴, 딜레이 순으로 설정 됩니다.


transition-property은 css style 이름입니다. 위 예에서는 background-color를 설정했는데, width나 position, left 등을 많이 설정합니다.

transition-duration은 변환 시간입니다. 위 예제는 노란색에서 녹색으로 녹색으로 노란색으로 변환하는 시간 설정을 2초로 했습니다.

transition-timing-function는 변환 유형입니다.

ease-out는 처음에는 느리고 빠르게 변환하는 타입, ease-in는 처음에는 빠르고 느려지게 변환하는 타입, ease-in-out은 빠르고 느려지고 다시 빨리지는 타입, linear는 일정한 속도로 변환하는 타입입니다.

cubic-bezier (n, n, n, n)은 직접 변환 속도를 지정하는 유형입니다.

참조 - https://cubic-bezier.com/


참고로 위에 div와 div:hover에 트랜지션(transition)이 걸려 있습니다. div에 있는 트랜지션(transition)는 div:hover에서 돌아올 때의 스타일이고 div:hover에 있는 트랜지션(transition)는 div에서 div:hover로 적용될 때 사용되는 스타일입니다.

<!DOCTYPE html>
<html>
  <head>
    <style>
      textarea {
        /* 너비는 100%이다. */
        width: 100%;
        /* 높이는 50px로 설정한다.*/
        height: 50px;
        /* textarea: focus -> textarea로 바뀔 때 적용되는 transition */
        /* 트랜지션 프로퍼티 : height */
        transition-property: height;
        /* 트랜지션 총 걸리는 시간 : 1초 (높이가 돌아올 때)*/
        transition-duration: 1s;
        /* 초움애는 느리고 빠르게 변하는 타입 */
        transition-timing-function: ease-out;
      }
      /* textarea가 선택이 되면 설정되는 스타일이다. */
      textarea: focus {
        /* 높이는 200px으로 설정한다. */
        height: 200px;
        /* textarea -> textarea: focus로 바뀔 때 적용되는 transition */
        /* 트랜지션 프로퍼티 : height */
        transition-property: height;
        /* 트랜지션 총 걸리는 시간 : 5초 */
        transition-duration: 5s;
        /* 스타일은 빠르고 느려지다가 다시 빨라지는 타입 */
        transition-timing-function: ease-in-out;
      }
    </style>
  </head>
  <body>
    <textarea placeholder="please input text!"></textarea>
  </body>
</html>

실제 웹 서비스 상에서 부드러운 액션 동작과 광고등을 강조하는 방법으로 자주 사용하는 스타일입니다.

하지만 반대로 웹 페이지에 트랜지션(transition)이 너무 많으면 집중도를 떨어지는 역효과도 있습니다.


여기까지 CSS에서 트랜지션(transition)에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.