CSS过渡属性允许您在悬停和悬停时进行动画处理,前提是将过渡放进和悬停如下:
#inner{
opacity:0;
transition:opacity 2000ms;
}
#outer:hover #inner{
opacity:1;
}
但是,如果将转换移动到:hover
状态,则仅在悬停时发生。
#inner{
opacity:0;
}
#outer:hover #inner{
opacity:1;
transition:opacity 2000ms;
}
是否可以做相反的事情,即仅在悬停时制作动画?
这是实现此目的的一种方法(在 :hover
中为过渡属性放置一个bogus
属性none
):
#inner2{
opacity:0;
transition:opacity 2000ms;
}
#outer:hover #inner2{
opacity:1;
transition:none;
}
http://jsfiddle.net/j716sbav/4/
答案已更新,以纳入@BoltClock的建议。放none
而不是虚假的属性肯定更优雅。
如果您不想多次指定 transition
属性,则可以将转换应用于 :not(:hover)
,但需要注意的是,您还需要交换所有其他声明:
#inner2{
opacity:1;
}
#outer:not(:hover) #inner2{
opacity:0;
transition:opacity 2000ms;
}
这两种方法都可以,但是如果您不想处理令人困惑的反转,请坚持通过transition: none
覆盖。
另请注意,CSS 选择器表示状态而不是事件,这意味着它使用:hover
状态而不是鼠标悬停和鼠标退出事件;但是,从 :hover
到 :not(:hover)
的过渡本质上是表达鼠标退出动画的 CSS 方式。
我知道这是一个非常古老的帖子,但是,当它回应我对这个主题的谷歌搜索时,我想我会发布我的解决方案。
阅读了此处发布的所有内容后,我找到了最简单的解决方案。按如下方式对初始状态进行转换:
.btn {
opacity:0;
transition:0.6s;
}
.btn:hover {
opacity:1;
transition:0.8s;
}
因此,它有一个到悬停状态的过渡时间和到非悬停(即正常)状态的过渡时间。保存一大堆代码。