選擇器列表

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

CSS 選擇器列表 (,) 會選擇所有匹配的節點。選擇器列表是由逗號分隔的多個選擇器組成的列表。

描述

當多個選擇器共享相同的宣告時,它們可以被分組到一個逗號分隔的列表中。選擇器列表也可以作為引數傳遞給一些函式式 CSS 偽類。逗號的前後可以有空格。

以下三個宣告是等效的

css
span {
  border: red 2px solid;
}
div {
  border: red 2px solid;
}
css
span,
div {
  border: red 2px solid;
}
css
:is(span, div) {
  border: red 2px solid;
}

示例

當對符合不同條件的元素應用相同樣式時,將選擇器分組到逗號分隔的列表中可以提高一致性,同時減小樣式表的大小。

單行分組

此示例演示瞭如何使用逗號分隔列表將選擇器分組到單行中。

css
h1, h2, h3, h4, h5, h6 {
  font-family: "Helvetica", "Arial";
}

多行分組

此示例演示瞭如何使用逗號分隔列表將選擇器分組到多行中。

css
#main,
.content,
article,
h1 + p {
  font-size: 1.1em;
}

有效和無效的選擇器列表

無效的選擇器代表,因此不匹配任何東西。當選擇器列表包含一個無效選擇器時,整個樣式塊都會被忽略,除了接受容錯選擇器列表:is():where() 偽類。

無效選擇器列表

使用選擇器列表的一個缺點是,選擇器列表中的單個不受支援的選擇器會使整個規則失效。

考慮以下兩個 CSS 規則集

css
h1 {
  font-family: sans-serif;
}
h2:invalid-pseudo {
  font-family: sans-serif;
}
h3 {
  font-family: sans-serif;
}
css
h1,
h2:invalid-pseudo,
h3 {
  font-family: sans-serif;
}

它們不是等效的。在第一個規則集中,樣式將應用於 h1h3 元素,但 h2:invalid-pseudo 規則不會被解析。在第二個規則集中,由於列表中的一個選擇器無效,整個規則將不會被解析。因此,h1h3 元素將不會應用任何樣式,因為當選擇器列表中的任何選擇器無效時,整個樣式塊都會被忽略。

容錯選擇器列表

解決無效選擇器列表問題的一種方法是使用 :is():where() 偽類,它們接受容錯選擇器列表。容錯選擇器列表中的每個選擇器都會單獨解析。因此,列表中的任何無效選擇器都會被忽略,而有效選擇器則會使用。

承接上一個示例,以下兩個 CSS 規則集現在是等效的

css
h1 {
  font-family: sans-serif;
}
h2:maybe-unsupported {
  font-family: sans-serif;
}
h3 {
  font-family: sans-serif;
}
css
:is(h1, h2:maybe-unsupported, h3) {
  font-family: sans-serif;
}

兩者的區別在於 :is() 的特異性是其最具體的引數,而 :where() 選擇器和容錯選擇器列表引數不增加任何特異性權重。

相對選擇器列表

相對選擇器列表是一個逗號分隔的選擇器列表,解析為相對選擇器,它以顯式或隱式組合符開頭。

css
h2:has(+ p, + ul.red) {
  font-style: italic;
}

在上面的示例中,斜體樣式將應用於緊跟在 <p><ul class="red"> 之後的任何 h2 標題。請注意,偽元素和 :has() 選擇器在 :has() 相對選擇器列表中無效。

規範

規範
選擇器 Level 4
# 分組

瀏覽器相容性

另見