CSS3 3D变形基础

课后整理 2020-12-9

3D变形与2D变形最大的不同就在于其参考的坐标轴不同:2D变形的坐标轴是平面的,只存在X轴和Y轴,而3D变形的坐标轴则是x、y、z三条轴组成的立体空间,X轴正向、Y轴正向、Z轴正向分别朝向右、下和屏幕外,示意如图1所示。

图1 3D坐标轴示意图

透视是3D变形中最重要的概念。如果不设置透视,元素的3D变形效果将无法实现。在上节示例中,如果使用函数rotateX(45deg)将图像以X轴方向为轴沿顺时针旋转45角度,由于没有设置透视样式的效果,可以看到浏览器将图像的3D变形操作垂直投射到2D视平面上,最终呈现出来的只是图像的宽高变化。

基于对上面示例的直观体验,下面来了解几个核心概念:变形元素、观察者和被透视元素,关系如图2所示。

图2 变形元素、观察者和被透视元素位置关系示意图

透视距

透视距离是指观察者沿着平行于Z轴的视线与屏幕之间的距离,也称为视距,示意如图3所示。

图3 透视距离示意图

使用perspective属性可以定义透视距离,语法格式如下:

perspective:none | <length>

取值简单说明如下:

注意,透视距离不可为0和负数,因为观察者与屏幕距离为0时或者在屏幕背面时是不可以观察到被透视元素的正面的。perspective也不可取百分比,因为百分比需要相对的元素,但Z轴并没有可相对的元素尺寸。

一般地,物体离得越远,显得越小。反映在perspective属性上,就是该属性值越大,元素的3D变形效果越不明显。

设置perspective属性的元素就是被透视元素。一般地,该属性只能设置在变形元素的父级或祖先级。因为浏览器会为其子级的变形产生透视效果,但并不会为其自身产生透视效果。应用示例可以参考上面示例1。

透视原点

透视原点是指观察者的位置,一般观察者位于与屏幕平行的另一个平面上,观察者始终是与屏幕垂直的。观察者的活动区域是被观察元素的盒模型区域,示意如图4所示。

图4 下面黄色区域为透视原点的位置区域

使用perspective-origin属性可以定义透视点的位置,语法格式如下:

perspective-origin:[ <percentage> |  <length> | left | center① | right ] [  <percentage> | <length> | top | center② | bottom  ]?

取值简单说明如下: