这应该很简单,但我找不到它的搜索条件 假设我有这个:
<div class="a c">Foo</div>
<div class="b c">Bar</div>
在CSS中,我如何创建一个匹配“(.a或.b)和.c”匹配的选择器?
我知道我可以这样做:
.a.c,.b.c {
/* CSS stuff */
}
但是,假设我必须经常使用各种逻辑组合来做这种逻辑,那么有更好的语法吗?
答案 0 :(得分:114)
有更好的语法吗?
没有。 CSS'or
运算符(,
)不允许分组。它本质上是选择器中最低优先级的逻辑运算符,因此您必须使用.a.c,.b.c
。
答案 1 :(得分:19)
还没有,但有实验:matches()
选择器可以做到这一点:
:matches(.a .b) .c {
/*stuff goes here */
}
您可以在其上找到更多信息here和here。目前,大多数浏览器都支持它的初始版本:any()
,它的工作方式相同,但会被:matches()
取代。我们只需等待一段时间再到处使用它(我肯定会)。
答案 2 :(得分:11)
如果你有这个:
<div class="a x">Foo</div>
<div class="b x">Bar</div>
<div class="c x">Baz</div>
您只想选择包含.x
和(.a
或.b
)的元素,您可以写:
.x:not(.c) { ... }
但只有当你有三个“子类”并且想要选择其中两个时,这才很方便。
只选择一个子类(例如.a
):.a.x
选择两个子类(例如.a
和.b
):.x:not(.c)
选择所有三个子类:.x
答案 3 :(得分:10)
我发现使用 :is()
选择器很成功:
*:is(.a, .b).c{...}
答案 4 :(得分:4)