CSS子元素選擇父元素
阿新 • • 發佈:2018-11-26
通常一個CSS選擇器都是從上往下選擇的,通過父元素選擇子元素,那麼能不能通過子元素選擇父元素呢?
<ul>
<li>
<a href="#" class="active">1</a>
</li>
<li>
<a href="#">2</a>
</li>
</ul>
如果我想選擇包含 a.active 的 li 該怎麼實現呢? 目前我們學到的CSS好像是沒有辦法的,不過今天要將的一個CSS偽類 :has() 就有這個功能,雖然還處於草案階段,但是還是可以提前瞭解一下。
li:has(> a.active){
color:red;
}
除了表示包含,:has 還可以表示兄弟跟隨關係
div:has(+ p){
color:red;
}
表示選擇 <div> 標籤,前提是這個div標籤必須是被一個<p>緊跟著的。此外還可以與:not 一起使用
article:not(:has(a)){
color:red;
}
表示不包含 <a> 的 <article>標籤。注意這裡 :not 和 :has 的先後順序,不同順序代表不同的意思
article:has(:not(a)){ color:red; }
表示包含非 <a> 的 <article>標籤
其實我們前面講過的 :focus-within 也是一個通過子元素選擇父元素的偽類,只不過條件只能是子元素是否獲取焦點, 而 :has 則更靈活和強大。
form:focus-within{
background-color:black;
}
如果通過 :has 實現的話, 可以這樣寫
form:has(:focus){
background-color:black;
}