CSS3中设置3D变形的transform-style属性详解

2020-05-05 07:48:20易采站长站整理

    0%{   
        transform:rotateY(0deg)   
    }   
    100%{   
        transform:rotateY(360deg)   
    }   
}   
.spin {   
    width: 142px;   
    height: 200px;   
    position: absolute;   
    top: 50%;   
    left: 50%;   
    margin-left: -72px;   
    margin-top: -101px;   
    border: 1px dashed orange;   
    cursor: pointer;   
    transform-style: preserve-3d;   
}   
/*调用动画*/  
.spin:hover{   
    animation:spin 5s linear infinite;   
}   
.rotate {   
    background: url(images/cardKingClub.png) no-repeat center;   
    background-size: 100% 100%;   
    border: 5px solid hsla(50,50%,50%,.9);   
    transform: perspective(200px) rotateY(45deg);   
}   
.rotate img{   
    border: 1px solid green;   
    transform: rotateX(15deg) translateZ(10px);   
    transform-origin: 0 0 40px;   
}   
/*改变transform-style的默认值*/  
.three-d {   
    transform-style: preserve-3d;   
}  

特别声明:为了节省篇幅,代码中CSS3属性代码省去了各浏览器的私有前缀,在实际操作中,需要将各浏览器前缀加上,才会有效果。

其效果如下所示:
2016523112112665.png (391×487)

正如您所看到的,当元素设置.rotate设置了flat值时,其子元素img不会根据translateZ()值摊开,而在同一平面旋转,如上图上部分所示;当元素.rotate设置了preserve-3d值时,其子元素img会根据translateZ()值摊开,不再会堆叠在一起,如上图下部分所示。

有一点需要特别提醒大家,如果你的元素设置了transform-style值为preserve-3d,就不能为了防止子元素溢出容器而设置overflow值为hidden,如果设置了overflow:hidden同样可以迫死子元素出现在同一平面(和元素设置了transform-style为flat一样的效果),如下图所示: