学习css 3D有一段时间了,其中特别有意思的就是transform属性和animate属性。今天来梳理一下transform属性中的Matrix;css
transform官方解释是:bash
向元素应用 2D 或 3D 转换。该属性容许咱们对元素进行旋转、缩放、移动或倾斜。学习
其实用大白话来讲就是spa
一个物体的摆放方式与摆放位置的变化.net
Matrix是transform中的一个属性,也是最重要的一个属性。3d
由于transform所提供的全部 2D 或 3D 的转换,都是经过 Matrix 和 Matrix3D 来实现的。code
官方给咱们的解释是:orm
matrix 定义 2D 转换,使用六个值的矩阵。cdn
matrix3d 定义 3D 转换,使用 16 个值的 4x4 矩阵。blog
matrix 从字面上来看就是矩阵。 是否是让想到了高数中的矩阵了?
没错! 它就是高数中的矩阵在CSS变换上的应用。
matrix 有六个值n, 实际上为了方便理解与阅读,一般把它记忆成这样:
matrix(n,n,n,n,n,n) => matrix(a,b,c,d,e,f);
在css中,Matrix的原始值是:
transform: matrix(1,0,0,1,0,0);
复制代码
放到数学中是这样的:
「 「
1, 0, 0 也就是 a, c, e
0, 1, 0 ======> b, d, f
0, 0, 1 0, 0, 1
」 」
复制代码
说到这里,我好像忘了说它是怎么进行变换的。
我理解的是:
经过两个基向量(i向量和j向量)转换以后的的结果,而不用知道转换自己,咱们就能推导出二维空间中全部向量转换以后的结果。
也就是说经过两个基础向量的变化来获得这个变换系数,而后经过这个变换系数,咱们就能够推导出全部向量的变换后的值。
因此说Matrix的实质就是表示这个矩阵变换的一个矩阵。
因此,它的变换过程就是就是一个矩阵乘法。即:
若是对于矩阵和线性变换理解的不太通顺的能够看看这篇文章 矩阵与线性变换
如今咱们已经知道Matrix变换的实质,可是a,b,c,d,e,f分别表明什么还不知道。
根据上面的矩阵乘法获得了一组方程式就是:
x' = ax + cy + e y' = bx + dy + f
复制代码
若是咱们要x,y向右平移10个单位,那么能够推导一下:
x' = ax + cy + e + 10 复制代码
e是一个常数 因此咱们想让它向右平移n个单位,只须要在e的基础上加上对应的n个单位
同理可得: 向左就是让e减去对应的n个单位
咦,咱们是否是发现translateX就是这样。
正如咱们发现的那样,transfrom中变换属性都是经过对 Matrix 和 Matrix3D 的一种经常使用的封装
根据咱们上面的推理,translateY 也就是改变的f的值
y' = bx + dy + f ± 10 复制代码
而 translate 就是对 translateY 和 translateX 的封装
理解平移之后缩放的理解就简单的多了!
若是咱们要横向放大2倍,看咱们的基础公式,也就是说x的系数 * 2
x' = ax + cy + e ---> 2ax + cy + e 复制代码
若是是纵向放大2倍:
y' = bx + dy + f ---> bx + 2dy + f 复制代码
即:
scale(x, y) -> scaleX(x) + scaleY(y) -> matrix(x * 1, 0, 0, y * 1, 0, 0);
复制代码
后面的有点不知道怎么形容,先存备
还在努力的查资料,努力理解中。。。