6个面上标有数字1-6,数字和立方体各面的对应关系是:
前1 上2 后3 下4 左5 右6
.wrapper {
perspective: 600px;
}
.box {
transform-style: preserve-3d;
height: 200px;
width: 200px;
position: relative;
margin: 100px auto;
animation: move 5s linear infinite;
}
.item {
position: absolute;
left: 0;
top: 0;
height: 200px;
width: 200px;
border: 1px solid black;
color: #fff;
line-height: 200px;
text-align: center;
opacity: 0.5;
}
.item:nth-child(1) {
background: royalblue;
transform: translateZ(100px);
}
.item:nth-child(2){
background: salmon;
transform: rotateX(90deg) translateZ(100px);
}
.item:nth-child(3) {
background: slateblue;
transform: rotateX(180deg) translateZ(100px);
}
.item:nth-child(4) {
background: springgreen;
transform: rotateX(-90deg) translateZ(100px);
}
.item:nth-child(5) {
background: pink;
transform: rotateY(-90deg) translateZ(100px);
}
.item:nth-child(6) {
background: purple;
transform: rotateY(90deg) translateZ(100px);
}
@keyframes move {
0% {
transform: rotate3d(1,1,1,0);
}
100% {
transform: rotate3d(1,1,1,360deg);
}
}
<div class="wrapper">
<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
</div>
</div>
效果:
在给6个面定位置时,要注意,是先旋转哪一个轴,再旋转哪一个轴
如数字’2’所在的面,是上面,要先旋转X轴90deg,再沿Z轴正方向平移100px
如果先沿z轴平移,再沿x轴旋转
图片会先向屏幕这边移动,然后在沿X轴翻,这样最后图片的位置在原xoz面上
(坐标轴原点设为o点,图片最终状态是:躺平在原坐标轴系统的xoz面上,类似一个小人,往屏幕跑了100px,然后就地躺),
这样的位置是不满足原先设定的立方体面与数字的对应的,且高度直接缩小了一半
然后就是之前没有讲的transform: rotate3d(x,y,z,ndeg);,指的是沿xyz合力方向旋转ndeg
案例中xyz均设为1,合成的矢量方向大概是: