바운스(Bounce) 애니메이션 효과는 요소가 표면에 닿은 후 빠르게 위로 튀어 오르거나 뒤로 밀려나는 듯한 움직임을 표현하는 CSS 애니메이션 기법입니다. 버튼, 아이콘, 로고 등 다양한 UI 요소에 활용하면 페이지에 생동감을 더할 수 있습니다.
바운스 애니메이션의 원리
CSS의 @keyframes 규칙을 사용하면 애니메이션의 시간 흐름에 따라 요소의 위치를 단계적으로 제어할 수 있습니다. 이 예제에서는 전체 구간 중 0%, 20%, 50%, 80%, 100% 지점에서는 요소가 원래 위치에 머무르고, 40% 지점에서는 위로 30px, 60% 지점에서는 위로 15px 이동시킵니다. 이렇게 하면 마치 공이 바닥에 부딪힌 뒤 점점 작게 튀어 오르는 것처럼 자연스러운 바운스 효과를 만들 수 있습니다.
구현 예제
아래 코드를 실행하여 바운스 애니메이션 효과를 직접 확인해 볼 수 있습니다.
<html>
<head>
<style>
.animated {
background-image: url(/css/images/logo.png);
background-repeat: no-repeat;
background-position: left top;
padding-top:95px;
margin-bottom:60px;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
@-webkit-keyframes bounce {
0%, 20%, 50%, 80%, 100% {-webkit-transform: translateY(0);}
40% {-webkit-transform: translateY(-30px);}
60% {-webkit-transform: translateY(-15px);}
}
@keyframes bounce {
0%, 20%, 50%, 80%, 100% {transform: translateY(0);}
40% {transform: translateY(-30px);}
60% {transform: translateY(-15px);}
}
.bounce {
-webkit-animation-name: bounce;
animation-name: bounce;
}
</style>
</head>
<body>
<div id="animated-example" class="animated bounce"></div>
<button onclick="myFunction()">Reload page</button>
<script>
function myFunction() {
location.reload();
}
</script>
</body>
</html>
코드 핵심 요소 살펴보기
- .animated 클래스: 배경 이미지 설정과 함께 애니메이션 지속 시간(1초)과
animation-fill-mode: both를 지정하여 애니메이션이 시작 전후에도 스타일이 유지되도록 합니다. - @keyframes bounce: 애니메이션 진행률(%)에 따라
translateY()값을 조절해 요소를 위아래로 움직입니다. - -webkit- 접두사: Safari 등 구형 WebKit 기반 브라우저에서도 동일하게 작동하도록 호환성 코드를 함께 작성했습니다.
버튼을 클릭해 페이지를 새로고침하면 애니메이션을 반복해서 확인할 수 있습니다. 이동 거리나 지속 시간을 조정하면 원하는 느낌의 바운스 효과를 손쉽게 응용할 수 있습니다.