3D flip card
В этом уроке вы узнаете, как сделать эффект 3D на примере поворачивающейся карточки (flip card). При наведении на контейнер внутренние блоки вращаются вдоль оси Y, обратная сторона при этом невидима. С помощью таких карточек можно рационально организовывать пространство на веб-странице, размещая связанную информацию с двух сторон.
See the Pen yaYXxB by Elena (@html5book) on CodePen.
<div class="container">
<div class="flipper">
<div class="front">
<div class="header">
<i class="fa fa-creative-commons fa-2x"></i>
<h3>wedding Agency</h3>
</div>
<p>Sed ut perspiciatis unde omnis...</p>
</div>
<div class="back">
<h3>about us</h3>
<p>Nemo enim ipsam voluptatem quia...</p>
</div>
</div>
</div>
Для начала установим 3D-перспективу для внешнего блока, добавив ему таким образом глубину. Чем больше значение перспективы, тем меньше выражен эффект глубины. Для выравнивания по центру страницы зададим блоку ширину и поля.
.container {
text-align: center;
width: 320px;
margin: 20px auto;
-webkit-perspective: 1200;
perspective: 1200;
-moz-transform: perspective(1200px);
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
}
Внутреннему блоку назначим transform-style: preserve-3d, чтобы дочерние элементы также позиционировались в трехмерном пространстве.
.flipper {
position: relative;
width: 320px;
height: 280px;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transition: .7s linear;
-moz-transition: .7s linear;
-o-transition: .7s linear;
transition: .7s linear;
}
Для лицевой и оборотной стороны карточки зададим backface-visibility: hidden, чтобы скрыть каждую из сторон при повороте.
.front, .back {
font-family: 'Cabin', sans-serif;
position: absolute;
top: 0;
left: 0;
box-sizing: border-box;
padding: 40px 20px 20px;
width: 100%;
height: 100%;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
backface-visibility: hidden;
}
.front {
z-index: 2;
-webkit-transform: rotateY(0deg);
-moz-transform: rotateY(0deg);
-ms-transform: rotateY(0deg);
transform: rotateY(0deg);
background: white;
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
border-bottom: 1px solid #f5f5f5;
}
i {
color: #DCB8B2;
display: inline-block;
margin-bottom: 15px;
}
h3 {
font-size: 16px;
line-height: 20px;
text-transform: uppercase;
margin: 0 0 15px;
}
p {
font-size: 14px;
line-height: 25px;
}
.header h3 {
color: #18191a;
}
.front p {
color: #818285;
}
Отразим зеркально оборотную сторону, чтобы при вращении содержимое внутри блока отображалось слева направо.
.back {
-webkit-transform: rotateY(-180deg);
-moz-transform: rotateY(-180deg);
-ms-transform: rotateY(-180deg);
transform: rotateY(-180deg);
background: #DCB8B2;
color: white;
}
.back h3 {
position: relative;
}
.back h3:after {
content: "";
width: 50px;
height: 1px;
position: absolute;
bottom: -10px;
left: 50%;
background: white;
margin-left: -25px;
}
.back p {
padding-top: 15px;
}
Добавим поворот на 180 градусов при наведении.
.container:hover .flipper {
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
-ms-transform: rotateY(180deg);
transform: rotateY(180deg);
}