【发布时间】:2011-11-22 09:59:07
【问题描述】:
标题基本上说明了一切。
假设我有一个元素,我想在:hover 上更改颜色,但是在单击时,我希望它切换回原来的颜色。所以,我试过这个:
a:link, a:visited, a:active {
background: red;
}
a:hover {
background: green;
}
事实证明,这是行不通的。经过一番摸索,我意识到:hover 状态正在覆盖:active 状态。这很容易解决:
a:link, a:visited {
background: green;
}
a:hover {
background: red;
}
a:active {
background: green;
}
(我可以将第一条规则与第三条结合起来)。
这是小提琴:http://jsfiddle.net/V5FUy/
我的问题:这是预期的行为吗?据我了解,:active 状态应始终覆盖:hover 状态,因为:active 状态将几乎始终伴随:hover 状态。
【问题讨论】:
-
这是(不幸的)预期行为。我不知道这种奇怪的起源,但只要我记得,它就一直是这样(现在已经有 10 多年了)。也就是说,我认为它保持这种状态是因为浏览器希望彼此保持一致。所有浏览器都遵循此顺序这一事实意味着您编写的代码将适用于所有浏览器。不过,我不同意您的评估,即 :active 应始终覆盖 :hover。
-
@Brendan - 谢谢。你似乎是这里唯一理解我的问题的人。
-
也许这与添加
:active和:hover的顺序有关(分别添加到 CSS1 和 CSS2 中)......我们现在似乎处于历史领域,而不是编程。 -
@JosephSilber 我认为令人困惑的是您认为 :hover 和 :active 是互斥的。实际上,当您悬停时,活动的锚链接具有两个伪类。所以它被第一行设置样式并在之后立即被覆盖。这是一个使用显式类的示例link
-
这是我在外出时用 iPhone 回答的一个相关问题:stackoverflow.com/questions/7371732/…
标签: html css css-selectors css-specificity