不知何故,后代选择器会覆盖我的.red_p class
。我该如何避免?我不想为每个p
元素设置一个类。
HTML:
<html>
<head>
<style>
.red_p {
color: red;
}
#main p {
color: blue;
}
</style>
</head>
<body>
<div id="main">
<p>This should be blue.</p>
<p class="red_p">This should be red, but is blue.</p>
</div>
</body>
</html>
答案 0 :(得分:1)
增加蓝色的specificity。对于当前代码,#main p
比.red_p
更具体,因为它包含ID。
您可以在红色规则中添加ID,例如.red_p, #main .red_p
,并在蓝色规则后移动(后面的格式覆盖之前的格式)或使用!important
。
特异性的作用如下:
!important
且B不是,则A比B. Halt更具体。(通用选择器不影响特异性)
http://cssspecificity.com有很好的例子和图片。
答案 1 :(得分:0)
在CSS中,有一些特殊性规则(quoted from MDN,并且添加了更清晰的示例):
以下选择者列表是通过提高特异性来实现的:
- 通用选择器 - 例如:
*
- 类型选择器 - 例如:
p
- 类选择器 - 例如:
.p_red
- 属性选择器 - 例如:
[class="red"]
- 伪类 - 例如:
:hover
- ID选择器 - 例如:
#main
- 内联样式 - HTML中的ex:
style
属性
因此,您可以为选择器添加特异性。在您的情况下,有几种方法可以做到这一点:
#main .red_p
#main p.red_p
或者,第三种方式,删除#main
中的#main p
,因此它不会比您的红色规则更具体。