父块的color
属性具有!important
声明。为什么孩子的财产优先?怎么解释呢?
我看到了特异性的解释,但我不明白如何将它们应用于这种特殊情况。
也许我错过了文档中的一些基本位置......
div {
color: purple !important;
font-family: 'Open Sans', serif;
font-size: 30px;
font-weight: bold;
}
span {
color: red; /* Why does parent's `!important` lose? */
}
<div>
Parent
<span>Child</span>
</div>
答案 0 :(得分:4)
直接目标元素的样式始终优先于继承样式,无论继承规则的特殊性如何。
在您的示例中,span
选择器直接定位子元素,因此优先于父div
选择器的继承样式。现在解释为什么!important
不会改变这一点。
此处忽略!important
的原因是,!important
优先于所有其他声明,前提是选择相同类型的元素。这并不重要,因为孩子是span
,它是一个不同的元素,而不是另一个div
。如果孩子为div
,则!important
,然后!important
将适用:
div {
color: purple !important;
font-family: 'Open Sans', serif;
font-size: 30px;
font-weight: bold;
}
div > div {
color: red;
}
&#13;
<div>
Parent
<div>Child</div>
</div>
&#13;
在上面的示例中,div > div
规则理论上应该因为特异性而使孩子变红,但由于!important
位于div
选择器下,因此选择相同元素类型,它将覆盖更具体的规则。
答案 1 :(得分:0)
@Alohci引用了in the comments文档的链接:
用户代理必须首先为每个属性分配指定的值 在以下机制上(按优先顺序排列):
所以现在我了解情况如下:
父属性不会直接影响子级,但浏览器会使用它们:
inherit
); 因此,父母的特异性和重要性不与儿童的特异性相竞争。在父母的级别上有一个胜利者,在孩子的级别上有一个胜利者,但是他们彼此不了解。只有当浏览器使用子元素的父元素时,才能在父级别赢得胜利。
简而言之,父元素不会影响,但会指定一个示例。孩子不服从,但在他认为合适时会模仿。