後續兄弟組合器

Baseline 已廣泛支援

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

後續兄弟組合器~,一個波浪號)將兩個選擇器分開,並匹配第二個元素在第一個元素之後(不一定是緊鄰)且與第一個元素共享相同父元素的所有例項。

在以下示例中,後續兄弟組合器(~)有助於選擇並設定那些既是影像的兄弟元素又出現在任何影像之後的段落的樣式。

css
img ~ p {
  color: red;
}

語法

css
/* The white space around the ~ combinator is optional but recommended. */
former_element ~ target_element { style properties }

示例

將組合器與簡單選擇器一起使用

此示例演示了當兩個選擇器都是簡單選擇器(pspan)時 ~ 組合器的用法。

html
<article>
  <span>This is not red because it appears before any paragraph.</span>
  <p>Here is a paragraph.</p>
  <code>Here is some code.</code>
  <span>
    This span is red because it appears after the paragraph, even though there
    are other nodes in between.
  </span>
  <p>Whatever it may be, keep smiling.</p>
  <h1>Dream big</h1>
  <span>
    Doesn't matter how many or what kind of nodes are in between, all spans from
    the same parent after a paragraph are red.
  </span>
</article>
<span>
  This span is not red because it doesn't share a parent with a paragraph.
</span>
css
p ~ span {
  color: red;
}

將組合器與複雜選擇器一起使用

此示例包含兩個複雜選擇器,兩者都使用了後續兄弟組合器:.foo p ~ span.foo p ~ .foo span

  • 第一個複雜選擇器 .foo p ~ span 匹配所有在段落之後出現的 span 元素,**如果**該 span 元素和段落共享相同的父元素,**並且**該父元素或其某個祖先元素具有 .foo 類。
  • 第二個複雜選擇器 .foo p ~ .foo span 匹配所有作為具有 .foo 類的元素的後代且該 .foo 元素是前面提到的段落的兄弟元素的 span 元素。

下面的示例顯示,複雜選擇器中的目標元素必須與複雜選擇器中的初始元素共享相同的父元素。

html
<h1>Dream big</h1>
<span>And yet again this is a red span!</span>
<div class="foo">
  <p>Here is another paragraph.</p>
  <span>A blue span</span>
  <div class="foo">
    <span>A green span</span>
  </div>
</div>
css
.foo p ~ span {
  color: blue;
}

.foo p ~ .foo span {
  color: green;
}

在上面的 HTML 中,.foo p 的兩個兄弟元素是 span.foo。綠色的 span.foo 類的後代,而 .foop 的兄弟元素。

  • 當目標選擇器是 span 時,選擇的是 p 的兄弟元素 spanp 元素是 .foo 的後代,其 span 兄弟元素也是如此。
  • .foo p ~ .foo span 中,目標選擇器是作為 .foo 後代的 span。在這種情況下,如果作為 .foo 後代的 span 元素的 .foop 的兄弟元素,則該 span 元素會被選中;本質上,兩者都巢狀在 .foo 的一個祖先元素中。

規範

規範
選擇器 Level 4
# 通用兄弟組合器

瀏覽器相容性

另見