基本上,我希望所有“ a”元素都是红色的,除非它们是属性为“ data-foo”的元素的后代。
此html:
<div data-foo="whatever">
<div>
... more descendants
<a href="#">I should be default color</a>
</div>
</div>
<a href="#">I should be red</a>
使用此CSS:
:not([data-foo]) a {
color: red;
}
在此示例中,仍然选择两个“ a”元素。我还尝试了以下方法:
div:not([data-foo]) a
*:not([data-foo]) a
div:not([data-foo]) a
*:not(div[data-foo]) a
但是我要么什么都没选择,要么全部都选择了。这是一个可能的选择吗?
答案 0 :(得分:2)
您可以添加两条规则,一条用于所有A
,另一条用于[data-foo] > a
和color: unset;
(或您想要的特定颜色):
A {
color: red;
}
[data-foo] A {
color: inherited;
}
<div data-foo="whatever">
<a href="#">I should be default color</a>
</div>
<a href="#">I should be red</a>
答案 1 :(得分:1)
尝试一下:
:not([data-foo]) > a {
color: red;
}
“大于”>选择直系子孙
答案 2 :(得分:0)
简单-首先设置更通用的规则(所有锚点都是红色的),然后进行特定的例外处理(具有“ data-foo”属性的祖先的例外):
a { color:red; }
[data-foo] a { color:inherit; }