至于对一般CSS特异性的快速入门,你可以使用10为底的方法计算出的“权重”规则。
elements & pseudo-elements = 1
classes & pseudo-classes = 10
id's = 100
inline = 1000
因此,在这个例子中,在方案中的第一条规则是:
0 elements & pseudo-elements = 1 * 0 = 0
5 classes & pseudo-classes = 10 * 5 = 50
0 id's = 100 * 0 = 0
0 inline = 1000 * 0 = 0
TOTAL = 50
计算您的规则,你得的30(3班)特异性。为了优先考虑,它需要一个大于50的值(或者恰好为50,并且在另一个规则之后声明)。
虽然您可以将单个ID添加到列表中,并且它会提升足够高的特异性以覆盖第一条规则,但您也将规则限制为仅限一个特定位置。尽管您避免使用!important
标志,但您已经介绍了另一个问题。
考虑你正在努力,以确保一个门是锁着的,但有这样的规则:
house door.exterior {
state: unlocked;
}
爱丽丝不在家,你要确保Alice的门是锁着的,所以您可以指定:
#alice door.exterior {
state: locked;
}
当鲍勃和卡罗尔不在家:
#carol door.exterior,
#bob door.exterior,
#alice door.exterior {
state: locked;
}
我们已经完成了锁定车门,但我们都增加了维护问题,并且模糊了锁门的原因。我们需要为每个我们想要锁定房屋的人添加规则。通过使用语义上较低的特异性较低的规则,我们会好得多。
house.owner-away door.exterior {
state: locked;
}
CSS通常是一个太具体和不够具体的平衡行为。在这种情况下,您要覆盖的规则有2个语义类覆盖了您的规则,它指定它适用于post-list
中的帖子,并且仅适用于post-image
后面的post-text
。如果这些规则也适用于您的规则,请使用它们,如果没有,则环视四周,看看您可以使用哪些其他更一般的规则。
注虽然以10为底的方法是表示相对特异性的一种简单的方法,在每一级的单个选择器将在下一覆盖任何数目的选择器。例如,有11个元素选择器不会覆盖1个类,即使此方法将以更高的值计算它。
这个答案和@AwsmeSandy的答案提供了一个解决方法,但并没有真正解释为什么OP的选择器被覆盖。 – TylerH
这不是一个解决方法。在CSS中,每个选择器都有一个权重,用于为定位到相同元素的选择器设置优先级。如果两个选择器具有相同的poind,则在样式文件中写入最低的那个将应用 – Mahmoud
OP,具体询问为什么他的选择器未被应用。答案是'因为还有另一个更具体的选择器被应用于'。第一种方法应该是增加目标选择器的特异性*不添加标记。有时候这是不可能的,你必须添加一个新的类或ID。 – TylerH