Вы можете использовать CSS-свойство backface-visibility
в сочетании с функциями transform
для создания потрясающего эффекта переворачивания и вращения без использования JavaScript.
В следующем примере есть два изображения, одно — лицевая сторона, а другое — обратная сторона покерной карты. Обратная сторона карты помещается поверх лицевой с использованием метода позиционирования CSS, так что вначале видна только одна сторона карты.
Когда вы помещаете курсор на обратную сторону карты, она вращается, и отображается лицевая сторона карты. Видимость задней поверхности элемента скрыта, так что задняя сторона перевернутого элемента не отображается во время преобразования, что создает иллюзию трехмерного вращения. Давайте попробуем понять, как именно работает трехмерное переворачивание:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CSS 3D Rotation on Mouseover</title>
<style>
.flip-container {
margin: 50px;
perspective: 1000;
display: inline-block;
}
.flip-container:hover .card {
transform: rotateY(180deg);
}
.card, .front, .back {
width: 130px;
height: 195px;
}
.card {
transition: 0.5s;
transform-style: preserve-3d;
position: relative;
}
.front, .back {
backface-visibility: hidden;
position: absolute;
}
.front {
z-index: 1;
transform: rotateY(180deg);
background: url("images/card-front.jpg") no-repeat;
}
.back {
z-index: 2; /* задняя сторона, размещенная над передней */
transform: rotateY(0deg);
background: url("images/card-back.jpg") no-repeat;
}
</style>
</head>
<body>
<div class="flip-container">
<div class="card">
<div class="front">
<!-- содержимое лицевой стороны -->
</div>
<div class="back">
<!-- содержимое обратной стороны -->
</div>
</div>
</div>
</body>
</html>
Вы также можете использовать два разных элемента <img>
для отображения лицевой и оборотной стороны карточки вместо использования свойства background
. Но в этом случае пользователь может увидеть некоторый рывок в начале переворота, потому что для загрузки изображения потребуется некоторое время.
Просто замените функцию преобразования с rotateY()
на rotateX()
, чтобы создать вертикальное переворачивание. Вы также можете поместить текст или другие элементы внутри контейнеров .front
и .back
, чтобы сократить этот пример.
3D перелистывание в Internet Explorer
Приведенный выше пример не будет работать в Internet Explorer должным образом из-за отсутствия поддержки свойства transform
CSS3. Однако, одновременно переворачивая передний и задний элементы, мы можем добиться того же эффекта, что и в предыдущем примере. Этот пример будет работать в IE10 и выше.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CSS 3D Revolving in IE</title>
<style>
.flip-container {
margin: 50px;
perspective: 1000;
display: inline-block;
}
.flip-container:hover .back {
transform: rotateY(180deg);
}
.flip-container:hover .front {
transform: rotateY(0deg);
}
.flip-container, .front, .back {
width: 130px;
height: 195px;
}
.card {
transition: 0.6s;
transform-style: preserve-3d;
position: relative;
}
.front, .back {
position: absolute;
backface-visibility: hidden;
transition: 0.6s;
transform-style: preserve-3d;
}
.front {
z-index: 1;
transform: rotateY(-180deg);
background: url("images/card-front.jpg") no-repeat;
}
.back {
z-index: 2;
transform: rotateY(0deg);
background: url("images/card-back.jpg") no-repeat;
}
</style>
</head>
<body>
<div class="flip-container">
<div class="card">
<div class="front">
<!-- содержимое лицевой стороны -->
</div>
<div class="back">
<!-- содержимое обратной стороны -->
</div>
</div>
</div>
</body>
</html>