웹 페이지에 역동적인 등장 효과를 더하고 싶다면 Flip In X 애니메이션을 활용해 보세요. 이 효과는 요소가 X축을 중심으로 뒤집히면서 화면에 나타나는 애니메이션으로, 카드 UI, 배너, 로고 등 다양한 요소에 자연스럽게 적용할 수 있습니다.
Flip In X 애니메이션의 동작 원리
Flip In X는 CSS의 transform 속성과 @keyframes 규칙을 조합하여 구현합니다. 핵심은 다음 세 가지 속성입니다.
- perspective(400px): 3D 공간의 깊이감을 부여하여 입체적인 회전 느낌을 만듭니다.
- rotateX(): X축(수평축)을 기준으로 요소를 회전시킵니다.
- opacity: 애니메이션 시작 시 투명하게 시작해 점진적으로 나타나도록 처리합니다.
애니메이션 흐름을 살펴보면, 요소가 처음에는 X축 기준 90도로 눕혀져 있고 투명한 상태에서 시작합니다. 진행률 40% 지점에서는 -10도로 살짝 넘어갔다가, 70% 지점에서 반대로 +10도로 튕기며, 최종적으로 0도에 도달하면서 완전히 불투명한 상태로 자리 잡습니다. 이러한 바운스(bounce) 효과 덕분에 단순히 뒤집히는 것보다 훨씬 생동감 있는 연출이 가능합니다.
전체 예제 코드
아래 코드를 HTML 파일에 그대로 저장한 후 브라우저에서 열면 Flip In X 애니메이션을 바로 확인할 수 있습니다. 'Reload page' 버튼을 클릭하면 페이지가 새로고침되어 애니메이션을 반복해서 볼 수 있습니다.
<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 flipInX {
0% {
-webkit-transform: perspective(400px) rotateX(90deg);
opacity: 0;
}
40% {
-webkit-transform: perspective(400px) rotateX(-10deg);
}
70% {
-webkit-transform: perspective(400px) rotateX(10deg);
}
100% {
-webkit-transform: perspective(400px) rotateX(0deg);
opacity: 1;
}
}
@keyframes flipInX {
0% {
transform: perspective(400px) rotateX(90deg);
opacity: 0;
}
40% {
transform: perspective(400px) rotateX(-10deg);
}
70% {
transform: perspective(400px) rotateX(10deg);
}
100% {
transform: perspective(400px) rotateX(0deg);
opacity: 1;
}
}
.flipInX {
-webkit-backface-visibility: visible !important;
backface-visibility: visible !important;
-webkit-animation-name: flipInX;
animation-name: flipInX;
}
</style>
</head>
<body>
<div id="animated-example" class="animated flipInX"></div>
<button onclick="myFunction()">Reload page</button>
<script>
function myFunction() {
location.reload();
}
</script>
</body>
</html>
코드 주요 부분 해설
1. 공통 스타일 (.animated)
animation-duration: 1s는 애니메이션 전체 재생 시간을 1초로 설정합니다. animation-fill-mode: both를 지정하면 애니메이션이 시작되기 전과 끝난 후에도 해당 프레임의 스타일이 유지되어, 깜빡임 없이 자연스러운 연출이 가능합니다.
2. 키프레임 정의 (@keyframes flipInX)
-webkit- 접두사가 붙은 키프레임은 구버전 Safari, Chrome 등 WebKit 기반 브라우저를 위한 것이고, 일반 @keyframes는 표준 방식입니다. 최신 브라우저에서는 표준 방식만으로도 충분하지만, 하위 호환성을 위해 두 가지를 함께 작성하는 것이 안전합니다.
3. backface-visibility 설정
backface-visibility: visible은 요소가 회전하면서 뒷면이 보이는 순간에도 콘텐츠가 사라지지 않도록 합니다. 만약 뒤집힐 때 요소가 순간적으로 사라지는 현상이 발생한다면 이 속성을 확인해 보세요.
커스터마이징 팁
- 속도 조절:
animation-duration값을 0.5s 또는 2s로 변경하여 애니메이션 속도를 조정할 수 있습니다. - 바운스 강도 조절: 40%, 70% 지점의 각도(-10deg, 10deg)를 키우면 더 크게 튕기는 효과를 낼 수 있습니다.
- Y축 뒤집기:
rotateX를rotateY로 바꾸면 좌우로 뒤집히는 Flip In Y 효과를 만들 수 있습니다. - 딜레이 추가:
animation-delay속성을 사용하면 여러 요소에 순차적으로 애니메이션을 적용할 수 있습니다.
CSS만으로 구현하는 만큼 별도의 JavaScript 라이브러리 없이 가볍게 사용할 수 있다는 점이 큰 장점입니다. Animate.css 같은 라이브러리에도 동일한 이름의 flipInX 클래스가 포함되어 있으니, 프로젝트 규모에 따라 직접 구현하거나 라이브러리를 활용해 보세요.