跳至主要内容

如果你想要透過子元素來改變父元素的樣式,那麼你可以使用最近 CSS 釋出的 :has 選擇器。

信息

:has is a parent selector just released by CSS at the end of August 2022 in Chrome. It can be used to select parent elements that contain some specific child element. It can also be used with complex selectors, multiple selectors, or as a way to select some other elements.

Usage

以下介紹四種不同的使用方式,分別是基本、複雜、複數條件、以及使用父元素來選擇子元素。

Basic

For example, we want to add some margin-bottom to elements with the class of heading. But we only want to select those heading that contain any sub-elements with the class of subtitle.

舉例來說,我們想對 heading 加上顏色,但是我們只想要選擇那些有 subtitleheading。我們可以這樣寫:

.heading:has(.subtitle) {
margin-bottom: 1rem;
}

Complex

我們也可以加強搜尋條件,例如選擇包含直接子元素 (>)subtitle 並且擁有 strong 元素,而且 strong 元素的 id 還為 accentheading

.heading:has(> .subtitle strong#accent) {
margin-bottom: 1rem;
}

Multiple Conditions

我們也可以使用逗號來加入多個 (||) 條件,例如選擇包含 subtitle 或是 pheading。或是利用多個 :has 來達成 (&&) 的效果,例如選擇包含 subtitle 並且包含 pheading

/* || */
.heading:has(.subtitle, p)
/* && */
.heading:has(.subtitle):has(p)

Use parent to select child

我們也可以使用父元素來選擇子元素,例如選擇包含 subtitleheading,並且對其中的 p 加上 color: red

.heading:has(.subtitle) p {
color: red;
}

Example

實際利用 Code Editor 來看看 :has 選擇器的效果吧!

即時編輯器
結果
Loading...