CSS transition 속성: 부드러운 애니메이션을 만드는 효과

포스트 썸네일 이미지

지난 포스트에서 요소를 변형시키는 transform을 배웠다.

이번에는 그 변화의 과정을 부드러운 움직임으로 바꿔주는 transition 속성을 정리해 보겠다.




이전 포스트




생활코딩 CSS 수업 영상: transition


그동안 중간에 잠깐씩 등장했던 transition 속성을 드디어 제대로 다루는 영상이다.

transition은 CSS 속성값이 변할 때 그 변화를 일정한 시간 동안 부드럽게 이어주는 애니메이션 효과다.

마우스를 클릭하거나 올리는 등의 이벤트가 발생할 때, 결과값이 즉각적으로 나타나지 않고 눈에 보이는 '과정'을 만들어주는 역할을 하는 것이다.





<!DOCTYPE html>
<html>
<head>
    <style>
        a {
            font-size: 3rem;
            display: inline-block;
            /* transition-property: all;
            transition-duration: 0.5s; */
            transition: all 0.5s;
        }
        a:active {
            transform: translate(20px, 20px);
            font-size: 2rem;
        }
    </style>
</head>
<body>
    <a href="#">Click</a>
</body>
</html>

위의 생활코딩 수업 영상에서 사용한 코드를 약간 수정했다.


  • display: inline-block;: 원래 <a> 태그는 inline 요소다. inline 요소는 transform(이동, 회전 등) 속성이 제대로 적용되지 않는 특성이 있다. 요소를 inline-block으로 바꿔줌으로써 글자처럼 한 줄에 있으면서도, 동시에 박스 모델의 성질을 갖게 하여 transform 애니메이션이 정상적으로 작동하도록 만든다.
  • transition-property: all;: 애니메이션을 적용할 대상을 정한다. all은 배경색, 크기, 위치 등 변화가 일어나는 모든 속성에 애니메이션을 적용하겠다는 뜻이다.
  • transition-duration: 0.5s;: 애니메이션이 완성되기까지 걸리는 시간이다. 0.5s는 0.5초를 의미하며, 이 시간 동안 부드러운 변화가 일어난다.
  • transition: all 0.5s;: 주석 처리된 여러 줄의 transition 속성을 한 줄로 합쳐서 쓸 수 있다. 코드가 훨씬 간결해진다.


transition 축약 속성 작성법의 기본 순서는 다음과 같다.


transition: [속성] [시간] [타이밍 함수] [지연 시간];

여기서 '타이밍 함수'와 '지연 시간'은 무엇인지 다음 영상에서 알아보자.





지연 시간Delay은 이벤트가 발생한 후 애니메이션이 실제로 시작되기까지 기다리는 시간이다.

예를 들어 transition-delay: 1s;라고 설정하면, 마우스를 올리거나 클릭한 직후가 아니라 정확히 1초가 지난 뒤부터 움직임이 시작된다.

여러 요소가 순차적으로 나타나는 계단식 효과(Stagger effect)를 만들 때 아주 유용하게 사용된다.


타이밍 함수Timing Function는 애니메이션이 재생되는 속도의 리듬을 결정한다.

처음부터 끝까지 일정한 속도로 움직일지(linear), 시작은 느리지만 끝은 빠르게 움직일지(ease-in) 등을 설정하여 움직임을 더 자연스럽고 생동감 있게 만든다.

cubic-bezier를 사용하면 사용자만의 독특한 가속도를 직접 설계할 수도 있다.




<!DOCTYPE html>
<html>
<head>
    <style>
        body {
            background-color: black;
            transition:all 1s;
        }
        div {
            background-color: black;
            color: white;
            padding: 10px;
            width: 100px;
            height: 50px;
            transition: all 500ms cubic-bezier(0.680, -0.550, 0.265, 1.550);
        }
        div:hover {
            height: 400px;
        }
    </style>
</head>
<body onload="document.querySelector('body').style.backgroundColor='white';">
    <div>TRANSITION</div>
</body>
</html>

영상 속의 복잡한 코드가 지금은 이렇게 짧아졌다.

이제 모든 최신 브라우저에서 CSS transition을 사용할 수 있게 되어서 -webkit-, -moz-, -o- 같은 것이 필요 없기 때문이다.





수업 영상에서 소개한 웹사이트의 링크다.




<body onload="document.querySelector('body').style.backgroundColor='white';">

자바스크립트JavaScript 코드이기 때문에 설명은 생략하려고 했는데, 짧고 정리하고 끝내겠다.

이 코드는 "웹 페이지 로딩이 끝나자마자 배경색을 흰색으로 바꿔라"라는 명령을 담은 자바스크립트 코드다.


  • onload: 웹 페이지에 필요한 모든 파일(이미지, 스크립트 등)이 다 불러와졌을 때 실행하라는 이벤트다.
  • document.querySelector('body'): 현재 문서에서 <body> 태그를 찾아내라는 뜻이다.
  • .style.backgroundColor='white': 찾아낸 body의 배경색 스타일을 직접 'white'로 수정한다.


요약하자면, HTML이 처음 로딩될 때 CSS가 적용되지 않은 상태이거나 다른 색이었다 하더라도, 로딩 완료 직후에 강제로 배경을 흰색으로 덮어버리는 역할을 한다.

이 글이 도움이 됐거나 유익했다면 스크롤을 조금만 더 내려서 댓글을 남겨주세요. (비로그인도 가능합니다!)
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊

지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.

댓글 쓰기

0 Comments

문의하기 양식