CSS: Child selector higher precedence than class s

2019-04-07 07:54发布

I have the following HTML:

<div class="form-square">
     <div class="seven-col">
        Hello World!
      </div>
</div>

And the following CSS:

div.form-square > div {
    padding: 50px;
}

.seven-col {
    padding: 0;
}

Firefox and Firebug is using the first of the two CSS rules. How come "div.form-square > div" has higher precedence than ".seven-col" which is more specific?

3条回答
兄弟一词,经得起流年.
2楼-- · 2019-04-07 08:03

Correct, the first rule is more specific than the second, because a class only selector has a fairly low priority.

查看更多
够拽才男人
3楼-- · 2019-04-07 08:10

div.form-square > div consists of 1 class selector + 2 type selectors (plus a child combinator).

.seven-col consists of 1 class selector.

The number of class selectors is equal, so the comparison is done in type selectors. The first selector has more type selectors so it is more specific.

Specificity is based on the number of each kind of selector in the entire thing, not for the part on the right hand side of the rightmost combinator.

(NB: The first example also has what CSS 2 calls a child selector, but that doesn't count towards specificity and describes a relationship between elements rather than a feature of an element, which probably why CSS 3 is renaming it to the child combinator).

查看更多
一纸荒年 Trace。
4楼-- · 2019-04-07 08:20

.seven-col has 1 class = +1

div.form-square > div has 2 elements and 1 class = +3

Check it out with this CSS specificity calculator: http://www.suzyit.com/tools/specificity.php

查看更多
登录 后发表回答