使用CSS3,有没有办法选择不属于某个类的元素的元素?例如,在下面的示例中,如何选择不在class="bar"
元素内的class="foo"
元素(即id="2"
但不是id="1"
)?
<div class="foo">
... arbitrary depth ...
<div class="bar" id="1">
...
</div>
...
</div>
...
<div class="bar" id="2">
...
</div>
...
答案 0 :(得分:3)
根据MDN,:not()
会根据某些条件匹配一个元素,它不会返回“非元素”。
我不知道有任何伪选择者在某些情况下测试所有父母,所以我个人会使用这样的解决方法:
div {background: yellow;}
.bar {background: green;}
.foo .bar {background: yellow;} /*repeat original styles changed by .bar*/
答案 1 :(得分:1)
.foo
本身不是任意深假设.foo
是body
标记的已知深度(您的问题仅表示 .foo
内的任意深度,或者对于.bar
.foo
而言,无论是.bar
内还是其他内容),以下代码都可以为.foo
内外的任意深度选择任何.foo
。对于第一个示例,我假设body
是.foo
的直接子项,但如果不是,则必须稍微修改代码以适应{{1}的适当深度}(见第二个例子):
body > :not(.foo) .bar,
body > .bar {
/* styles */
}
See a fiddle for the above code.
这仅在.foo
未嵌套太深时才实用,因为.bar
定位必须与.foo
以及之前任何级别更高级别相同。因此,例如,如果.foo
是body
的孙子,则需要以下内容:
body > * > :not(.foo) .bar, /* deeper levels checking for no .foo parent */
body > .bar, /* child level */
body > * > .bar { /* grandchild level; equal to .foo's level */
/* styles */
}
答案 2 :(得分:0)
不幸的是,使用它的唯一方法是使用:not语法并按元素或类名指定1层深度
这里是小提琴:http://jsfiddle.net/2V7Wc/
HTML
<div class="foo">
<div class="bar" id="one">
</div>
</div>
<div class="bar" id="two">
</div>
的CSS:
.bar:not(#one) {
/* styles */
}
答案 3 :(得分:0)