我试图对除了.reset-this及其子元素以外的所有元素应用样式,但我的CSS没有生效,它不适用于任何元素。
*:not(.reset-this, .reset-this *) { //styles in here }
如果您想看一个实时的例子来展示它是如何未能正常工作的,请访问这个Fiddle:http://jsfiddle.net/sh39L882/1/
*:not(.reset-this, .reset-this *) { //styles in here }
如果您想看一个实时的例子来展示它是如何未能正常工作的,请访问这个Fiddle:http://jsfiddle.net/sh39L882/1/
关键在于否定伪类:
:not(X)
是一个函数表示法,以简单选择器(不包括否定伪类本身)作为参数。
简单选择器
。 :not
只能访问像.className
这样的简单选择器,而不能访问含有,
或.className .child
的选择器。请注意将否定伪类:
:not()
是一个函数伪类,以选择器列表作为参数。
简单选择器
更改为选择器列表
。 这意味着您尝试做的事情将成为可能,但仅在实现新规范的浏览器中才能实现。* {
color: red
}
.reset-this, .reset-this * {
color: black;
}
但这样做非常糟糕、恶心和丑陋。正如您所评论的那样,最好设计您的类结构以避免这种情况。
color
,您永远不要将硬值应用于 *
。如果您希望这些属性适用于所有元素,请在 body
上设置它们,并让所有后代正常继承。不要试图打破继承链。 - BoltClock:not
。相反,您可以使用 body :not
。:not()
不是伪元素(而是伪类),*
可以与伪元素一起使用 -- 供您参考。 - Adrift*
一起使用。 - Ross
:not()
只允许一个 简单选择器 作为其参数,这就是为什么你的尝试不起作用的原因。 - Adrift.reset-this
(以及任何子元素)声明不同的样式? - Jhecht