CSS3 3D转换

CSS3中的3D转换与2D转换类似,只是在2D的x轴与y轴的基础上增加了z轴,同时增加了透视等属性。

在页面中,坐标系如下图所示

透视perspective

在2D平面上产生近大远小的视觉立体,但是其效果只是二维的。若想产生3D效果(3D投影到2D平面上)则需要利用透视属性,透视的单位是px,透视其实就是视距,及人眼到屏幕的距离,也就是下图中的d

对于同样的z,d越小成象越小。透视要加在被观察元素的父元素上。

translateZ()

translateZ会改变盒子的z轴,z越大,则离人眼越近,成象越大。

div[class^=box]{
            float:left;
            background-color: skyblue;          
            width: 200px;
            height:200px;
            border:black 5px solid;
            margin:50px;
        }
        .box2{
            transform:translateZ(50px);
        }
        .box3{
            transform:translateZ(-50px);
        }

沿x轴旋转rotateX()

div[class^=box]{
            background-color: skyblue;          
            width: 200px;
            height:200px;
            border:black 5px solid;
            margin:0 auto;
        }
        .box2{
            transform:rotateX(45deg);
        }
        .box3{
            transform:rotateX(-45deg);
        }

实现效果:

沿y轴旋转rotateY()

div[class^=box]{
            background-color: skyblue;          
            width: 200px;
            height:200px;
            border:black 5px solid;
            margin:0 auto;
        }
        .box2{
            transform:rotateY(45deg);
        }
        .box3{
            transform:rotateY(-45deg);
        }

实现效果:

沿z轴旋转rotateZ()

div[class^=box]{
            background-color: skyblue;          
            width: 200px;
            height:200px;
            border:black 5px solid;
            margin:0 auto;
        }
        .box2{
            transform:rotateZ(45deg);
        }
        .box3{
            transform:rotateZ(-45deg);
        }

实现效果:

可以看出在2D平面上的rotate就是绕着z轴旋转

沿着指定矢量方向旋转rotate3d()

rotate3d共有4个参数,前3个参数是x,y,z的矢量,第4个参数是旋转的角度

div[class^=box]{
            background-color: skyblue;          
            width: 200px;
            height:200px;
            border:black 5px solid;
            margin:0 auto;
        }
        .box2{
            transform:rotateZ(45deg);
        }
        .box3{
            transform:rotateZ(-45deg);
        }

实现效果:

transform-style 属性

若一个父盒子的子盒子已经定义了3D转换,此时如果要对父盒子进行3D转换,则需要对父盒子设定transform-style,才能使被转换的子元素保留其3D转换。

transform-style的默认值为flat(子元素将不保留其 3D 位置),可以将父盒子的transform-style改为preserve-3d,即可保证子元素也保留3D转换

.fa-box {
            position: relative;        
            margin: 100px auto;
            width: 200px;
            height: 200px;
            transform:rotateY(45deg);
            transform-style:preserve-3d;//保留子元素3D转换
        }

        div[class^=box] {
            position:absolute;
            left:0;
            top:0;
            width: 100%;
            height: 100%;
            border: black 5px solid;
           
        }
        .box1{
            background-color:red;
            transform:rotateX(45deg);
            z-index: 1;
        }
        .box2{
            background-color: blue;
        }

.fa-box {
           /*........*/
            transform-style:flat;//不保留子元素3D转换
           /*........*/
        }