前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【css基础】如何理解transform的matrix()用法

【css基础】如何理解transform的matrix()用法

原创
作者头像
前端达人
修改于 2019-06-20 15:41:26
修改于 2019-06-20 15:41:26
2.9K0
举报
文章被收录于专栏:前端达人前端达人

实现炫酷的网页动画效果,自然少不了css3中transform的属性,此属性功能丰富且强大,比如实现元素的位移translate(x,y),缩放scale(x,y),2d旋转rotate(angle),倾斜变换skew(x-angle,y-angle)等,利用这些属性可以实现基本的动画效果,如果你要实现自定义和像素级别控制的高级动画效果,我们还需要深入了解它的另外一个属性——matrix,matrix就是矩阵的意思,听起来是不是很高级,你没听错实现更高级的效果,你需要了解“矩阵”,听到“矩阵”,是不是很惊慌,当初笔者学习线性代数时也甚是无聊,真不知道这么课有啥用,没想到这门课的在计算机应用领域应用十分广泛,比如今天说的动画效果,还有现在火爆的人工智能,真是悔不当初,当时没有好好学习这么课程。

今天笔者将从以下几个方面进行介绍:

  • 向量与矩阵基础介绍
  • matrix()示例
  • matrix参数详细介绍

向量与矩阵基础介绍

关于这部分内容,有线性基础的同学们可以忽略往下看,在这里笔者只会介绍最基础的内容,什么是向量和矩阵,以及对应的基础运算。

向量

向量被用于许多科学领域用来描述方向和大小,我们一般用笛卡尔坐标系进行向量的描述,向量简单的来说就是把数排成一列或一行进行展示,比如向量(2,1)和(3,3)在坐标系中表示如下:

假设我们现在有两个向量AB(8,2)和向量AC(2,6),我们对其进行加、减、乘,示例如下:

向量加法:

AB+AC=AD (8,2)+(2,6)=(8+2,2+6)=(10,8)

向量减法

AB-AC= AD (8,2)-(2,6)=(8-2,2-6)=(6,-4)

向量乘法

AB✖️AC = AD (8,2)✖️(2,6)=(8✖️2,2✖️6)=(16,12)

矩阵

简单来说把数排列成长方形就是矩阵,我们一般用几行几列来描述矩阵,比如 2✖️2 矩阵,2✖️3 矩阵等,乘号左边代表行数,乘号右边代表列数,如下图所示表示2✖️2 的矩阵:

矩阵相加

相同规模(行数列数都相等)的矩阵之间的加法如下图所示:

我们可以看出是对应的位置两两相加而得。

矩阵相乘

1、矩阵与向量相乘,示意图如下:

从图可以看出矩阵每行对应的位置与向量每行对应的位置分别相乘最后将结果相加,得到结果每行对应的数字。

2、矩阵与矩阵相乘

比如 2✖️4 的矩阵与 4️✖️3 的矩阵相乘我们得到一个 2✖️3的矩阵,如下图所示

从图示中我们可以看出,我们左边矩阵的每行与右边矩阵的每列分别相乘,相乘规则如矩阵与向量相乘的规则一样,最终得到矩阵的行数等于左边矩阵的行数,列数等于右边矩阵的列数。

matrix()示例

介绍完基本向量和矩阵的知识后,我们来看看transform的matrix()应用举例,transform:matrix(a,b,c,d,tx,ty)一共六个参数,用矩阵表示如下图所示:

注:参数书写的方向是竖着写的。

这六个参数代表什么意思,这里先不做介绍,稍后会详细介绍,我们先从一个例子的应用来讲起,现在我们有这样一个元素,其对应的CSS属性如下:

代码语言:css
AI代码解释
复制
#transformedObject {
     position: absolute;
     left: 0px;
     top: 0px;
     width: 200px;
     height: 80px;
}

此段代码,对应的页面效果如下:

从此图我们可以看出,此长方形的四个顶点从左上顺时针分别为:(0,0),(200,0),(200,80),(0,80),我们对其进行transform:matrix(0.9, -0.05, -0.375, 1.375, 220, 20)的变换,css代码如下:

代码语言:css
AI代码解释
复制
#transformedObject {
     position: absolute;
     left: 0px;
     top: 0px;
     width: 200px;
     height: 80px;
     transform:  matrix(0.9, -0.05, -0.375, 1.375, 220, 20);
     transform-origin: 0 0;
}

注:transform-origin是变形原点,也就是该元素围绕着那个点变形或旋转,该属性只有在设置了transform属性的时候起作用;

应用变换后的效果如下图

这四个点的值,是怎么得出来的呢,其实有了前面的向量和矩阵知识,我们很容易算出,matrix(0.9, -0.05, -0.375, 1.375, 220, 20)对应的矩阵如下图:

元素最初的每个点相当一个向量,例如(200,0)可表示如下图:

变换后的四个点,其实是matrix(0.9, -0.05, -0.375, 1.375, 220, 20)对应的矩阵与原始四个点对应的向量分别相乘而得,具体的运算过程如下图:

与(200, 80)相乘的运算过程得到(370,120):

与(200, 0)相乘得到(400,10):

与(0, 80)相乘得到(190,130):

与(0,0)相乘得到(220,20):

经过运算后,我们最终变换后的四个点: (220,20),(400,10),(370,120),(190,130)

matrix参数详细介绍

上一小节,我们学习了如何利用向量和矩阵的知识,我们算出了元素经过matrix()变换后的最终结果,现在我们详细介绍下transform:matrix(a,b,c,d,tx,ty)这六个参数的意义,其实这六个参数,对应的是translate(x,y),scale(x,y),rotate(angle),skew(x-angle,y-angle)这些效果,每种变换效果对应的参数不同,如下图总结:

假如我们对元素进行旋转15度,往右动230px, X轴方向延长1.5倍,我们使用基本的变换属性代码下:

代码语言:css
AI代码解释
复制
#o1 {
   transform-origin: 0px 0px;
   transform: rotate(15deg) translateX(230px) scaleX(1.5);
}

如果用transform:matrix()怎么实现如上的最终效果,其实我们可以利用笔者针对transform:matrix(a,b,c,d,tx,ty)这六个参数对应的总结(如上图),其实就是每个变换对应的矩阵参数相乘的结果得到这6个参数值,记住一定要按照rotate,translateX,scaleX对应的顺序进行举行相乘,如下图所示(运算的结果笔者就不写了,留给大家练习下矩阵相乘)

小节

今天的内容就到这里,我们了解了transform除了有translate(x,y),scale(x,y),rotate(angle),skew(x-angle,y-angle)这些属性实现动画变换,还有一个高级属性matrix(),通过这个属性我们了解其背后的数学逻辑,只有掌握这个属性后,我们才能实现更为复杂的动画。

【ES6基础】let和作用域

【ES6基础】const介绍

【ES6基础】默认参数值

【ES6基础】展开语法(Spread syntax)

【ES6基础】解构赋值(destructuring assignment)

【ES6基础】箭头函数(Arrow functions)

【ES6基础】模板字符串(Template String)

【ES6基础】Set 与 WeakSet

【ES6基础】Map 与 WeakMap

【ES6基础】Symbol介绍:独一无二的值

【ES6基础】Object的新方法

【数据结构基础】栈简介(使用ES6)

【数据结构基础】队列简介(使用ES6)

更多精彩内容,请微信关注”前端达人”公众号!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【css基础】如何理解transform的matrix()用法
实现炫酷的网页动画效果,自然少不了css3中transform的属性,此属性功能丰富且强大,比如实现元素的位移translate(x,y),缩放scale(x,y),2d旋转rotate(angle),倾斜变换skew(x-angle,y-angle)等,利用这些属性可以实现基本的动画效果,如果你要实现自定义和像素级别控制的高级动画效果,我们还需要深入了解它的另外一个属性——matrix,matrix就是矩阵的意思,听起来是不是很高级,你没听错实现更高级的效果,你需要了解“矩阵”,听到“矩阵”,是不是很惊慌,当初笔者学习线性代数时也甚是无聊,真不知道这门课有啥用,没想到这门课在计算机领域应用十分广泛,比如本文说的动画效果,还有现在火爆的人工智能,真是悔不当初,当时没有好好学习这么课程。
前端达人
2019/06/24
2.6K0
transform的使用方法
在排版当中去合理的使用transform会使我们的排版看起来高大上那么一点。 接下来给大家介绍一下这个神奇的小东西都有什么属性会有什么效果。
说故事的五公子
2020/08/10
1.5K0
transform的使用方法
CSS3 transform 属性(2D,3D旋转)
Internet Explorer 10、Firefox、Opera 支持 transform 属性。
小小咸鱼YwY
2020/06/19
7100
CSS3 transform变换、翻转图片示例
1、translate(x,y) 设置盒子位移 2、scale(x,y) 设置盒子缩放 3、rotate(deg) 设置盒子旋转 4、skew(x-angle,y-angle) 设置盒子斜切 5、perspective 设置透视距离 6、transform-style flat | preserve-3d 设置盒子是否按3d空间显示 7、translateX、translateY、translateZ 设置三维移动 8、rotateX、rotateY、rotateZ 设置三维旋转 9、scaleX、scaleY、scaleZ 设置三维缩放 10、tranform-origin 设置变形的中心点 11、backface-visibility 设置盒子背面是否可见
Devops海洋的渔夫
2019/05/31
3.7K0
Transform 的简单理解 原
canvas里面的transfrom与css3中的基本是一样的,唯一的不同是原点,canvas的默认原点是图形的左上角,css3是图形的中心,
tianyawhl
2019/04/04
7460
Transform 的简单理解
                                                                            原
「css基础」Transforms 属性在实际项目中如何应用?
关于Transform变形属性大家都不陌生吧,可以通过此属性实现元素的位移translate(x,y),缩放scale(x,y),2d旋转rotate(angle),3d旋转rotate3d(angle),倾斜变换skew(x-angle,y-angle)等,你也许已经很熟悉了这些属性,或许你也会有这样的困惑,这些属性在实际项目中如何应用呢?
前端达人
2019/07/21
2.7K0
「css基础」Transforms 属性在实际项目中如何应用?
CSS3 转换(Transform)
在CSS中,允许元素实现 2D 和 3D的转换效果,主要包含 :旋转,缩放,移动,倾斜        
py3study
2020/01/14
8430
CSS3 动画—transform
在 CSS3 中,跟动画相关的属性有:变形 transform、过渡 transition、动画 animation。先放一个 Lea Verou 大神的链接 animatable。
李振
2021/11/26
6700
–探索CSS3动画、过渡
###让我们一起来探索 Transiton(过渡), Transform(变化) , Animation(动画)属性吧! ---- ###Transiton(过渡) transition 属性简写: transition: property(过渡的css属性) duration(持续时间) timing-function(过渡类型) delay(延迟过渡时间); 默认值: transition:all 0 ease 0 详细属性值: transition-property : //设置过渡效果的 CS
大象无痕
2018/07/17
7920
简单总结CSS中元素形状的平滑变化
transition属性包括四个子属性,即transition-property、transition-duration、ransition-timing-function、transition-delay,各个属性的含义见下方表格:
知识分子没文化
2023/07/01
3300
第98天:CSS3中transform变换详解
Transform字面上就是变形,改变的意思。在CSS3中transform主要包括以下几种:旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix。下面我们一起来看看CSS3中transform的旋转rotate、扭曲skew、缩放scale和移动translate具体如何实现,老样子,我们就从transform的语法开始吧。
半指温柔乐
2018/09/11
1.1K0
第98天:CSS3中transform变换详解
CSS3的变形transform、过渡transition、动画animation学习
变形有rotate旋转、scale缩放、translate位移、skew倾斜、matrix矩阵变形、perspective透视几种操作,通过例子来了解各个操作
书童小二
2018/09/03
3.1K0
前端游戏巨制! CSS居然可以做3D游戏了
了解过css3D属性的同学应该都了解过perspective、perspective-origin、transform-style: preserve-3d这个三个属性值, 它们构成了CSS的3d世界.
Nealyang
2021/09/27
2.4K0
前端游戏巨制! CSS居然可以做3D游戏了
【基础系列】CSS专题
    filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */
江中散人_Jun
2023/10/16
3390
【基础系列】CSS专题
css实现鼠标划过图片放大或缩小
每个网站上面都会有文章列表,有的是纯文字形式,有的则是图片+文字形式,两种相对而言当然是第二种更受欢迎,但是第二种加载个多个图片,也会导致网页打开速度变慢,大部分网站采用图片懒加载方式或者即使请求方式来减少资源请求量,提高网页加载速度,减少网站成本,比如阿里云采用的是就是模块化加载,比如底部的一些模块并不是访问了页面就会查看到底部,大部分人都会在菜单找到自己想要的功能,然后进入,如果访问到了底部,那么就会加载底部资源。这个简单的说下,我们还是说说关于图片加载动画的问题;
申霖
2019/12/27
4.2K0
从零开始学 Web 之 CSS3(五)transform
transform 字面上就是变形,改变的意思。在CSS3中transform主要包括以下几种:移动 translate,缩放scale,旋转rotate,翻转skew,改变旋转轴心等。
Daotin
2018/08/31
1.3K0
从零开始学 Web 之 CSS3(五)transform
css3动画效果
transform:2D变形: 通过 CSS3 转换,我们能够对元素进行移动、缩放、转动、拉长或拉伸。转换方法:translate()/rotate()/scale()/skew()/matrix()
用户3159471
2018/09/13
1.7K0
Android 图形处理 —— Matrix 原理剖析
Android 图形库中的 android.graphics.Matrix 是一个 3×3 的 float 矩阵,其主要作用是坐标变换
GeeJoe
2021/12/09
1.5K0
Android 图形处理 —— Matrix 原理剖析
CSS3转换(transform)基本用法介绍
一个炫酷的网页离不开css的transform、transition、animation三个属性,之前一直没有涉及到这块内容,刚好最近要做一个相关东西,趁此机会好好学一学这三个属性。
用户10106350
2022/10/28
1.7K0
CSS3转换(transform)基本用法介绍
CSS3旋转实例学习(附3D旋转实例)
我们都有在网页上见过一些交互性的效果,比如用鼠标滑向图标或是按钮的时候,图标会自动旋转一周,这就是CSS3旋转效果。在CSS3中有个常见的transform应用,transform主要包括以下几种:旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix。本文主要侧重讲解CSS3的平面旋转(2D)方法和立体旋转(3D)方法。不过既然提起transform,还是先普及一下transform属性的基本知识:
RD.Timon
2020/10/26
3.4K0
CSS3旋转实例学习(附3D旋转实例)
相关推荐
【css基础】如何理解transform的matrix()用法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档