2012-02-16 40 views
1

我在我的样式表两个相互竞争的规则:评分和排名规则的特异性

#parent > div { 
    color: blue; 
} 

#child { 
    color: red; 
} 

下面是相关的HTML:

<div id="parent"> 
<div id="child">What color is this text?</div> 
<div>This should just be blue</div> 
<div>Also should be blue</div> 
</div> 

为什么#child蓝色,而不是红色?

我不知道我是否正确应用评分系统。以下是我做的:

  • 规则#1有一个id和标签,所以它的得分是[0, 1, 0, 1]
  • 规则#2只具有一个ID,所以它的得分是因此[0, 1, 0, 0]
  • 规则#1胜,并且它是蓝色

但这似乎我 - 第一条规则的多个元素相匹配;第二条规则只能匹配一个!那么第二个规则是不是更具体?

回答

2

但这似乎我 - 第一条规则的多个元素相匹配;第二条规则只能匹配一个!那么第二个规则是不是更具体?

根本不是。仅仅因为选择器匹配较少的元素不会使其更具体。

选择器匹配是在逐个元素的基础上完成的,而不是基于规则的。由于有一个更具体的选择符匹配您的元素#child,这是#parent > div,该规则优先,就是这样。

它似乎违反直觉,但这就是它的工作原理。解决这个问题的一个方法是在您的第二条规则中添加#parent

#parent > div { 
    color: blue; 
} 

#parent > #child { 
    color: red; 
} 
+0

所以我的程序是正确的? – 2012-02-16 19:12:35

+0

是的,这是正确的。 – BoltClock 2012-02-16 19:12:52

+0

你也可以这样想:rule#1只适用于'div'元素,只要它们是ID为'#parent'的任何元素的子元素,而规则#2只适用于ID为#child的任何元素',无论它在HTML中。请注意这是如何使规则#2更具体?请记住,CSS本身并不知道它正在应用的实际HTML,因此我关于如何匹配元素的数量*不影响特异性的评论。 – BoltClock 2012-02-16 19:28:39