2D转换

IE10、Firefox、Opera 支持 transform 属性

Chrome、Safari 需要前缀 -webkit- 。

IE9 需要前缀 -ms- 。

translate():接收两个参数:水平移动的距离、垂直移动的距离

transform: translate(50px, 100px);

可以分别使用 translateX() 或者 translateY() 进行单独指定。

rotate():接收一个参数:顺时针(正数)或逆时针(负数)旋转的角度

transform: rotate(45deg);

scale():接收两个参数:width 的倍数、height 的倍数

transform: scale(0.5, 0.5);

使用 scaleX() 或者 scaleY() 单独指定。

skew():接收两个参数:围绕 X 轴翻转的角度、围绕 Y 轴翻转的角度

transform: skew(30deg, 30deg);

使用 skewX() 或者 skewY() 单独指定。

如果需要同时应用多于一种转换效果,需要使用空格,而不是逗号

transform: scale(2, 2) rotate(45deg);

transform-origin:其默认值为 transform 元素的中心点,即 50% 50% ;可以改变这个属性的值,从而改变转换的中心点。

比如将其 transform-origin 设置为 0 0 ,使用 scale() 转换,能明显看出区别。

中心点的设置是相对于元素的左上角,可以使用像素法、百分比法、关键字法自定义转换的中心点。

matrix()详解

matrix():接收 6 个参数:a、b、c、d、e、f

其计算规则为:

其中,x 和 y 表示转换前矩阵偏移元素中心点的坐标;x' = ax + cy + e 和 y' = bx + dy + f 分别表示转换后的坐标。

中心点的坐标固定为(0, 0),这个值与 transform-origin 的值无关;也就是说,即使 transform-origin 的值从默认的 50% 50% 被指定为 (假设)30px 30px ,其意为坐标 (0, 0) 从 50% 50% 的位置移动到 30px 30px 的位置; 30px 30px 这个点是新的中心点,其坐标为 (0, 0) 。

假设 matrix(1,0,0,1,30,30) ;

那么 x' 和 y' 分别等于 x + 30 和 y +30 ;

也就是说,经过矩阵转换之后,(0, 0) 变成 (30, 30) ,(1, 1) 变成 (31, 31) ,以此类推。。。直到转换元素所有的坐标都经过变化之后,在新的位置上组成了一个新的图形。

其结果与 translate(30px, 30px) 完全相同。

动态演示参考这里

总结

位移:

matrix(1, 0, 0, 1, tx, ty)  ===  translate(tx + "px", ty + "px")

x' = x + tx

y' = y + ty

缩放:

matrix(sx, 0, 0, sy, 0, 0)  ===  scale(sx, sy)

x' = sx * x

y' = sy * y

旋转:

matrix(cosθ, sinθ, -sinθ, cosθ, 0, 0)  ===  rotate(θ + "deg")

顺序为 CS - SC ;

x' = x * cosθ - y * sinθ

y' = x * sinθ + y * cosθ

需要传入具体的 cos 或者 sin 值。

斜切:

matrix(1, tan(θy), tan(θx), 1, 0, 0)  === skew(θx + "deg", θy + "deg")

x' = x * tan(θx)

y' = y * tan(θy)

参考:

理解 CSS3 transform 中的 matrix (矩阵)

CSS 2D转换 matrix() 详解的更多相关文章

  1. css大小单位px em rem的转换和详解

    css大小单位px em rem的转换和详解 PX特点1. IE无法调整那些使用px作为单位的字体大小:2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位:3. Firefox能 ...

  2. css样式继承规则详解

    css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...

  3. CSS 2D 转换

    通过CSS 2D转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 2D转换一共五个属性:transfrom=> translate(X轴数值px,Y轴数值px):元素从其当前位置移动,根据 ...

  4. css 之position用法详解

    css  之position用法详解: http://www.jb51.net/web/77495.html

  5. SQL Server日期时间格式转换字符串详解

    本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...

  6. CSS定位属性Position详解

    CSS中最常用的布局类属性,一个是Float(CSS浮动属性Float详解),另一个就是CSS定位属性Position. 1. position:static 所有元素的默认定位都是:position ...

  7. eigen Matrix详解

    Eigen Matrix 详解 在Eigen中,所有的matrices 和vectors 都是模板类Matrix 的对象,Vectors 只是一种特殊的矩阵,行或者列为1. Matrix的前三个模板参 ...

  8. DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)

    css中cursor属性详解-鼠标移到图片变换鼠标形状   语法: cursor : auto | all-scroll | col-resize| crosshair | default | han ...

  9. Css盒模型属性详解(margin和padding)

    Css盒模型属性详解(margin和padding) 大家好,我是逆战班的一名学员,今天我来给大家分享一下关于盒模型的知识! 关于盒模型的属性详解及用法 盒模型基本属性有两个:padding和marg ...

随机推荐

  1. 储存与更新 access_token

    做微信的项目,一开始就是 access_token 的申请,微信文档上写的比较清楚: 1.为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器.而其他业务逻辑服务 ...

  2. Web API路由

    前言 本文描述了 ASP.NET Web API 如何将 HTTP 请求路由到控制器. 如果你熟悉Asp.Net MVC,Web API的路由与Asp.Net MVC的路由是非常类似的.这主要的区别就 ...

  3. 学习Shell脚本编程(第5期)_表达式的比较

    字符串操作符 逻辑运算符 用test比较的运算符 数字比较符 文件操作符 在Shell程序中,通常使用表达式比较来完成逻辑任务.表达式所代表的操作符有字符操作符.数字操作符.逻辑操作符.以及文件操作符 ...

  4. Java系列,《Java核心技术 卷1》,chapter 13,集合

    13.1.2 Java类库中的集合接口和迭代器接口     删除元素,对于next和remove的调用是互相依赖的,如果调用remove之前没有调用next,则会跑出IllegalStateExcep ...

  5. initializer for conditional binding must have optional type not AVAudioPlayer

    if let buttonBeep = self.setupAudioPlayerWithFile("ButtonTap", type: "wav") {    ...

  6. 20145222黄亚奇《Java程序设计》第4周学习总结

    教材学习内容总结 第6章 为了避免重复的行为定义使用继承. 要学会如何正确判断使用继承的时机以及继承之后如何活用多态. 继承的好处之一,就是若你要将name.lexel.blood改为其他名称,那就只 ...

  7. 学习笔记——Maven实战(九)打包的技巧

    “打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码.编译生成的字节码.配置文件.文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR ...

  8. android之读取SD卡状态

    package xidian.dy.com.chujia; import android.os.Build; import android.os.Environment; import android ...

  9. 随堂练习——Rational rose

    管理员 学生

  10. oracle 简述

    1.数据库有很多的管理工具,Sqlplus是最好的管理工具. 2.sql语句是学习中最难的部分,如何编写出高效的sql 语句是我们的目标 3.oracle的日常最终要的工作就是备份,永远是备份,有数据 ...