I have the following markup:
<div class="class-XXX">
<div class="class-5">
<!-- could be any text element -->
<h1>Content</h1>
</div>
</div>
为了简单起见,假设
class-XXX
只能有值class-1
、class-2
、class-3
和class-4
。
我想将规则color: #fff;
应用于class-5
的每个子元素,但不包括class-1
的子元素。这是我的样式表的一部分:.class-2 .class-5,
.class-3 .class-5,
.class-4 .class-5 {
color: #fff;
}
这个不起作用,我也不确定为什么。我认为规则没有被覆盖。
更新
正如AndrewBone指出的那样,规则似乎在最小示例中有效。我现在明白了问题所在,但我不知道该怎么解决:
另一个CSS文件中应用了一个规则到h1
上(无法删除),并且该规则的优先级高于我编写的规则。我该如何解决这个问题?
这里是JSFiddle的示例。
解决方案
Vucko指出,h1
类型选择器具有更高的优先级,因此规则将不会被应用。因此,为了避免列出所有可能的组合,应使用*
选择器!
最终结果:
.class-2 .class-5 *,
.class-3 .class-5 *,
.class-4 .class-5 *{
color: #fff;
}
感谢Paulie_D和David Wilkinson教我关于:not
伪选择器的知识。
:not
选择器,但它是一个棘手的选择器。.class-xxx
类的div
是body
的直接子元素吗?还是它周围有任何包装器?注意:您的选择器应根据属性(例如,color
不应该有问题,因为子元素将从父元素继承它),:not
将帮助您用更少的代码实现它。 - Harry