首頁 > web前端 > css教學 > CSS :has() 偽類:強大的動態樣式選擇器

CSS :has() 偽類:強大的動態樣式選擇器

Mary-Kate Olsen
發布: 2024-12-23 18:55:20
原創
303 人瀏覽過

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;
}

登入後複製
<!DOCTYPE html>
<html>
  <head>
    <title>CSS :has() Example</title>
    <meta charset="UTF-8" />
    <link rel="stylesheet" href="./styles.css" />
  </head>
  <body>
    <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="https://img.php.cn/upload/article/000/000/000/173495132393104.jpg" 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() 的優點

    1. 提高可讀性

      • 減少了對複雜 JavaScript 偵測和操作 DOM 的需求。
    2. 提升效能

      • 與類似效果的 JavaScript 解決方案相比,輕量級且有效率。
    3. 簡化 CSS:

      • 為複雜關係啟用聲明式樣式,盡量減少額外的類別或屬性。

    瀏覽器支援

    到目前為止,大多數現代瀏覽器都支援 :has() 偽類,包括:

    • Chrome:105
    • 邊緣:105
    • Safari:15.4
    • Firefox:正在考慮支援。

    對於較舊的瀏覽器,您可能需要後備或填充。


    結論

    :has() 偽類是現代 CSS 中的遊戲規則改變者,帶來了期待已久的父選擇器功能。憑藉其根據元素關係有條件地設定元素樣式的能力,它簡化了 CSS 程式碼,增強了動態樣式,並減少了對 JavaScript 進行 DOM 操作的依賴。

    探索專案中的 :has() 偽類,並為創意和高效的網頁設計解鎖新的可能性!

  • 以上是CSS :has() 偽類:強大的動態樣式選擇器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    來源:dev.to
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板