CSS3-transition 过渡

693 阅读2分钟

在 CSS3 中,我们如果想要实现一种样式到另一种样式的转变,无需再使用 Flash 动画或者是 JavaScript ,CSS3 为我们提供了过渡的效果。

transition

属性 transition 应用于元素的过渡效果,使用时需要指定希望过渡的属性以及过渡持续的时间。

transition属性对应了四个值:

transition: transition | transition-duration | transition-timing-function |
  transition-delay;
  • transition-property 规定了应用于过渡效果的 CSS 属性的名称,默认值为 all 。
  • transition-duration 规定了过渡持续的时间,默认值为 0s。也就是说,如果不指定过渡时间,那么将不会产生过渡效果。
  • transition-timing-function 规定了过渡效果的时间曲线,如 ease (默认):慢速开始,中间变快,慢速结束。liner :匀速运动。
  • transition-delay 规定了过渡效果的延迟时间,默认为 0s 。

transition-timing-function 有一些常用的值:

  • linear:匀速,相当于(cubic-bezier(0,0,1,1))。
  • ease:慢速开始,然后变快,然后慢速结束,相当于(cubic-bezier(0.25,0.1,0.25,1))。
  • ease-in:慢速开始,相当于(cubic-bezier(0.42,0,1,1))。
  • ease-out:慢速结束,相当于(cubic-bezier(0,0,0.58,1))。
  • ease-in-out:慢速开始,慢速结束,相当于(cubic-bezier(0.42,0,0.58,1))。
  • cubic-bezier(n,n,n,n):在 cubic-bezier 函数中定义自己的值,取值范围是 0 ~ 1

当指定多个属性的过渡效果时,用逗号隔开即可:

transition: width 2s ease-in-out, height 2s ease-in-out;
<!DOCTYPE html>
<html>
  <head>
    <title>shiyanlou</title>
    <style type="text/css">
      .div1 {
        margin: 50px;
        width: 200px;
        height: 200px;
        background-color: lightgreen;
        opacity: 0.5;
        transition: 2s ease-in-out;
        /*transition-property 默认为 all,所以将应用到 width 和 height 上*/
      }
      .div1:hover {
        width: 400px;
        height: 400px;
        opacity: 1;
      }
      .div2 {
        margin: 50px;
        width: 200px;
        height: 200px;
        background-color: cyan;
        opacity: 0.5;
        transition: height 2s cubic-bezier(0.25, 0.1, 0.25, 1);
        /*transition-property 只指定了 height,所以 width 的改变不会使用过渡效果;cubic-bezier(0.25,0.1,0.25,1) 相当于 ease,慢速开始,然后变快,慢速结束。*/
      }
      .div2:hover {
        width: 400px;
        height: 400px;
        opacity: 1;
      }
      .div3 {
        margin: 50px;
        width: 200px;
        height: 200px;
        background-color: orange;
        opacity: 0.5;
        transition: 2s ease-in-out 2s;
        /*transition-delay 设置为 2s,当鼠标移到该盒子上,过渡效果将会延迟 2s 开始、结束*/
      }
      .div3:hover {
        width: 400px;
        height: 400px;
        opacity: 1;
      }
      .div4 {
        margin: 50px;
        width: 200px;
        height: 200px;
        background-color: grey;
        opacity: 0.5;
        transition: ;
        /*所有属性使用默认值,transition-timing-function 的默认值为 0s,所以 div4 无过渡效果*/
      }
      .div4:hover {
        width: 400px;
        height: 400px;
        opacity: 1;
      }
    </style>
  </head>
  <body>
    <div class="div1">div1 transition: 2s ease-in-out;</div>
    <div class="div2">
      div2 transition: height 2s cubic-bezier(0.25,0.1,0.25,1);
    </div>
    <div class="div3">div3 transition: 2s ease-in-out 2s;</div>
    <div class="div4">div4 transition: ;</div>
  </body>
</html>

将鼠标挪动到矩形上观察效果。

可以发现,div1 的持续时间设置为 2s,效果采用 ease-in-out,其余为默认值,所以 opacitywidthheight 的改变都会采用过渡效果;div2 中指定了过渡的属性为 height,所以其它两个属性不会使用过渡效果;div3 设置了 transition-delay,过渡效果的开始和结束都会延迟相应的时间;div4 所有的值都使用默认值,包括持续时间 0s,所以 div4 无过渡效果,变化会非常生硬。

自行改变 transition 的值查看效果。