什么是3d的场景呢? 3d场景是如何实现的呢?它有和2d有哪些区别和联系呢,接下来下边和大家一起来看看,2d场景,在屏幕上水平和垂直的交叉线x轴和y轴,3d场景,在垂直于屏幕的方法,相对于3d多出个z轴,Z轴:靠近屏幕的方向是正向,远离屏幕的方向是反向。
1.transform-style属性
transform-style属性是3D空间一个重要属性,指定嵌套元素如何在3D空间中呈现。他主要有两个属性值:flat和preserve-3d。其中flat值为默认值,表示所有子元素在2D平面呈现。preserve-3d表示所有子元素在3D空间中呈现。
也就是说,如果对一个元素设置了transform-style的值为flat,则该元素的所有子元素都将被平展到该元素的2D平面中进行呈现。沿着X轴或Y轴方向旋转该元素将导致位于正或负Z轴位置的子元素显示在该元素的平面上,而不是它的前面或者后面。如果对一个元素设置了transform-style的值为preserve-3d,它表示不执行平展操作,他的所有子元素位于3D空间中。
代码如下
<style> div{ width:300px; height:200px; background:black; margin:100px auto; transform:rotateY(85deg); position:relative; transform-style:preserve-3d; } p{ width:100px; height:150px; background:red; position:absolute; left:50%; top:50%; margin-left:-50px; margin-top:-75px; transform:rotateX(45deg); } </style>
2、景深(透视)
近大远小 景深
程序中实现的方法 perspective 元素距离 视线的距离(物体和眼睛的距离越小,近大远小的效果越明显)perspective: 1200px;(在父元素中用)transform:perspective(1200px) (在子元素中使用)两个都设置会发生冲突,建议只设置父元素,通常的数值在900-1200之间如果当你的视线距离物体足够远的时候,基本上就不会有近大远小的感觉。
代码如下
<style> .con{ float:left; width:200px; height:300px; margin-top:100px; margin-left:140px; border:2px solid red; transform-style:preserve-3d; perspective:500px; } .con img{ trasition:1s; } .con:nth-child(1):hover img{ transform:translateZ(150px); } .con:nth-child(2):hover img{ } </style>
perspective-origin:
观察3d元素的(位置)角度 perspective-origin:center center (中心)
perspective-origin:left top (左上角)
perspective-origin:100% 100% (右下角)