CSS3详解之transition

W3C标准中对CSS3的transition这是样描述的:“CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡。这种效果可以在鼠标单击、获得焦点、被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值。””

浏览器兼容:

目前浏览器支持情况:Safari、 Chrome 、Firefox、Opera、IE10+

接下来我们一起来看看CSS3中transition具体如何实现,首先从transition的语法说起。

语法:

transition : [<‘transition-property’> || <‘transition-duration’> || <‘transition-timing-function’> || <‘transition-delay’> [, [<‘transition-property’> || <‘transition-duration’> || <‘transition-timing-function’> || <‘transition-delay’>]]*

具体简写说明:

transition:property duration timing-function delay;

上面transition 属性是一个简写的属性,主要包含四个过渡属性:

1、transition-property ; //执行变换的属性比如transition-property:backgrond 就是指backgound参与这个过渡

2、transition-duration //变换延续的时间

3、transition-timing-function //在延续时间段,变换的速率变化,也就是指定过渡类型

4、transition-delay //变换延迟时间

下面分别来分析这四个属性值:

一、transition-property

语法:

transition-property: none || all || property;

1、 none: 没有属性改变;

2、 all: 所有属性改变,这个也是其默认值;

3、 property: 元素属性名。可以定义应用过渡效果的 CSS 属性名称列表,列表以逗号分隔。

当其值为none时,transition马上停止执行。

当指定为all时,则元素产生任何属性值变化时都将执行transition效果。

property是可以指定元素的某一个属性值。

二、transition-duration

语法:

transition-duration:time;

transition-duration是用来指定元素转换过程的持续时间,取值:time为数值,规定完成过渡效果需要花费的时间(以秒或毫秒计),可以作用于所有元素,

包括:before和:after伪元素。其默认值是0,意味着不会有效果,也就是变换时是即时的。

三、transition-timing-function:

语法:

transition-timing-function: linear || ease || ease-in || ease-out || ease-in-out || cubic-bezier(n,n,n,n);

取值:

transition-timing-function该属性允许过渡效果随着时间来改变其速度,有6个可能值:

1、ease:(逐渐变慢)默认值,ease函数等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0).

2、linear:(匀速),linear 函数等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0).

3、ease-in:(加速),也就是先慢后快,ease-in 函数等同于贝塞尔曲线(0.42, 0, 1.0, 1.0).

4、ease-out:(减速),也就是先快后慢,ease-out 函数等同于贝塞尔曲线(0, 0, 0.58, 1.0).

5、ease-in-out:(加速然后减速),也就是先慢后快再慢,ease-in-out 函数等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)

6、cubic-bezier:(该值允许你去自定义一个时间曲线), 特定的cubic-bezier曲线。 (x1, y1, x2, y2)四个值特定于曲线上点P1和点P2。所有值需在[0, 1]区域内,否则无效。

更多深入理解可以查看:深入理解CSS过渡transition

四、transition-delay:

语法:

transition-delay:time;

transition-delay是用来指定一个动画开始执行的时间,也就是说当改变元素属性值后多长时间开始执行transition效果,

其取值:time为数值,以秒或毫秒计,其使用和transition-duration极其相似,也可以作用于所有元素,包括:before和:after伪元素。 默认大小是”0″,也就是变换立即执行,没有延迟。

有时我们不只改变一个css效果的属性,而是想改变两个或者多个css属性的transition效果,那么我们只要把几个transition的声明串在一起,用逗号(“,”)隔开,然后各自可以有各自不同的延续时间和其时间的速率变换方式。但需要值得注意的一点:transition-delay与transition-duration的值都是时间,所以要区分它们在连写中的位置,一般浏览器会根据先后顺序决定,第一个可以解析为时间的值为transition-duration,第二个为transition-delay。如:

a:hover{
    -moz-transition: background 0.4s ease-in,color 0.3s ease-out;
    -webkit-transition: background 0.4s ease-in,color 0.3s ease-out;
    transition: background 0.4s ease-in,color 0.3s ease-out;
}

下面我们来看一下具体示例:

demo公用的css为:


.wrap-bg{
    width:600px;
    height:480px;
    background:#f6f6f6;
    margin-left:50px;
}
.wrap-bg div{
    width:100px;
    height:50px;
    text-align:center;
    margin-top:30px;
    line-height:50px;
    color:#fff;
}

不同transition-timing-function类型的动画

html:
<div class="wrap-bg">
    <div class="demo ease">ease</div>
    <div class="demo linear">linear</div>
    <div class="demo ease-in">ease-in</div>
    <div class="demo ease-out">ease-out</div>
    <div class="demo ease-in-out">ease-in-out</div>
    <div class="demo cubic-bezier">cubic-bezier</div>
</div>
css:
.ease{
background:#F05033;
	-moz-transition:box-radius 3s ease 0.5s;
	-webkit-transition:box-radius 3s ease 0.5s;
	transition:box-radius 3s ease 0.5s;
}
.linear{
	background:#2D89EF;
	-moz-transition:all 3s linear 0.5s;
	-webkit-transition:all 3s linear 0.5s;
	transition:all 3s linear 0.5s;
}
.ease-in{
	background:#2B5797;
	-moz-transition:all 3s ease-in 0.5s;
	-webkit-transition:all 3s ease-in 0.5s;
	transition:all 3s ease-in 0.5s;
}
.ease-out{
	background:#B91D47;
	-moz-transition:all 3s ease-out 0.5s;
	-webkit-transition:all 3s ease-out 0.5s;
	transition:all 3s ease-out 0.5s;
}
.ease-in-out{
	background:#603CBA;
	-moz-transition:all 3s ease-in-out 0.5s;
	-webkit-transition:all 3s ease-in-out 0.5s;
	transition:all 3s ease-in-out 0.5s;
}
.cubic-bezier{
	background:#000;
	-moz-transition:all 3s cubic-bezier 0.5s;
	-webkit-transition:all 3s cubic-bezier 0.5s;
	transition:all 3s cubic-bezier 0.5s;
}
/**hover触发**/
.wrap-bg:hover .demo{
	background:#f60;
	-moz-transform: rotate(360deg) scale(1.2);
	-webkit-transform: rotate(360deg) scale(1.2);
	transform: rotate(360deg) scale(1.2);
	border:1px solid rgba(255,230,255,08);
	-moz-border-radius:25px;
	-webkit-border-radius:25px;
	border-radius:25px;
	margin-left:500px;
}

效果:(鼠标hover上灰色背景层可以显示效果)

ease
linear
ease-in
ease-out
ease-in-out
cubic-bezier