美文网首页
CSS3 transform Matrix

CSS3 transform Matrix

作者: 晨曦_f83d | 来源:发表于2021-02-28 18:10 被阅读0次

之前大家在CSS3 动画里用到比较多的transform属性,实际上transform属性的好多方法都是可以通过matrix实现的效果。本文以2D效果举例。

1、 transform属性

包括几个常用方法

  • skew (斜拉)
  • scale (缩放)
  • rotate (旋转)
  • translate (位移)

上面的几种方法都是应用matrix()方法实现的

2、matrix方法

用法

transform: matrix(a,b,c,d,e,f);
实际上对应的矩阵是 矩阵.png

以上矩阵中的1,是2D矩阵不涉及Z轴,所以将Z轴置常数1

转换的公式如下


转换公式.png

其中x, y表示转换元素的坐标(变量), 运用的是线性代数矩阵的乘法,可以得出转换后的坐标了。

举例设置

transform: matrix(1, 0, 0, 1, 100, 100);

效果就是往右平移100px的同时往下也平移了100px

3、matrix矩阵实现缩放,旋转以及拉伸

推导rotate(βdeg)


矩阵推导.png
# 由(x,y)旋转到(x',y ')
x' = cos(β+α)*r
y' = sin(β+α)*r

已知公式:
r = √x^2+y^2

和差化积公式:
sin(β+α)= sin(β)cos(α) + cos(β)sin(α)
cos(β+α) = cos(β)cos(α) - sin(β)sin(α)

正弦余弦
sin(α) = y/r
cos(α) = x/r

所以得到
x' = cos(β+α)*r = cos(β)cos(α)r-sin(β)sin(α)*r    = cos(β)x - sin(β)y
y' = sin(β+α)*r = sin(β)*cos(α)*r+cos(β)sin(α)*r  = sin(β)x + cos(β)y

整理出矩阵如下
|cos(β)    - sin(β)  |  * | x |     =   | x'|
| sin(β)    cos(β)   |    | y |         | y'|
  1. 上面matrix矩阵中的参数分别为
    a 水平缩放
    b 水平拉伸
    c 垂直拉伸
    d 垂直缩放
    e 水平位移
    f 垂直位移

  2. 实现默认方法的矩阵可以由一定的数学推导得出


    矩阵.png

    缩放:scale(a) 等同于 matrix(a, 0, 0, a, 0, 0);
    平移:translate(m, n) 等同于 matrix(1, 0, 0, 1, m, n);
    旋转:rotate(ndeg) 等同于 matrix(cos(ndeg), sin(ndeg), -sin(ndeg), cos(ndeg), 0, 0);
    拉伸:skew(mdeg, ndeg) 等同于 matrix(1, tan(ndeg), tan(mdeg), 1, 0, 0);

矩阵的优势是可以通过计算,然后将平移旋转等效果整合到一个表达式内。
比如 transform: skewX(45deg) scale(1.2);

换成矩阵


矩阵.png

最后我们只需要设置 transform: matrix(1.2,0,1.2,1.2,0,0);

4、用处

虽然有了matrix转换矩阵,但是日常中直接使用提供出来的translate, rotate等方法比较方便, 这比使用矩阵方便的多。
确实对于一般交互,用transform默认提供的方法足够了,但是一些其它效果,没有直接方法,这时就需要使用matrix方法了。
比如参考文档里张鑫旭的镜像对称,可以用matrix矩阵方式,可以做图片的镜像对称。(比如有时候拍照,前置摄像头拍出来的照片是反的,如果有需求还原,可以用这个矩阵的方法复原)

另外在SVG、Canvas、WebGL、CSS 3D中都有应用矩阵的方法。

参考资料和演示demo地址
CSS3演示地址
Css高阶用法(一) matrix
理解CSS3 transform中的Matrix(矩阵)
MDN matrix

相关文章

  • matrix矩阵

    原文-理解CSS3 transform中的Matrix(矩阵) by张鑫旭 transform中将用到这个变化矩...

  • css3 Matrix

    Matrix 今天终于搞明白的Matrix在css3 transform中是怎么回事了。 在网上查了半天,也都是讲...

  • CSS3 transform Matrix

    之前大家在CSS3 动画里用到比较多的transform属性,实际上transform属性的好多方法都是可以通过m...

  • TRANSFORM

    CSS3详解:transform CSS3 transform是什么?transform的含义是:改变,使…变形;...

  • CSS3的transform

    CSS3 transform是什么?transform的含义是:改变,使…变形;转换CSS3 transform都...

  • transform

    CSS3 transform是什么?transform的含义是:改变,使…变形;转换CSS3 transform都...

  • CSS3 transform 中的 matrix

    CSS的transforn详解 位移,旋转,偏移,缩放分别使用translate/rotate/skew/scal...

  • CSS3 transform 中的 matrix

    CSS的transforn详解 位移,旋转,偏移,缩放分别使用translate/rotate/skew/scal...

  • 7月第四周

    7.24 CSS3 属性之 transform & translation transform: translat...

  • 网页高级知识点(三)

    CSS3 transition动画 CSS3 transform变换 CSS3 animation动画

网友评论

      本文标题:CSS3 transform Matrix

      本文链接:https://www.haomeiwen.com/subject/npsgfltx.html