在 CSS 领域,选择器特异性可能有点令人费解。让我们深入研究一个有趣的谜题,它演示了 .foo a:link 选择器如何覆盖更具体的 a:hover 和 a:active 选择器。
考虑以下代码:
<div class="foo"> <a href="#">Example</a> </div>
a:link, a:visited { color: blue; } a:hover, a:active { color: red; } .foo a:link, .foo a:visited { color: green; }
预期将鼠标悬停在链接上应将其变为红色,但实际上,它仍保持绿色。这种令人费解的行为需要仔细检查 CSS 级联。
特异性决定了 CSS 规则应用于元素的顺序。较高的特异性胜过较低的特异性。以下公式计算特异性:
计算选择器的特异性:
如您所见,.foo a:link 和 .foo a :visited 选择器比 a:hover 和 a:active 选择器具有更高的特异性 (2 > > 1).
令人惊讶的行为的原因是 .foo a:link 和 .foo a:visited 选择器比 a:hover 和 a:active 具有更高的特异性选择器。这意味着即使 a:hover 和 a:active 在伪类方面更具体,.foo 选择器的类特异性胜出。
要纠正此问题,请使用问题中建议的修复(取消注释 .foo a:hover 和 .foo a:active 规则)是必要的。通过添加与 .foo a:link 和 .foo a:visited 规则具有相同特异性的这些规则,a:hover 和 a:active 样式现在将优先。
以上是为什么 CSS 特异性中的 `.foo a:link` 会覆盖 `a:hover` ?的详细内容。更多信息请关注PHP中文网其他相关文章!