为了账号安全,请及时绑定邮箱和手机立即绑定

为什么CSS中的.foo a:link,.foo a:visited {}选择器会覆盖a:

为什么CSS中的.foo a:link,.foo a:visited {}选择器会覆盖a:

万千封印 2019-10-21 12:47:05
示例代码:http : //jsfiddle.net/RuQNP/<!DOCTYPE html><html><head>    <title>Foo</title>    <style type="text/css">        a:link, a:visited {            color: blue;        }        a:hover, a:active {            color: red;         }        .foo a:link, .foo a:visited {            color: green;        }        /* A possible fix */        /*        .foo a:hover, .foo a:active {            color: red;        }        */    </style></head><body>    <div class="foo">        <a href="http://example.com/">Example</a>    </div></body></html>我期待的是:该链接在悬停时将显示为红色。我得到的是:该链接在悬停时显示为绿色。问题:为什么在colorin .foo a:link, .foo a:visited 选择器中定义的优先于in a:hover, a:active?这是怎么回事?我知道我可以修复它,并通过取消注释注释的代码来获得期望的结果。但是,我想知道如何校正 .foo a:link, .foo a:visited选择器,使其不会覆盖colorin中的定义a:hover, a:active?如果我能正确理解http://www.w3.org/TR/CSS21/cascade.html#specificity(感谢BoltClock),则这是代码中各种选择器的特异性表。a:link         - 0 0 1 1a:visited      - 0 0 1 1a:hover        - 0 0 1 1a:active       - 0 0 1 1.foo a:link    - 0 0 2 1.foo a:visited - 0 0 2 1因此,为定义的样式.foo a:link会覆盖伪类和伪类都应用于class的A元素a:hover时的样式。linkhoverfoo同样,为定义的样式.foo a:visited会覆盖伪类以及伪类都应用于class的A元素a:hover 时的样式。visitedhoverfoo
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

当你第一次开始使用CSS,你可能已经了解了爱恨交织助记符在其中指定链接选择器(顺序a:link,a:visited,a:hover,a:active)。您是否曾经想过为什么选择此助记符?


好,规范中有一条注释,说明当使用多个规则和动态伪类的所有规则应用于同一个元素时,如何处理它们,这说明了为什么需要按此顺序设置链接选择器:


请注意,必须将A:hover放在A:link和A:visited规则之后,否则级联规则将隐藏A:hover规则的'color'属性。同样,由于A:active放置在A:hover之后,因此当用户激活并悬停在A元素上时,将应用活动颜色(石灰)。


无论如何,我在上面要说明的一点是,作为伪类的所有四个伪类都具有相同的特异性。关于特异性的其他所有内容都适用。在这种情况下,在一堆同样特定的选择器中,将应用最后一个规则。何时或如何触发每个伪类与之无关。


现在,.foo选择器的简单介绍使您的第二组链接/访问规则覆盖了您的第一组链接/访问样式和悬停/活动样式,从而迫使具有该类的元素中的链接始终显示为绿色,直到您添加悬停/ .foo选择器激活样式。


抱歉,如果我的答案似乎被缝合或滑了一下,我现在正在iPhone上输入此字,很难在这里思考...


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 627 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信