일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- val()
- togle
- display:none
- bootstrap
- hover
- float : left
- scss
- TRANSITION
- JQuery
- navbar
- input
- Carousel
- 레이아웃
- css selector
- setTimeout
- Position
- css animation
- position : fixed
- vw
- form
- EventListner
- transform
- sass
- CSS
- margin
- animate
- 밀리초
- 이벤트 버블링
- z-index
- absolute
- Today
- Total
Simple Is Best
33. [CSS] CSS animation - 4 / 카드 뒤집기 구현 본문
안녕하세요. 이번 포스팅에서는 카드 뒤집는 애니메이션에 대해서 구현해보도록 하겠습니다.
어떻게 동작하는지 먼저 알아볼까요?
#1. hover 이전
#2. hover 할 때 애니메이션 진행 (뒤집히는 중)
3. hover 할 때, 애니메이션 진행 (뒤집힘)
4. hover를 멈추면 다시 1번으로 돌아감
오늘 위에 해당하는 애니메이션을 구현해보도록 하겠습니다.
1. transform : rotateY( );
카드를 뒤집었을때의 "반갑습니다." 문구를 정확하게 보이게 하려면 어떻게 해야할까요?
우선 카드 앞면에서 쓰여질 글을 Y축을 기준으로 180도 돌려야 합니다.
뒷면의 결과에 '반갑습니다'가 나오게 하기 위해서는 transform : rotateY(180deg)를 사용하고 카드를 hover하면 다시 transform : rotateY(180deg) 를 다시 적용 시키면 됩니다.
2. transform-style : preserve-3d;
앞면은 아까 하늘색 카드였는데 여전히 오렌지색 '반갑습니다' 카드가 나오는 현상은 아주 자연스러운 현상입니다.
앞면과 뒷면을 겹치게 하기 위해서 position : absolute ; 를 사용하였기 때문입니다.
그럼 앞면에서 뒷면이 안나오게 하려면 어떻게 하면 될까요?
카드를 감싸고 있는 상위 부모 태그에 transform-style : preserve-3d ; 속성을 부여하면 됩니다.
.inner{
transform-style : preserve-3d;
}
이는 변경 스타일을 3d 처럼 적용해준다는 의미입니다.
다음 그림과 같이 앞면과 뒷면이 분리되었음을 확인 할 수 있습니다.
3. backface-visibility : hidden;
만약, 뒷면으로 뒤집었을 때 앞면이 보인다면 backface-visibility : hidden; 속성을 앞면을 담당하는 클래스에 적용시키면 됩니다.
HTML
<html>
<head>
<title>card</title>
<link rel="stylesheet" href="./card.css">
<meta charset='utf-8'>
</head>
<body>
<div class="outer"> <!--outer는 레이아웃 전용-->
<div class="inner"> <!--inner는 hover 전용-->
<div class='front'>뒤집어 보실래요?</div>
<div class='back'>
<h4>반갑습니다.</h4>
</div>
</div>
</div>
</body>
</html>
CSS
.outer {
width : 200px;
height : 400px;
margin : auto;
}
.inner {
width : 100%;
height : 100%;
position : relative;
transition: all 1s;
transform-style: preserve-3d;
/* 실제 3d box 처럼 보이게끔 설계, hover하지 않았을 때, 뒷면이 안보이게끔 해준다. */
}
.inner:hover{
transform : rotateY(180deg);
}
.front {
width : 100%;
height : 100%;
position : absolute;
backface-visibility: hidden; /*카드의 뒷면에서 이미지(앞면)가 안보이게 처리*/
background-color: deepskyblue;
text-align: center;
padding-top: 80%;
box-sizing: border-box;
}
.back {
width : 100%;
text-align: center;
position : absolute;
transform: rotateY(180deg); /*글씨를 미리 180도 돌려놓는다.*/
height : 100%;
background-color: darkorange;
padding-top: 80%;
box-sizing: border-box;
}
'HTML & CSS' 카테고리의 다른 글
32. [CSS] position : sticky (0) | 2021.07.19 |
---|---|
30. [CSS] CSS Animation - 3 (0) | 2021.07.18 |
29. [HTML] 비디오 배경 넣기 (0) | 2021.07.17 |
28. [SCSS] SCSS 핵심 문법 (0) | 2021.07.15 |
27. [CSS] SCSS 설치 및 기초 (0) | 2021.07.15 |