为啥 a:hover 在 CSS 中会被覆盖?

Posted

技术标签:

【中文标题】为啥 a:hover 在 CSS 中会被覆盖?【英文标题】:Why does a:hover get overriden in CSS?为什么 a:hover 在 CSS 中会被覆盖? 【发布时间】:2010-10-17 14:56:00 【问题描述】:

如果我有这个 CSS:

a:link  color: blue; 
a:hover  color: red; 
#someID a:link  color: black; 

ID 下的链接在悬停时始终显示为黑色。我知道使用 ID 具有更高的优先级,但是,我没有覆盖 :hover 选择器,只有 :link 选择器,所以悬停不应该显示为红色吗?

【问题讨论】:

【参考方案1】:

:link 伪类适用于链接,即使您将鼠标悬停在链接上也是如此。由于带有 id 的样式更具体,它会覆盖其他样式。

:hover 样式完全覆盖:link 样式的唯一原因是它出现在样式表的后面。如果您按此顺序放置它们:

a:hover  color: red; 
a:link  color: blue; 

:link 样式位于样式表的后面并覆盖:hover 样式。当您将鼠标悬停在链接上时,该链接保持蓝色。

要使:hover 样式适用于黑色链接,您必须使其至少与:link 样式一样具体,并将其放在样式表中:

a:link  color: blue; 
a:hover  color: red; 
#someID a:link  color: black; 
#someID a:hover  color: red; 

【讨论】:

感谢您的信息。我实际上决定在原始悬停上使用 !important 规则来覆盖以后的规则。这让我不必添加 #someID a:hover color: red; 每次链接被覆盖。【参考方案2】:

有一个订单问题,如 W3Schools 中所述:

注意:a:hover 必须在 a:link 之后 和 a:visited 在 CSS 定义中 为了有效!!

注意:a:active 必须在 a:hover 之后 在 CSS 定义中,以便 有效!!

http://www.w3schools.com/CSS/css_pseudo_classes.asp

【讨论】:

重新排序样式不足以使 :hover 对黑色链接起作用。 可能不完整(在 CSS 中也必须具有相同的优先级),但一点也不错。此行为在 W3C 标准中有所描述。

以上是关于为啥 a:hover 在 CSS 中会被覆盖?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 plist 中的项目会被覆盖?

关于django url 为啥会被覆盖?

为啥使用 DT_MODIFYSTRING 选项将副本传递给 DrawText 函数时,原始 CString 会被覆盖?

为啥在 IE 10 中 CSS 文本颜色会覆盖占位符颜色?

SVG:为啥外部 css 会覆盖文本的内联样式?

git pull 会导致本地为提交代码被覆盖吗?为啥我从来没出现过,啥情况下才会被覆盖呢?