Npcink Blog
切换菜单

CSS3 实现伪类 hover 离开时平滑过渡效果

给 hover 做个动画

本页目录3 节

这里我们要使用 transition 标签

效果预览

<div class="n-box"></div>
<p>请把鼠标指针移动到蓝色的 div 元素上,就可以看到过渡效果。</p>
<p><b>注释:</b>本例在低版本 Internet Explorer 中无效。</p>
<style type="text/css">
.n-box
{
width:100px;
height:100px;
background:blue;/*背景颜色*/
transition:width 2s;/*动画*/
-moz-transition:width 2s; /* Firefox 4 */
-webkit-transition:width 2s; /* Safari and Chrome */
-o-transition:width 2s; /* Opera */
}
.n-box:hover/*触发*/
{
width:300px;
}
</style>

方法介绍

transition:颜色 变换延续的时间 变换速率

transition:background-color 0.3s linear

变换速率:

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]区域内,否则无效。

<p>//Mozilla内核</p>
<p>-moz-transition :</p>
<p>//Webkit内核</p>
<p>-webkit-transition :</p>
<p>//Opera</p>
<p>-o-transition :</p>
<p>//W3C 标准</p>
<p>transition :</p>

下面实例,演示,鼠标经过时,改变 div 宽度,平滑改变,带动画

CSS:

.n-box
{
width:100px;
height:100px;
background:blue;/*背景颜色*/
transition:width 2s;/*动画*/
-moz-transition:width 2s; /* Firefox 4 */
-webkit-transition:width 2s; /* Safari and Chrome */
-o-transition:width 2s; /* Opera */
}
.n-box:hover/*触发*/
{
width:300px;
}

HTML:

<div class="n-box">div>
<p>请把鼠标指针移动到蓝色的 div 元素上,就可以看到过渡效果。p>
<p><b>注释:b>本例在低版本 Internet Explorer 中无效。p>

补充说明

transition 有一个特性,只要是带有数值类型的属性(例如:% , rgba() , rgb() , hsla() , 数字等),在其发生变化的时候,均会被触发动画效果。

因此,不管:hover 伪类什么时候丢掉我的动画,也不管我:hover 时,元素动画走到了什么地步。只要元素本身带有 transitioin,该动画便会从当前动画执行到的地方,以相同的时间返回原样。

这只是最简单的动画实现,但对于目前大部分需求来说,配合配合贝塞尔曲线,已经足够用了。

你仅仅需要做到,hover 中的最终样式,保证为数值样式变 OK 了。

像 display:block 变为 display:none 就不好使了,此时我们可以用 visibilty:1 变为 visibilty:0,同样也可以简单实现显示到隐藏的效果。

另外加一句,不太清楚 transition 属性的可以自行去百度去,transition-timing-function 属性定义的速度曲线,使用 cubic-bezier 贝塞尔曲线,可以做到很多效果,大家可以上这个网址去试一试贝塞尔曲线实现的动画。