相对于2D多了一个Z轴,垂直于屏幕
transform属性
transform:向元素应用2D或者3D转换,在3D效果下可结合translate平移,rotate()旋转,skew()扭曲,scale()缩放
transform-origin:被转换元素的中心位置,默认在中心
transform-style:开启3D模式的属性
flat:子元素不保留3D位置
preserve-3d:子元素保留3D位置,开启3D模式
perspective:视点
none:没有3D空间
取值越小,3D效果越明显,0或者无穷大等价于none
perspective-origin:视点的位置
backface-visibility:设置当前元素不面向屏幕是否可见
visible:默认值,可见
hidden:不可见
总的来说3D效果实现纸面上看起来很简单,但需要自己去体会,以下是旋转立方体代码,可以自己尝试写一写,感受一下各个属性:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS3实现旋转立方体</title> <style type="text/css"> *{
margin: 0;
padding: 0;
} ul li{
list-style: none;
} .box{ width: 400px; height: 400px; border: 2px #FF0000 solid; margin: 100px auto; perspective: 1200px;/*视点远近*/ } .box ul{ width: 300px; height: 300px; border: 1px #00f solid; margin: 50px auto; position: relative; transform-style: preserve-3d; /*开启3D模式*/ animation: move 2.5s infinite linear; /*animation动画*/
/*旋转的焦点位置,整个正方体围绕哪个焦点旋转,现在是围绕正方体内部中心点 */ transform-origin: center center 150px; } .box ul li{ width: 300px; height: 300px; font-size: 30px; color: aliceblue; text-align: center; line-height: 300px; position: absolute; }
/*调整元素的位置,拼成正方体*/ .box ul li:nth-of-type(1){
background-color: red;opacity:0.4;
} .box ul li:nth-of-type(2){
background-color: blue;opacity:0.4;
transform: translateX(300px)rotateY(-90deg);
transform-origin: left ;
} .box ul li:nth-of-type(3){
background-color: yellow;
opacity:0.4;
transform: translateX(-300px)rotateY(90deg);
transform-origin: right;
} .box ul li:nth-of-type(4){
background-color: green;
opacity:0.4;
transform: translateY(-300px)rotateX(-90deg);
transform-origin: bottom;
} .box ul li:nth-of-type(5){
background-color: yellowgreen;
opacity:0.4;
transform: translateY(300px)rotateX(90deg);
transform-origin: top;} .box ul li:nth-of-type(6){
background-color: purple;
opacity:0.4;
transform: translateZ(300px);
}
/*旋转动画*/ @keyframes move{ from{transform: rotateY(0deg);} to{transform: rotateY(360deg);} } </style> </head> <body> <div class="box"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> </ul> </div> </body> </html>