CSS 不斷發展,使開發人員能夠輕鬆建立動態、直覺且具有視覺吸引力的網頁。其中一個增強功能是現代 CSS 中引入的 :has() 偽類。這個偽類帶來了父級感知選擇功能,讓您可以根據子元素或兄弟元素的存在或狀態有條件地應用樣式。
本文透過範例解釋了 :has() 偽類,以展示其靈活性和強大功能。
什麼是 :has() 偽類?
:has() 偽類通常被稱為“父選擇器”,因為它允許您根據元素的子元素、兄弟元素或後代元素設定樣式。
selector:has(selectorList)
- 選擇器是規則適用的主要元素。
- selectorList 是條件,可以包含子元素、兄弟元素或與主元素相關的其他元素。
主要特點
- 父級意識:樣式根據其後代或兄弟元素應用於元素。
- 靈活的條件:與 、 ~ 和 > 等組合符配合使用對於兄弟姊妹和孩子的關係。
- 改進的互動性:可用於在不依賴 JavaScript 的情況下建立動態佈局或效果。
實際範例:使用 :has() 根據其兄弟姐妹來設計盒子的樣式
body { font-family: sans-serif; } .box { width: 50px; height: 40px; background-color: red; margin: 5px; } .border { border: 2px solid black; } .circle { width: 40px; height: 40px; background-color: blue; border-radius: 25px; } /* Highlighting boxes that are followed by a circle */ .box:has(+ .circle) { width: 80px; height: 80px; }
<title>CSS :has() Example</title> <meta charset="UTF-8"> <link rel="stylesheet" href="./styles.css"> <div> <p><strong>Explanation</strong></p> <p><em>Basic Styles</em><br> The .box class defines small red rectangles with a margin.<br> The .circle class creates blue circular elements.</p> <p>Dynamic Sizing Using :has():<br> The rule .box:has(+ .circle) applies styles to any .box element that is immediately followed by a .circle.<br> This rule changes the dimensions of such .box elements to 80px by 80px, making them stand out.</p> <p><em>Visual Output</em></p> <p>Initially, the boxes are uniform in size.<br> The .box element immediately preceding a .circle grows larger due to the :has() rule.</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173495132393104.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="CSS :has() Pseudo-Class: A Powerful Selector for Dynamic Styling"></p> <h2> Use Cases for :has() </h2> <p>The :has() pseudo-class is versatile and can be applied in numerous scenarios:</p> <h3> 1. <strong>Interactive Layouts</strong> </h3> <p>Style a parent element based on the presence of a specific child or sibling element, e.g., highlighting a card if it contains a button.<br> </p> <pre class="brush:php;toolbar:false">.card:has(button) { border: 2px solid green; }
2. 動態導航選單
將樣式套用到父級
li:has(ul) { font-weight: bold; }
3. 表單驗證
突出顯示基於同級或父元素的無效輸入欄位。
.form-group:has(input:invalid) { border-color: red; }
4. 自訂兄弟姊妹關係
根據其相鄰同級元素設定元素的樣式。
h1:has(+ p) { margin-bottom: 10px; }
:has() 的優點
-
提高可讀性:
- 減少了對複雜 JavaScript 偵測和操作 DOM 的需求。
-
提升效能:
- 與類似效果的 JavaScript 解決方案相比,輕量級且有效率。
-
簡化 CSS:
- 為複雜關係啟用聲明式樣式,盡量減少額外的類別或屬性。
瀏覽器支援
到目前為止,大多數現代瀏覽器都支援 :has() 偽類,包括:
- Chrome:105
- 邊緣:105
- Safari:15.4
- Firefox:正在考慮支援。
對於較舊的瀏覽器,您可能需要後備或填充。
結論
:has() 偽類是現代 CSS 中的遊戲規則改變者,帶來了期待已久的父選擇器功能。憑藉其根據元素關係有條件地設定元素樣式的能力,它簡化了 CSS 程式碼,增強了動態樣式,並減少了對 JavaScript 進行 DOM 操作的依賴。
探索專案中的 :has() 偽類,並為創意和高效的網頁設計解鎖新的可能性!
以上是CSS :has() 偽類:強大的動態樣式選擇器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

文章討論了CSS FlexBox,這是一種佈局方法,用於有效地對齊和分佈響應設計中的空間。它說明了FlexBox用法,將其與CSS網格進行了比較,並詳細瀏覽了瀏覽器支持。

本文討論了使用CSS創建響應網站的技術,包括視口元標籤,靈活的網格,流體媒體,媒體查詢和相對單元。它還涵蓋了使用CSS網格和Flexbox一起使用,並推薦CSS框架

本文討論了CSS盒裝屬性,該屬性控制了元素維度的計算方式。它解釋了諸如Content-Box,Border-Box和Padding-Box之類的值,以及它們對佈局設計和形式對齊的影響。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3漢化版
中文版,非常好用