跳到主要內容

:has() 父層選取器 - 偽元素

:has() 父層選取器從 Safari 於2022年開始支援後,其他瀏覽器現在也幾乎都支援該功能

有時希望「符合該條件的class或 ID,它的父層能夠套用某css設定時」,這就是一個很好用又強大的功能。

例如:


HTML:

<div class="text-title">

    <h2>標題文字<h2> 

</div>

<div class="text-title">

    <h3>標題文字<h3> 

</div>

CSS:

.text-title:has(h3) { background-color: red;}


以上的語法意思為:當 text-title 的 class 底下若有 h3 時, text-title 的底色需要呈現紅色。

如果CSS是這樣:

.text-title:has(h3, h2) { background-color: red;}


以上的語法意思為:當 text-title 的 class 底下若有 h3 或 h2 時, text-title 的底色需要呈現紅色。

那如果想要讓它的條件同時有 h3 和 h2,CSS就需要這樣寫:

.text-title:has(h3):has(h2) { background-color: red;}


但要特別注意,這種寫法,上方的 HTML 則不會有反應,因為它的 text-title 底下並沒有同時有 h3 和 h2,需要變成以下的情況:

<div class="text-title">

    <h2>標題文字<h2> 

    <h3>標題文字<h3>

</div>



再來就是如果只想要在 text-title 底下那層的 h3 有反應,就必須寫成:

.text-title:has(> h3) { background-color: red;}