CSS过渡(有点类似补间动画)可以使元素从一种状态到另外一种状态的这个过程表现得更加柔顺。如下例所示,把鼠标放上去就能看到过渡动画了。
下表是每种浏览器支持相应属性的最低版本,其中-ms-、-webkit-、-moz-、-o-这些前缀,指每种浏览器支持3D变换属性的最低版本浏览器中,需要加上这些前缀,比如在4.0版本的Firefox浏览器中如果要想用transition属性,则需要写成-moz-transition属性;剩下的以此类推。
属性 | |||||
---|---|---|---|---|---|
transition | 26.0 4.0 -webkit- |
10.0 | 16.0 4.0 -moz- |
6.1 3.1 -webkit- |
12.1 10.5 -webkit- |
transition-delay | 26.0 4.0 -webkit- |
10.0 | 16.0 4.0 -moz- |
6.1 3.1 -webkit- |
12.1 10.5 -webkit- |
transition-duration | 26.0 4.0 -webkit- |
10.0 | 16.0 4.0 -moz- |
6.1 3.1 -webkit- |
12.1 10.5 -webkit- |
transition-property | 26.0 4.0 -webkit- |
10.0 | 16.0 4.0 -moz- |
6.1 3.1 -webkit- |
12.1 10.5 -webkit- |
transition-timing-function | 26.0 4.0 -webkit- |
10.0 | 16.0 4.0 -moz- |
6.1 3.1 -webkit- |
12.1 10.5 -webkit- |
为了创建过渡效果,就必须定义好两点:
如果总时长没有定义,那则不会显示出过渡效果,因为缺省状态下默认时长为0,那就代表着没有过渡效果。
div { width: 100px; height: 100px; background: #46acb6; -webkit-transition: width 2s; /* Safari */ transition: width 2s; }
上面定义的这个过渡效果是针对该元素width属性的值发生改变的情况下而触发的,如下例所示,当鼠标悬浮在此div元素上,width属性变成300px,因此,触发上述设置的2秒长的过渡效果。
div:hover { width: 300px; }
如下所示,一次性定义多组过渡效果,绑定了该元素的width属性和height属性。
div { -webkit-transition: width 2s, height 4s; /* Safari */ transition: width 2s, height 4s; }
贫道之前展示的过渡效果都是缓慢开始,然后变快,最后缓慢结束,那么如果想不一样呢呢?那就要说到transition-timing-function
这个属性了。其取值范围如下所示:
ease
- 过渡效果的速度是缓慢开始,然后变快,最后缓慢结束(默认)linear
- 线性匀速变化ease-in
- 缓慢起步ease-out
- 缓慢结束ease-in-out
- 缓慢起步并缓慢结束cubic-bezier(n,n,n,n)
- 自定义速率变化案例如下,试试呗~
#div1 {transition-timing-function: linear;} #div2 {transition-timing-function: ease;} #div3 {transition-timing-function: ease-in;} #div4 {transition-timing-function: ease-out;} #div5 {transition-timing-function: ease-in-out;}
通过CSS中的transition-delay
属性可以让过渡效果延时指定时长后再生效。如下例所示,延时1秒:
div { -webkit-transition-delay: 1s; /* Safari */ transition-delay: 1s; }
前面两节说的transform变换也可以通过这种方式加上过渡效果,具体操作如下所示:
div { -webkit-transition: width 2s, height 2s, -webkit-transform 2s; /* Safari */ transition: width 2s, height 2s, transform 2s; }
洒家先举一个例子,如下所示:
div { transition-property: width; transition-duration: 2s; transition-timing-function: linear; transition-delay: 1s; }
洒家是一个粗人,洒家是一个文盲,洒家没有文化,洒家是一个懒汉,洒家想少用一点属性名,于是洒家只用transition
属性通吃了上述4中属性,于是乎,如下所示:
div { transition: width 2s linear 1s; }