CSS 过渡

transition 是 CSS3 中具有颠覆性的特征之一,可以让前端开发者不使用flash动画或Javascript的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。在 CSS3 中使用 transition 可以实现补间动画(过渡效果),并且当前元素只要有 “属性” 发生变化,即存在两种状态时,就可以实现平滑的过渡。

帧动画,通过一帧一帧的画面按照固定顺序和速度播放,如电影胶片。

过渡属性 transition

[ transition 多值! ] transition 是一个复合属性,通过 4 个子属性的配合来完成一个完整的过渡效果。

// 代码示例:为了方便演示采用hover切换两种状态,但并不仅仅局限于hover状态来实现过渡。


[1] 过渡属性 transition-property

[ 可过渡的样式 ] 不是所有的CSS样式值都可以过渡,只有具有中间值的属性才具备过渡效果。


[2] 过渡持续时间 transition-duration: <time>[,<time>]*                 // 该属性的单位是 s 或 ms

  • 该属性不能为负值;
  • 若该属性为0s,则为默认值;若为0则为无效值,所以必须带单位;
  • 该值为单值时,即所有过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应持续时间。

[3] 过渡时间函数 transition-timing-function: <timing-function>[,<timing-function>]*

过渡时间函数共三种取值,分别是:关键字、steps(步进)函数和bezier函数(贝塞尔曲线)。

[ 关键字 ] 关键字,其实是 bezier 函数 或 steps 函数的特殊值

[ steps 步进函数 ]将过渡时间划分成大小相等的时间时隔来运行。

[ 贝塞尔曲线 ] 贝塞尔曲线通过 p0-p3 四个控制点来控制,其中p0表示(0,0),p3表示(1,1)。

而<transition-timing-function>就是通过确定p1(x1,y1)和p2(x2,y2)的值来确定的。


[4] 过渡延迟时间 transition-delay: <time>[,<time>]*                 // 该属性的单位是 s 或 ms

  • 该属性若为负值,无延迟效果,但过渡元素的起始值将从0变成设定值( 设定值=延迟时间+持续时间 );
    • 若设定值小于等于0,则无过渡效果;若设定值大于0,则过渡元素从该设定值开始完成剩余的过渡效果。
  • 若该属性为0s,则为默认值;若为0则为无效值,所以必须带单位;
  • 该值为单值时,即所有过渡属性都对应同样时间;该值为多值时,过渡属性按照顺序对应持续时间。

过渡阶段

过渡阶段?↓ ,即 transition 的触发方式。一般分为三种:伪类触发、媒体查询触发 和 Javascript触发。

[1] 伪类触发:hover、:focus、:active 等

  • hover:鼠标悬停触发
  • focus:获得焦点时触发
  • active:用户单击元素并按住鼠标时触发

[2] @media触发:符合媒体查询条件时触发


[3] 点击事件:用户点击元素时触发                                                       // transition API?↓