Skip to main content

13.3D转换

相比2D坐标,3D多了一个Z轴,向屏幕外方向为正值

透视perspective#

想要看出3D的效果,首先要设置的属性就是透视per,Z轴移动本着离我们的眼睛距离为,近大远小

per的单位是px,意思就是距离屏幕的距离,数值越大,离的越远

per要写在被观察元素的父盒子上面

如:

 body{            perspective: 400px;        }        .box1{            width: 400px;            height: 200px;            background: red;     
        }        .box1:hover{            transform: translateZ(-90px);        }

这里我们写了,让鼠标经过,box1向屏幕后方走90px,也就是说离我们的距离变远了,所以应该box1变小了,让我们看下效果

当然如果per值更大,我们将会看到更小的box1

translate3d#

2d的我们学过了,3d的就是多个z

transform: translate3d(50px,50px,-50px);

当然也可以单独x,y,z

transform: translateZ(-90px)

rotate3d#

那这个和2d就完全不同了

x,y,z轴旋转,这个比较简单就是把盒子沿着xyz旋转

如:

transform: rotateX(180deg);transform: rotateZ(180deg);transform: rotateY(180deg);

我们把盒子加一个hover看变化效果

body{            perspective: 400px;        }        .box1{            width: 400px;            height: 200px;            background: url("assets/img/wow.jpg") no-repeat;            transition: all 2s;
        }        .box1:hover{            transform: rotateX(180deg);        }

还有一种是3d,是在3个坐标的交集点的一条线,旋转

 transform: rotate3d(2,3,4,180deg);

xyz的比例自己写,最后一个 参数是deg

transform-style#

这个属性可以开启3d立体环境

默认值flat是不开启3d

开启3d,改属性加在要3d变化的盒子中

 transform-style:preserve-3d

看一个案例,1个大盒子里面包括2个小盒子,大盒子转2个一起转,并形成3d效果

<div class="box">        <div></div>        <div></div>    </div>


    <style>        body{            perspective: 400px;
        }        .box{            position: relative;            transition: all 2s;            transform-style: preserve-3d;        }        .box div{            position: absolute;            left: 500px;            width: 200px;            height: 200px;
        }        .box div:first-child{            background-color: red;        }        .box div:last-child{            background-color: blue;            transform: rotateX(90deg);        }        .box:hover{            transform: rotateY(180deg);        }    </style>

最后效果