matrix
和matrix3d
实现的。前者是2D平面的移动,后者是3D变换。设置对检索对象的转换。其中分为2D Transform和3D Transform两部分。2D Transform取值具体如下:
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进行定位。
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变换的序列。
transform-origin
对应的点,若对该属性重新设置的时候,矩阵相关计算的中心店也改变了,例如-webkit-transform-origin: bottom left;
将坐标中心点移到左下角,transform-origin: 50px 70px;
将坐标移动到距离左侧50px,顶部70px的地方。此时(30,30)为图中所示的点。有两个参数值,一个是横坐标,一个是纵坐标。如果只提供一个,将用于横坐标,纵坐标默认为50%。
默认值为50% 50%
,可以取值如下:
<percentage>
:百分比制定坐标,可以为负。<length>
:用长度指定坐标,可以为负。left
:指定原点的横坐标为left。center
:指定原点的横坐标为center。right
:指定原点的横坐标为right。top
:指定原点的纵坐标为top。center
:指定原点的纵坐标为center。bottom
:指定原点的纵坐标为bottom。transform-style
属性。取值上有preserve-3d
和flat
两个值。flat为默认值,表示所有子元素在2D平面呈现,preserve-3d表示在三维空间内。perspective有两种书写,一种是用在舞台元素上(该动画元素的父辈元素上),另一种是用在当前的动画元素上,与transform其他属性在一起。
.stage {
perspective: 600px;
}
#stage .box {
transform: perspective(600px) rotateY(45deg);
}
backface-visibility
属性,不能在其父元素上,因为该元素不可继承。[ none | <single-transition-property> ] || <time> || <single-transition-timing-function> || <time>
检索或设置对象中过渡的动画类型。默认为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>
normal
:正常方向reverse
:反方向运行alternate
:动画先正常运行再反方向运行,并持续交替运行alternate-reverse
:动画先反运行再正方向运行,并持续交替运行none
:不设置对象动画之外的状态forwards
:设置对象状态为动画结束时的状态backwards
:设置对象状态为动画开始时的状态both
:设置对象状态为动画结束或开始的状态