transform-style
属性是3D空间一个重要属性,指定嵌套元素如何在3D空间中呈现。他主要有两个属性值:flat
和preserve-3d
。javascript
transform-style
属性的使用语法很是简单:css
transform-style: flat | preserve-3d
其中flat
值为默认值,表示全部子元素在2D平面呈现。preserve-3d
表示全部子元素在3D空间中呈现。html
也就是说,若是对一个元素设置了transform-style
的值为flat
,则该元素的全部子元素都将被平展到该元素的2D平面中进行呈现。沿着X轴或Y轴方向旋转该元素将致使位于正或负Z轴位置的子元素显示在该元素的平面上,而不是它的前面或者后面。若是对一个元素设置了transform-style
的值为preserve-3d
,它表示不执行平展操做,他的全部子元素位于3D空间中。java
transform-style
属性须要设置在父元素中,而且高于任何嵌套的变形元素。css3
若是你的元素设置了transform-style
值为preserve-3d
,就不能为了防止子元素溢出容器而设置overflow
值为hidden
,若是设置了overflow:hidden
一样能够迫使子元素出如今同一平面(和元素设置了transform-style
为flat
同样的效果)函数
perspective
属性对于3D变形来讲相当重要。该属性会设置查看者的位置,并将可视内容映射到一个视锥上,继而投到一个2D视平面上。若是不指定透视,则Z轴空间中的全部点将平铺到同一个2D视平面中,而且变换结果中将不存在景深概念。spa
上面的描述可能让人难以理解一些,其实对于perspective
属性,咱们能够简单的理解为视距,用来设置用户和元素3D空间Z平面之间的距离。而其效应由他的值来决定,值越小,用户与3D空间Z平面距离越近,视觉效果更使人印象深入;反之,值越大,用户与3D空间Z平面距离越远,视觉效果就很小。3d
perspective:none | <length>
perspective
属性包括两个属性:none
和具备单位的长度值。其中perspective
属性的默认值为none
,表示无限的角度来看3D物体,但看上去是平的。另外一个值<length>
接受一个长度单位大于0的值。并且其单位不能为百分比值。<length>
值越大,角度出现的越远,从而建立一个至关低的强度和很是小的3D空间变化。反之,此值越小,角度出现的越近,从而建立一个高强度的角度和一个大型3D变化。code
咱们可对perspective
取值作一个简单的结论:orm
为了更好的理解perspective
属性,咱们颇有必要把他和translateZ
的关系结合起来。其实也能够把perspective
的值简单的理解为人的眼睛到显示器的距离,而translate
就是3D物体距离源点的距离,下面引用W3C的一张图来解说perspective
和translateZ
的关系。
上图显示了perspective
属性和translateZ
的位置比例。在顶部的图,Z是半个d,为了使用原始圆(轮廓)看起来出如今Z轴上(虚线圆),画布上的实体圆将扩大两部,如浅蓝色的圆。在底部图中显示,圆按比例缩小,导致虚线圆出如今画布后面,而且z的大小是距原始位置三分之一。
在3D变形中,除了perspective
属性能够激活一个3D空间以外,在3D变形的函数中的perspective()
也能够激活3D空间。他们不一样的地方是:perspective
用在舞台元素上(变形元素们的共同父元素);perspective()
就是用在当前变形元素上,而且能够与其余的transform
函数一块儿使用。例如,咱们能够把:
.stage { perspective: 600px }
写成:
.stage .box { transform: perspective(600px); }
虽然perspective
属性和perspective()
函数所起的功能是同样的,但其取值以及以运用的对像有所不一样:
perspective
属性能够取值为none
或长度值;而perspective()
函数取值只能大于0,若是取值为0或比0小的值,将没法激活3D空间;perspective
属性用于变形对像父元素;而perspective()
函数用于变形对像自身,并和transform
其余函数一块儿使用。perspective-origin
属性是3D变形中另外一个重要属性,主要用来决定perspective
属性的源点角度。它实际上设置了X轴和Y轴位置,在该位置观看者好像在观看该元素的子元素。
perspective-origin
属性的使用语法也很简单:
perspective-origin:[<percentage> | <length> | left | center | right | top | bottom] | [[<percentage> | <length> | left | center | right] && [<percentage> | <length> | top | center | bottom]]
该属性的默认值为“50% 50%”(也就是center),其也能够设置为一个值,也能够设置为两个长度值:
left
(表示在包含框的X轴方向长度的0%),center
(表示中间点),或right(表示长度的100%)。top
(表示在包含框的Y轴方向长度的0%),center
(表示中间点),或bottom
(表示长度的100%)。为了指转换子元素变形的深度,perspective-origin
属性必须定义父元素上。一般perspective-origin
属性自己不作任何事情,它必须被定义在设置了perspective
属性的元素上。换句话说,perspective-origin
属性须要与perspective
属性结合起来使用,以便将视点移至元素的中心之外位置,以下图所示:
每每咱们看同样东西不可能一直都在中心位置看,想换个角度,换个位置一看究竟,这个时候就离不开perspective-origin
这个属性,下面来自于W3C官网的图能够简单阐述这一观点:
backface-visibility
属性决定元素旋转背面是否可见。对于未旋转的元素,该元素的正面面向观看者。当其Y轴旋转约180度时会致使元素的背面面对观众。
backface-visibility
属性使用语法很简单:
backface-visibility: visible | hidden
该属性被设置为如下两个关键词之一:
一个元素的可见性与“backface-visibility:hidden”决定以下:
backface-visibility
属性可用于隐藏内容的背面。默认状况下,背面可见,这意味着即便在翻转后,旋转的内容仍然可见。但当backface-visibility
设置为hidden
时,旋转后内容将隐藏,由于旋转后正面将再也不可见。该功能可帮助您模拟多面的对象,例以下例中使用的纸牌。经过将backface-visibility
设置为hidden
,您能够轻松确保只有正面可见。上例或许让您能更清楚的了解backface-visibility
的visible
和hidden
的区别,上图中左边立方体每一个页咱们都能看获得,而右边的立方体咱们只能看到视力范围的面。
转载自http://www.w3cplus.com/css3/transform-basic-property.html