CSS 选择器“(A 或 B)和 C”?

发布于 2024-12-06 09:05:53 字数 310 浏览 0 评论 0 原文

这应该很简单,但我找不到它的搜索词。
假设我有这个:

<div class="a c">Foo</div>
<div class="b c">Bar</div>

在 CSS 中,如何创建一个与“(.a 或 .b) 和 .c”相匹配的选择器?

我知道我可以这样做:

.a.c,.b.c {
  /* CSS stuff */
}

但是,假设我必须经常使用各种逻辑组合来执行这种逻辑,是否有更好的语法?

This should be simple, but I'm having trouble finding the search terms for it.
Let's say I have this:

<div class="a c">Foo</div>
<div class="b c">Bar</div>

In CSS, how can I create a selector that matches something that matches "(.a or .b) and .c"?

I know I could do this:

.a.c,.b.c {
  /* CSS stuff */
}

But, assuming I'm going to have to do this sort of logic a lot, with a variety of logical combinations, is there a better syntax?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

白芷 2024-12-13 09:05:53

有更好的语法吗?

不可以。CSS 的 or 运算符 (,) 不允许分组。它本质上是选择器中优先级最低的逻辑运算符,因此您必须使用.ac,.bc

is there a better syntax?

No. CSS' or operator (,) does not permit groupings. It's essentially the lowest-precedence logical operator in selectors, so you must use .a.c,.b.c.

单挑你×的.吻 2024-12-13 09:05:53

对于那些阅读本文 >= 2021 的人:

我使用 :is() 选择器取得了成功:

*:is(.a, .b).c{...}

For those reading this >= 2021:

I found success using the :is() selector:

*:is(.a, .b).c{...}
迷途知返 2024-12-13 09:05:53

还没有,但是有一个实验性的 :is() (以前的 :matches())伪类选择器可以做到这一点:

:is(.a, .b).c {
  /* style properties go here */
}

您可以找到更多关于它的信息 < a href="http://css-tricks.com/almanac/selectors/m/matches/" rel="noreferrer">此处 和 这里。目前,大多数浏览器都支持其初始版本 :any(),其工作方式相同,但将被 :is() 取代。我们只需要再等一会儿,然后再到处使用它(我肯定会的)。

Not yet, but there is the experimental :is() (formerly :matches()) pseudo-class selector that does just that:

:is(.a, .b).c {
  /* style properties go here */
}

You can find more info on it here and here. Currently, most browsers support its initial version :any(), which works the same way, but will be replaced by :is(). We just have to wait a little more before using this everywhere (I surely will).

一世旳自豪 2024-12-13 09:05:53

如果你有这样的:

<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): .ax

选择两个子类(例如 .a .b): .x:not(.c)

选择所有三个子类:.x

If you have this:

<div class="a x">Foo</div>
<div class="b x">Bar</div>
<div class="c x">Baz</div>

And you only want to select the elements which have .x and (.a or .b), you could write:

.x:not(.c) { ... }

but that's convenient only when you have three "sub-classes" and you want to select two of them.

Selecting only one sub-class (for instance .a): .a.x

Selecting two sub-classes (for instance .a and .b): .x:not(.c)

Selecting all three sub-classes: .x

梦行七里 2024-12-13 09:05:53

不。标准 CSS 不提供您正在寻找的那种东西。

但是,您可能需要查看 LESSSASS

这两个项目旨在通过引入附加功能(包括变量、嵌套规则和其他增强功能)来扩展默认 CSS 语法。

它们允许您编写更加结构化的 CSS 代码,并且它们中的任何一个几乎肯定会解决您的特定用例。

当然,没有一个浏览器支持它们的扩展语法(特别是因为这两个项目都有不同的语法和功能),但它们所做的是提供一个“编译器”,将您的 LESS 或 SASS 代码转换为标准 CSS,然后您可以部署在您的网站上。

No. Standard CSS does not provide the kind of thing you're looking for.

However, you might want to look into LESS and SASS.

These are two projects which aim to extend default CSS syntax by introducing additional features, including variables, nested rules, and other enhancements.

They allow you to write much more structured CSS code, and either of them will almost certainly solve your particular use case.

Of course, none of the browsers support their extended syntax (especially since the two projects each have different syntax and features), but what they do is provide a "compiler" which converts your LESS or SASS code into standard CSS, which you can then deploy on your site.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文