<div class="scene">
<div class="card">
<div class="card__face card__face--front">front</div>
<div class="card__face card__face--back">back</div>
</div>
</div>
card
)가 되는 친구의 부모(scene
)에 perspective
속성을 추가해준다.(지금의 경우에서는 card의 부모인 scene에 perspective 설정)
- perspective란 원근법이라는 뜻으로 웹페이지에서 동적인 원근감을 적용시켜준다.
- perspective의 값이 작을수록 부담스럽게 나한테 온다...
.scene {
width: 200px;
height: 260px;
perspective: 600px;
}
card
에서 부모의 3D space안에서 transform이 가능하다. 그리고 card
는 부모의 크기를 그대로 가져가기 위해 width와 height를 100%로 지정해주며 transform-origin은 container에 가운데에서 작동할 것이다.card
에 position: relative
속성을 추가한다.
transform-origin
을 사용하면 transform의 방향을 지정해줄 수 있다.(속성 값으로 top, right, left, bottom 지정 가능 더 많은 정보는 여기 클릭)
.card {
width: 100%;
height: 100%;
position: relative;
transition: transform 1s;
transform-style: preserve-3d;
}
perspective
는 직계 자식 밖에 지원되지 않는다(지금의 경우는 card
까지)transfrom-style: preserve-3d
를 사용해 perspective를 상속해줄 수 있다.transform-style
조금 더 알아봐야겠다.position: absolute
를 지정해 줘야한다.backface-visibility: hidden
을 사용해준다..card__face {
position: absolute;
height: 100%;
width: 100%;
backface-visibility: hidden;
}
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>card flip</title>
<style>
.scene {
width: 200px;
height: 260px;
perspective: 600px;
}
.scene .card {
width: 100%;
height: 100%;
position: relative;
transition: 1s;
transform-style: preserve-3d;
}
.card:hover {
transform: rotateY(180deg);
}
.card .card_face {
position: absolute;
height: 100%;
width: 100%;
backface-visibility: hidden;
}
.card .card_face.front {
background-color: red;
}
.card .card_face.back {
background-color: blue;
transform: rotateY(180deg);
}
</style>
</head>
<body>
<div class="scene">
<div class="card">
<div class="card_face front">front</div>
<div class="card_face back">back</div>
</div>
</div>
</body>
</html>
reference site(https://3dtransforms.desandro.com/card-flip)