有没有仅使用CSS实现:hover
相反效果的方法? 例如::hover
是鼠标进入
,是否有CSS等效的鼠标离开
?
示例:
我有一个使用列表项的HTML菜单,当我悬停在其中一个项目上时,会从#999
到黑色
进行CSS颜色动画。 当鼠标离开项目区域时,如何创建相反的效果,即从黑色
到#999
进行动画?
(请注意,我不只希望回答此示例,而是整个“:hover
相反效果”问题。)
如果我理解正确,你可以通过将过渡效果移到链接上而不是悬停状态来完成相同的事情:
ul li a {
color:#999;
transition: color 0.5s linear; /* vendorless fallback */
-o-transition: color 0.5s linear; /* opera */
-ms-transition: color 0.5s linear; /* IE 10 */
-moz-transition: color 0.5s linear; /* Firefox */
-webkit-transition: color 0.5s linear; /*safari and chrome */
}
ul li a:hover {
color:black;
cursor: pointer;
}
http://jsfiddle.net/spacebeers/sELKu/3/
hover的定义是:
:hover选择器用于在鼠标悬停在元素上方时选择元素。
按照这个定义,hover的相反状态是鼠标不悬停在其上的任何点。有人比我聪明得多,已经在这篇文章中做到了这一点,在两种状态下设置了不同的过渡效果-http://css-tricks.com/different-transitions-for-hover-on-hover-off/
#thing {
padding: 10px;
border-radius: 5px;
/* HOVER OFF */
-webkit-transition: padding 2s;
}
#thing:hover {
padding: 20px;
border-radius: 15px;
/* HOVER ON */
-webkit-transition: border-radius 2s;
}
:hover
“定义”来自W3Schools,他们并不是权威来源。实际规范可以在http://www.w3.org/TR/CSS21/selector.html#dynamic-pseudo-classes找到,尽管它不是最易于理解的解释。 - Mark Amery相反的方法是使用:not
例如:
selection:not(:hover) { rules }
:hover
状态指定样式即可。 - Marat Tanalinli a {
background-color: #111;
transition:1s;
}
li a:hover {
padding:19px;
}
只需将过渡效果添加到您正在操作的元素中即可。请注意,页面加载时可能会出现一些效果。例如,如果您更改了边框半径,您将在dom加载时看到它。
.element {
width: 100px;
transition: all ease-in-out 0.5s;
}
.element:hover {
width: 200px;
transition: all ease-in-out 0.5s;
}
在CSS中,没有明确的鼠标离开属性。
您可以在除了涉及项目之外的所有其他元素上使用:hover来实现此效果。但我不确定这样做有多实用。
我认为您需要考虑一个JS / jQuery解决方案。
ul li {
display: inline;
margin-left: 20px;
}
ul li a {
color: #999;
transition: 1s;
-webkit-animation: item-hover-off 1s;
-moz-animation: item-hover-off 1s;
animation: item-hover-off 1s;
}
ul li a:hover {
color: black;
cursor: pointer;
-webkit-animation: item-hover 1s;
-moz-animation: item-hover 1s;
animation: item-hover 1s;
}
@keyframes item-hover {
from {
color: #999;
}
to {
color: black;
}
}
@-moz-keyframes item-hover {
from {
color: #999;
}
to {
color: black;
}
}
@-webkit-keyframes item-hover {
from {
color: #999;
}
to {
color: black;
}
}
@keyframes item-hover-off {
from {
color: black;
}
to {
color: #999;
}
}
@-moz-keyframes item-hover-off {
from {
color: black;
}
to {
color: #999;
}
}
@-webkit-keyframes item-hover-off {
from {
color: black;
}
to {
color: #999;
}
}
<ul>
<li><a>Home</a></li>
<li><a>About</a></li>
<li><a>Contacts</a></li>
</ul>
使用 transition
的另一种方式就是仅仅指定毫秒数,像这样:transition: 500ms;
尝试下面的代码片段
div{
background: DeepSkyBlue;
width:150px;
height:100px;
transition: 500ms;
}
div:hover{
opacity: 0.5;
cursor:pointer;
}
<div>HOVER ME</div>
当鼠标悬停在 .icon
元素上时,这会为其添加背景颜色,并且鼠标指针离开元素时背景会逐渐消失。
.icon {
transition: background-color 0.5s ease-in-out; /* this is important */
}
.icon:hover {
background-color: rgba(169, 169, 169, 0.9);
}
:hover
的相反操作就是:not(:hover)
,但是:hover
并不等同于onmouseenter
,:not(:hover)
也不等同于onmouseleave
。CSS没有DOM事件的概念。 - BoltClock:hover
简单地意味着“鼠标指针悬停在元素上”。它并不表示鼠标指针是否从另一个元素转移到此元素。它只是表示鼠标指针当前位于该元素上。 - BoltClock:not(:hover)
就会生效。这里有一个演示:http://jsfiddle.net/BoltClock/rghBX - BoltClock