CSS 变形

变形是一些效果的集合,主要是移动、缩放、旋转和倾斜4 种基本操作,也可通过matrix矩阵来实现更复杂的效果。

配合过渡和动画的知识,可以替代大量之前只能靠flash才能实现的效果。

transform 可以实现2D 和 3D两种效果。                                           // 变形的副作用?!


2D 效果

2D效果,涉及的属性主要有:变形原点(transform-origin)和变形函数(transform)。

[1] 变形原点 transform-origin:变形操作所依据的基点,默认为元素的中心点。


[2] 变形函数 transform:一系列变形函数(位移、缩放、旋转、倾斜)的集合                   // 矩阵 martrix?!

需要注意的是,位移、缩放、旋转和倾斜这四个操作中,除了位移与变形原点无关,其余三个都与变形原点有关。


[ 移动 translate ]可以使元素从原来的位置上移动指定的位移。

// 发生位移后,元素的x轴和y轴也一并移动,若元素再进行其他变形操作,则要沿着改变后的x轴和y轴进行变形。

// 代码示例:定位的盒子居中对齐


[ 缩放 scale ]可以让元素根据变形原点进行缩放,默认值为1。

// 元素被缩放后,若要进行位移:

  • 数值类型的位移要乘以该缩放比例;
  • 百分比类型的位移值要乘以原来的宽度或高度和,转化成数值类型后,在乘以缩放比例;


[ 倾斜 skew ]可以让元素以其变形原点围绕x轴和y轴进行一定角度的倾斜。

// 元素倾斜后,x轴和y轴发生倾斜,若元素要进行其他变形操作,则沿着倾斜后的x轴和y轴进行变形。


[ 旋转 rotate ] 可以让元素通过指定的角度(deg)根据变形原点进行顺时针旋转,默认为 0deg。

// 元素旋转后,元素的x轴和y轴也随之旋转。若元素要进行其他变形操作,则沿着旋转后的x轴和y轴进行变形。


3D 效果

3D效果,涉及的属性有(变形原点、透视、变形函数、背景可见和变形风格):

transform-origin、perspective、perspective-origin、transform、backface-visibility、transform-style。


[ 基础知识 - 坐标轴 ]3D效果和2D效果最大的不同在于其参考的坐标轴的不同,2d是平面的,3d是立体的。

也就是说,2D效果只有x轴和y轴,而3D效果则是x、y、z三条轴组成的立体空间,其正向分别指向右、下和屏幕外。


[1] 变形原点 transform-origin:2d效果没有z轴,所以默认为0,而3d效果的z轴是一个可以设置的变量。


[2] 透视 perspective:透视是3D效果中最重要的内容,如果不设置透视,元素的3D效果将无法实现。

[理解透视原理?!深入了解透视,需要熟悉 — 观察者、被透视元素和变形元素这几个概念。

  • 变形元素:顾名思义,就是进行transform3D变形的元素。
  • 观察者:浏览器模拟出的用来观察被透视元素的一个没有尺寸的点,从观察者的透视原点发出视线。
  • 被透视元素(被观察者观察的元素):根据属性设置的不同,可能是变形元素本身,也可能是父级 / 祖先元素。

// 激活透视的方式

在3D效果中,激活透视属性的方式有两种透视属性?!或 透视函数):

[ 透视函数 ] 由于透视原点perspective-origin只能设置在设置了perspective透视属性的元素。 若为元素设置透视函数perspective(),则透视原点不起使用,观察者使用默认位置,即元素中心点对应的平面上。

[3] 变形函数:上面介绍了2D效果,而3D效果也类似,包括位移、旋转和缩放,但没有倾斜。

倾斜skew()是二维变形,不能在三维空间变形,元素可能会在x轴和y轴倾斜,但不能在z轴倾斜。


[ 3D移动 ] 主要包括traslateZ()和translate3d()


[ 3D缩放 ] 主要包括scaleZ()和scale3d()


[ 3D旋转 ] 主要包括rotateX()、rotateY()、rotateZ()、rotate3d()


[4] 背景可见 backface-visibility: 设置元素背面是否可见

元素的背面默认是可见的。但有时需要让元素背面不可见,这就要用到属性backface-visibility。


[5] 变形风格 transform-style:允许变形元素及其子元素在3d空间中呈现

// 设置perspective后,默认元素内部的子元素是扁平化,即2D效果。