为什么:link伪类打破了预期的CSS特异性规则?

前端之家收集整理的这篇文章主要介绍了为什么:link伪类打破了预期的CSS特异性规则?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
据我所知,CSS specificity rules表明伪类具有与标签选择器相同的权重.所以像“div p a”这样的选择器比“a:link”更具体.

但是,正如以下测试案例所示,情况似乎并非如此.为什么链接是红色的?

<!DOCTYPE HTML>
<html>
<head>
    <title></title>
    <Meta charset="UTF-8">

    <style type="text/css" media="screen">
        a:link { color: red; }
        div p a { color: green; }
        div.foobar p a { color: green; }
    </style>
</head>
<body>
    <div>
        <p>
          <a href="http://somecrazyurlwierdthing.com">A link... why is it red?</a>  
        </p>
    </div>

    <div class="foobar">
        <p>
          <a href="http://somecrazyurlwierdthing.com">But it turns green when you add a class selector.</a>  
        </p>
    </div>
</body>
</html>

编辑示例以包含“div.foobar p a”选择器.

解决方法

链接的规范声明伪类(在这种情况下为链接)具有比元素名称更高的特异性.确切地说,使用a-b-c-d格式,您的三个选择器如下:
a-b-c-d
0 0 1 1
0 0 0 3
0 0 1 3

您的混淆可能来自您使用术语“伪选择器”,它无法识别伪类之间的区别,例如:链接和伪元素,例如:first-line.

猜你在找的CSS相关文章