CSS3-转换

CSS3中的转换

CSS3中的转换可以形成简单的动画,对于页面的小优化有点金的效果。

CSS3中的转换都在transform属性中定义,在该属性中定义其他函数来进行不同的转换。

CSS3的2D转换

translate()

该函数接受两个参数,分别是其x,y轴的偏移量,右下为正方向。

transform:translate(50px,100px);

将原元素向右、下移动50px、100px。

如果只填一个参数,则默认为x轴偏移。

transform:translate(50px);

向x轴移动50px;

transform:translate(0,100px);

向y轴移动100px;

rotate()

该函数接受一个参数,确定偏移的角度,正值为顺时针,负值即为逆时针。

transform: rotate(30deg);//顺时针30度
transform: rotate(-30deg);//逆时针30度

scale()

该函数接受两个参数,分别为x轴的倍数,y轴的倍数。

scale(2,3);

将容器宽度放大2倍,高度放大3倍。

skew()

通过 skew() 方法,元素将偏斜相应的角度,注意这个偏斜与rotate(旋转)不同,skew将会绕x,y轴偏斜x,y度,观察到的肉眼的形状会改变!比如只偏斜某一轴,则原元素会变成一个平行四边形。(与其他转换一样,其内容也会做对应的变换)

transform: skew(30deg);

skew_x

transform: skew(0deg,30deg);

skew_y

    transform: skew(30deg,30deg);

skew_xy

matrix()

matrix() 方法把所有 2D 转换方法组合在一起。默认值为:transforms:matrix(1,0,0,1,0,0);

matrix() 方法需要六个参数,包含数学函数,允许您:旋转、缩放、移动以及倾斜元素。

matrix原意是矩阵,所以这六个参数分别是矩阵的6个位置的值:

matrix(a,b,c,d,e,f)

matrix1

也就是利用这个矩阵与原容器做运算后获得新位置。

maxtrixCal

所以我们运算过后的结果就是:

x’=ax+cy+e

y’=bx+dy+f

移动

所以根据这个式子,我们可以推算如果要对元素进行x轴移动,则x’直接增大固定数值,即改变e的值:

  1. 向x轴移动10px,y不变

    matrix(1,0,0,1,10,0)

  2. 向x,y轴都移动10px

    matrix(1,0,0,1,10,10)

缩放

缩放的实质就是奖x,y轴的数值放大n倍,即:

x’=2y

y’=2x

对于上面的:

x’=ax+cy+e

y’=bx+dy+f

可得到:

nx = ax+cy+e

ny = bx+dy+f

易得:

a = n
b = 0
c = 0
d = n
e = 0
f = 0

即,进行缩放的话,我们只需要修改a,d的值以修改宽,高的缩放程度

旋转

利用极坐标,我们可以算出偏移角度与元素某点的坐标的关系。

matrix_rotate

根据原理图得:

matrix_rotate1

推算可以得到:

matrix_rotate2

所以,我们得:

a = cosθ

b = -sinθ

d = sinθ

e = cosθ

所以改变abde,即可实现旋转。

偏移

同样由数学知识

maxtrix_skew.png

即:

b = tanθx
e = tanθy

所以,skew操作只与b、e相关。

不过如果不是利用CSS3来做一些复杂的变换,可以用这种方式来减少代码。否则最好不要使用这个函数,因为它可能会使你的调试复杂困难。

transform-origin()

该属性确定转换的基点位置。

example:

transform-origin:20px 20px;

规定变换的基点为:(x=)20px (y=)20px

其值可以为:

  • left
  • center
  • right
  • length
  • %

CSS3的3D转换

我们在2D之中,我们看过“translate,scale,rotate”这三个变换属性。在3D变换中,这三个属性被拆分3个方向的分属性:

3d-rays

  1. translate()

    • translateX()
    • translateY()
    • translateZ()
  2. scale()

    • scaleX()
    • scaleY()
    • scaleZ()
  3. ratate()

    • rotateX()
    • rotateY()
    • rotateZ()

每个方向上的分量分别是沿某一轴变换。比如:translateX(120)表示沿X轴正方向移动120px。

另外3D还有几个属性:

transform-style

CSS 属性 transform-style 设置元素的子元素是位于 3D 空间中还是平面中。

| flat | 设置元素的子元素位于该元素的平面中。 | |
| ———– | ———————————— | |
| preserve-3d | 指示元素的子元素应位于 3D 空间中。 | |

transform-style

perspective-origin

perspective-origin属性也可以有3参数方式,第三个值为Z值。

backface-visibility

backface-visibility 属性定义当元素不面向屏幕时是否可见。

backface-visibible

perspective&&perspective-origin

perspective 属性定义 3D 元素距视图的距离,以像素计。(类似于AE相机中的属性值)。

当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。

元素添加perspective属性后,可再添加perspec-origin控制观察位置(类似与AE中的相机的x,y位置)。

注释:perspective 属性只影响 3D 转换元素

    .father{
    width:400px;
    height:400px;
    perspective:120px;
    perspective-origin:10px 10px;
    background-color:blue;
    margin: 60px;
    }
    .son{
    margin:60px ;
    width:120px;
    height:120px;
    background-color:gray;
    transform: rotateX(30deg);
    }

我们观察当perspective-origin值与perspective值改变时,元素发生的变化。

perspective

可以明显看出,当perspective值改变的时候,相当于我们视觉的位置与元素的距离发生了改变。而当perspective-origin发生改变的时候,我们是视觉的x,y位置发生了改变,所以我们看到元素的形状及其位置发生了改变。

Last

CSS3中的3D变换算是一门学问,下一章解析过渡的时候一起再解析一下,让自己多理解一下。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2019 - 2024 My Wonderland All Rights Reserved.

UV : | PV :