CSS直接后代(>)没有任何选择性价值吗?

问题描述 投票:0回答:3

给出以下类声明和代码...

.foo > a { color:green; }
.bar a { color:red; }
<div class="bar">
    <div class="foo">
        <a href="#">SOME LINK</a>
    </div>
</div>

...我认为链接会是绿色的,因为虽然两个声明都有一个类 (010) 和一个元素 (001),但

.foo
具有直接后代选择器。但可惜的是,链接是红色的。 为什么?

html css css-selectors
3个回答
13
投票

>
对于 css 特异性没有任何价值。

两种情况都有 11 个特异性值:

.foo > a { color:green; }/*specificity value is 11*/
.bar a { color:red; }/*specificity value is 11*/

在您的情况下,您可以这样使用以获得更大的特异性:

.bar .foo > a { color:green; }/*greater specificity value is 21*/
.foo a { color:red; }/*specificity value is 11*/

好的,我要在此处添加特异性的工作原理:

Selector                          Specificity         Specificity in large base
inline-style                      1 0 0 0             1000
id selector                       0 1 0 0              100
class,pseudo,attribute selector   0 0 1 0               10
type selector and pseudo elements 0 0 0 1                1                     

1
投票

您有两个相互冲突的 CSS 规则。如果我没有记错的话,直接后代选择器与后代选择器具有相同的特异性,因此稍后解析的规则将覆盖之前解析的规则,所以如果您的规则是:

.foo > a { color:green; }
.bar a { color:red; }

然后颜色将为红色。如果您的规则是:

.bar a { color:red; }
.foo > a { color:green; }

那么对于满足这两个规则的选择器的任何锚点,颜色将为绿色。


1
投票

组合器在特异性上没有任何价值,只有选择器有:id,class,标签,伪元素,伪类,属性选择器。

© www.soinside.com 2019 - 2024. All rights reserved.