大多数答案都正确地指出了这是一个特异性问题,但在解释特异性规则方面不正确或不完整。基本上,在您的情况下,
.rightColoumn *
比
td
“更具体”,因此即使它出现得更早,该规则仍然胜出。CSS 2.1规则位于
此处。这些规则是:
- 如果声明来自“style”属性而不是带有选择器的规则,则计数为1,否则为0(= a)(在HTML中,元素的“style”属性值是样式表规则。这些规则没有选择器,因此a = 1,b = 0,c = 0和d = 0)。
- 计算选择器中ID属性的数量(= b)。
- 计算选择器中其他属性和伪类的数量(= c)。
- 计算选择器中元素名称和伪元素的数量(= d)。
将四个数字a-b-c-d连接起来(在具有大型基数的数字系统中),就得到了特异性。所以在你的情况下,你有两个规则:
.rightColumn * {} /* a = 0, b = 0; c = 1, d = 0 : Specificity = 0010*/
td {} /* a = 0, b = 0, c = 0, d = 1 : Specificity = 0001 */
0001小于0010,因此第一个规则胜出。
有两种方法可以解决这个问题:
- 使用
!important
使规则更加“重要”。我建议避免这样做,因为当您将许多规则分散在几个文件中时,会很令人困惑。
- 为要修改的使用更高特异性的选择器。您可以为其添加类名或ID,这将允许您取代链接的CSS文件中的规则。
例如:
<style>
.rightColomn * { padding: 0; }
td#myUnpaddedTable { padding: 10px; }
td.anUnpaddedTable { padding: 10px; }
</style>
编辑:修正了对于*选择器的特异性规则。David的评论促使我重新阅读规范,发现*选择器不会对特异性得分产生影响。