CSS3 3D 转换
3D 转换
CSS3 允许您使用 3D 转换来对元素进行格式化。
rotateX() x轴旋转,围绕其在一个给定度数X轴旋转的元素。
div
{
transform: rotateX(120deg);
-webkit-transform: rotateX(120deg); /* Safari 与 Chrome */
}
rotateY() y轴旋转,围绕其在一个给定度数Y轴旋转的元素。
div
{
transform: rotateY(130deg);
-webkit-transform: rotateY(130deg); /* Safari 与 Chrome */
}
rotateZ()z轴旋转,围绕其在一个给定度数Z轴旋转的元素。
div
{
transform: rotateZ(130deg);
-webkit-transform: rotateZ(130deg); /* Safari 与 Chrome */
}
制作一个3D六面体的旋转相册
如下图
这个旋转相册由6个面组成,所以,我们先设置6个div
<div class="out">
<div class="p1"></div>
<div class="p2"></div>
<div class="p3"></div>
<div class="p4"></div>
<div class="p5"></div>
<div class="p6"></div>
</div>
然后给其添加样式,由于是六边形,所以每个div旋转的角度为120°
* {
margin: 0;
padding: 0;
}
body,
html {
width: 100%;
height: 100%;
}
.out {
position: absolute;
top: 50%;
left: 50%;
transform: rotateY(30deg) rotateX(-10deg);
transform-style: preserve-3d;
animation: xz 5s linear 0s infinite normal;
}
.out>.p1,
.p2,
.p3,
.p4,
.p5,
.p6 {
width: 200px;
height: 200px;
background-size: 100% auto;
position: absolute;
}
.p1 {
background-image: url(./img/1.jpg);
transform: translateZ(300px);
}
.p2 {
background-image: url(./img/2.png);
transform: translateZ(-300px) rotateY(180deg);
}
.p3 {
background-image: url(./img/3.jpeg);
transform: translateX(-250px)translateZ(150px) rotateY(300deg);
}
.p4 {
background-image: url(./img/4.jpeg);
transform: translateX(250px) translateZ(-150px) rotateY(120deg);
}
.p5 {
background-image: url(./img/5.jpeg);
transform: translateX(-250px)translateZ(-150px) rotateY(240deg);
}
.p6 {
background-image: url(./img/6.jpg);
transform: translateX(250px)translateZ(150px) rotateY(420deg);
}
让其旋转,添加动画
@keyframes xz {
from {
transform: translate(50px) rotateY(0deg) rotateX(10deg);
}
to {
transform: translate(50px) rotateY(360deg) rotateX(10deg);
}
}
最后,整合代码
整合
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<style>
* {
margin: 0;
padding: 0;
}
body,
html {
width: 100%;
height: 100%;
}
.out {
position: absolute;
top: 50%;
left: 50%;
transform: rotateY(30deg) rotateX(-10deg);
transform-style: preserve-3d;
animation: xz 5s linear 0s infinite normal;
}
.out>.p1,
.p2,
.p3,
.p4,
.p5,
.p6 {
width: 200px;
height: 200px;
background-size: 100% auto;
position: absolute;
}
.p1 {
background-image: url(./img/1.jpg);
transform: translateZ(300px);
}
.p2 {
background-image: url(./img/2.png);
transform: translateZ(-300px) rotateY(180deg);
}
.p3 {
background-image: url(./img/3.jpeg);
transform: translateX(-250px)translateZ(150px) rotateY(300deg);
}
.p4 {
background-image: url(./img/4.jpeg);
transform: translateX(250px) translateZ(-150px) rotateY(120deg);
}
.p5 {
background-image: url(./img/5.jpeg);
transform: translateX(-250px)translateZ(-150px) rotateY(240deg);
}
.p6 {
background-image: url(./img/6.jpg);
transform: translateX(250px)translateZ(150px) rotateY(420deg);
}
@keyframes xz {
from {
transform: translate(50px) rotateY(0deg) rotateX(10deg);
}
to {
transform: translate(50px) rotateY(360deg) rotateX(10deg);
}
}
</style>
<div class="out">
<div class="p1"></div>
<div class="p2"></div>
<div class="p3"></div>
<div class="p4"></div>
<div class="p5"></div>
<div class="p6"></div>
</div>
</body>
</html>
每个面的图片要自己添加