我想使用:not
伪类作为例外,其中css应该应用于除具有特定类的任何元素(包括其所有子元素)之外的所有内容。
但是在我的示例中,:not
选择器会影响所有内容,但仅会影响:not
选择器中的类。我正在使用Chrome浏览器。
fiddle
SCSS:
.ql-editor :not(.not-ql-editor){
ul > li {
background:blue;
}
}
HTML:
<div class="ql-editor">
<ul>
<li>hello</li>
<li>hello</li>
<li>hello</li>
</ul>
<div class="not-ql-editor">
<ul>
<li>hello</li>
<li>hello</li>
<li>hello</li>
</ul>
</div>
</div>
我本来希望顶部的
<ul><li>
具有蓝色背景,而下部的<ul><li>
不会具有背景,因为它具有.not-ql-editor
类,但是由于没有li
元素获得背景,所以似乎有些错误。更新:
在Johannes回答之后,我了解到上部的
ul
需要包装在某个元素内,因为:not(.not-ql-editor)
代表一个元素,即使它与选择器不匹配也是如此。但是后来我注意到
"not-ql-editor
”元素必须直接在"ql-editor"
元素的下面,我的目标是针对“ ql-editor
”之下任何级别的类。通常,当您在两个选择器之间只有一个空格时,第二个选择器应将目标定位在第一个选择器下方的任何位置。 :not选择器不是这种情况吗?
更新2:
这是小提琴的修改版本:
fiddle2
如果html看起来像这样(具有相同的CSS):
<div class="ql-editor">
<div>
<div class="not-ql-editor">
<ul>
<li>hello</li>
<li>hello</li>
<li>hello</li>
</ul>
</div>
</div>
</div>
小李变蓝了。尽管有CSS:
.ql-editor :not(.not-ql-editor)
最佳答案
您的代码中的问题在于,第一个列表与第二个列表处于不同的“后裔级别”:CSS选择器仅对li
内的ul
元素有效,而.not-ql-editor
是没有元素的子元素。 .ql-editor
还是具有div
类的元素的子级。
为此,您需要在第一个ul
周围使用另一个ul
(或其他)包装:
.ql-editor :not(.not-ql-editor) ul>li {
background: blue;
}
<div class="ql-editor">
<div>
<ul>
<li>hello></li>
<li>hello</li>
<li>hello</li>
</ul>
</div>
<div class="not-ql-editor">
<ul>
<li>hello</li>
<li>hello</li>
<li>hello</li>
</ul>
</div>
</div>
评论和问题编辑后的补充:
在您发布的第一个代码示例中,您的
.ql-editor
元素与ul
DIV元素处于不同的后代级别:第一个.not-ql-editor
是直系子代,第二个是直孙,而.ql-editor
DIV作为包装器在ul
和.ql-editor
之间。我的回答是针对这种情况的,它确实有效。在您发布的第二个代码示例中,您添加了另一个级别:DIV,在
.not-ql-editor
DIV和.not-ql-editor
DIV之间没有任何类。这改变了一切。在您添加的小提琴中,ul
DIV是ul
的直接父级。因此,您需要使用该关系定义仅在.not-ql-editor
是不具有类的DIV的直接子级时适用的CSS规则。在纯CSS中,规则如下:
.ql-editor *:not(.not-ql-editor) > ul > li {
background: blue;
}
这是您的第二个代码示例,在代码段中结合了该CSS规则,背景*没有*变成蓝色:
.ql-editor *:not(.not-ql-editor) > ul > li {
background: blue;
}
<div class="ql-editor">
<div>
<div class="not-ql-editor">
<ul>
<li>hello</li>
<li>hello</li>
<li>hello</li>
</ul>
</div>
</div>
</div>
这是您将此CSS用作SCSS的第二个小提琴:https://jsfiddle.net/e7d0h4yc/
关于css - CSS:非伪类未生效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58218322/