matrix()
:以一个含6个值的(a,b,c,d,e,f)变换矩阵的形式制定一个2D变换,相当于直接应用[a,b,c,d,e,f]变换矩阵。
translate()
:指定对象的2D平移。第一个参数对应x轴,第二个参数对应y轴,若第二个参数没有,默认为0。
translateX()
:指定对象X轴(水平方向)的平移。
translateY()
:指定对象Y轴(垂直方向)的平移。
rotate()
:指定对象的2D旋转,需要先定义transform-origin属性。
scale()
:指定对象的2D缩放。第一个参数对应X轴,第二个参数对应Y轴。如果第二个参数未提供,则默认取第一个参数的值。Zoom是改变视图的显示大小,scale是改变图形尺寸的大小!
scalex()
:指定对象X轴的(水平方向)缩放。
scaley()
:指定对象Y轴的(垂直方向)缩放。
skew()
:指定对象的斜切扭曲。第一个参数对应X轴,第二个参数对应Y轴。如果第二个参数未提供,则默认为0。
.
skewx()
:指定对象X轴的(水平方向)扭曲。
.
scaley()
:指定对象Y轴的(垂直方向)扭曲。
3D Transform同理,具体取值如下:
matrix3d()
:以一个4x4矩阵的形式指定一个3D变换。
translate3d()
:指定对象的3D位移。第1个参数对应X轴,第2个参数对应Y轴,第3个参数对应Z轴,参数不允许省略。
translateZ()
:指定对象Z轴的平移。
rotate3d()
:指定对象的3D旋转角度,其中前3个参数分别表示旋转的方向x,y,z,第4个参数表示旋转的角度,参数不允许省略。
rotateX()
:指定对象在x轴上的旋转角度。
rotateY()
:指定对象在y轴上的旋转角度。
rotateZ()
:指定对象在z轴上的旋转角度。
scale3d()
:指定对象的3D缩放。第1个参数对应X轴,第2个参数对应Y轴,第3个参数对应Z轴,参数不允许省略。
scaley()
:指定对象Y轴的(垂直方向)缩放。
.
scalez()
:指定对象的z轴缩放。
.
perspective()
:指定透视距离。
transform几个值的先后问题:先旋转(改变坐标系),再通过translateZ进行定位。
matrix矩阵扩展
transform的
matrix()
是其他变换的基础,可以通过配置参数扩展为其他的变换。写法如下:
transform: matrix(a,b,c,d,e,f);
其对应的矩阵如下:
则初始坐标x,y
可以构成一个3*1
的矩阵(x,y,1),两个矩阵相乘,可以算出变换后的坐标x',y'
,得出一个3*1
的矩阵(x',y',1)。如下图所示:
此时,变换后的坐标即为 x'= ax+ cy+ e, y'= bx+ dy +f
。
因此,几个矩阵变换的转换如下:
平移:
transform: matrix(1, 0, 0, 1, tx, ty)
==
transform: translate(tx,ty)
缩放:
transform: matrix(sx, 0, 0, sy, 0, 0)
==
transform: scale(sx,sy)
旋转:
transform: matrix(cosθ,sinθ,-sinθ,cosθ,0,0)
==
transform: rotate(θ)
拉伸:
transform: matrix(1,tan(θy),tan(θx),1,0,0)
==
transform: skew(tx,ty)
matrix3d同理,为一个4*4的矩阵定义一个3D变换的序列。
scale和zoom的区别
zoom的缩放是相对于左上角的;scale的缩放是相对于transform-origin的
zoom的缩放改变了元素占据的空间大小,scale缩放占据原始尺寸不变,页面布局不发生变化。
zoom渲染图片比较锐利,scale渲染比较模糊。
对文字的缩放规则不一样。zoom受限于最小12px中文大小限制,scale则是纯粹地图形进行比例控制。
渲染的性能差异比较明显。由于zoom缩放会改变元素的真实大小,因此zoom改变会引起整个页面的重新渲染,scale只是在当前的元素上重绘。
scale和zoom的缩放效果会叠加。
点我查看DEMO
坐标系统 transform-origin
transform旋转默认是绕着中心点进行旋转,也就是
transform-origin
对应的点,若对该属性重新设置的时候,矩阵相关计算的中心店也改变了,例如
-webkit-transform-origin: bottom left;
将坐标中心点移到左下角,
transform-origin: 50px 70px;
将坐标移动到距离左侧50px,顶部70px的地方。此时(30,30)为图中所示的点。
指定观察者与[z=0]平面的距离,产生透视效果。[z>0]时比正常大,[z<0]时比正常小。默认值为none,可以取长度值表示与[z=0]平面的距离,不允许负值。
perspective有两种书写,一种是用在舞台元素上(该动画元素的父辈元素上),另一种是用在当前的动画元素上,与transform其他属性在一起。
舞台元素上:
.stage {
perspective: 600px;
当前动画元素上:
#stage .box {
transform: perspective(600px) rotateY(45deg);
检索或设置对象变换时的过渡。这是一个复合属性,顺序是[ none | <single-transition-property> ] || <time> || <single-transition-timing-function> || <time>
只有一个时间时,为transition-duration的定义,如果有两个的话,第二个为transition-delay的定义。
transition-property
检索或设置对象中的参与过渡的属性。默认值为all,默认为所有可以进行过渡的css属性,none表示不指定过渡的css属性,或者根据属性值单独指定。
transition-duration
检索或设置对象过渡的持续时间。
transition-timing-function
检索或设置对象中过渡的动画类型。默认为ease,有如下几种取值:
linear
:线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
ease
:平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)。
ease-in
:由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)。
ease-out
:由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)。
ease-in-out
:由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)。
steps
:接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。第二个参数是可选的,默认值为end。
step-start
:等同于 steps(1, start)。
step-end
:等同于 steps(1, end)。
cubic-bezier
:特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内。
检索或设置对象所应用的动画特效。。这是一个复合属性,顺序是<single-animation-name> || <time> || <single-animation-timing-function> || <time> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state>
只有一个时间时,为animation-duration的定义,如果有两个的话,第二个为animation-delay的定义。
animation-name
检索或设置对象中的参与过渡的属性。检索或设置对象所应用的动画名称,必须与规则@keyframes配合使用,因为动画名称由@keyframes定义
animation-iteration-count
检索或设置对象动画的循环次数。默认值为1,当取infinite表示是无限循环。
animation-direction
检索或设置对象动画在循环中是否反向运动。默认值为normal,具体取值如下。
normal
:正常方向
reverse
:反方向运行
alternate
:动画先正常运行再反方向运行,并持续交替运行
alternate-reverse
:动画先反运行再正方向运行,并持续交替运行