Web前端開發: :where(偽類函數選擇器)

:where(偽類函數選擇器):

? ? :where()?是 CSS Selectors Level 4 規范中引入的一個強大的偽類函數選擇器,它允許開發者以簡潔的方式編寫復雜的選擇器,同時具有獨特的優先級特性。

核心概念:

? ? :where()?偽類函數選擇器與?:is()?非常相似,但有一個關鍵區別:它不會增加選擇器的優先級權重

基本語法:

:where(selector1, selector2, ..., selectorN) {/* 樣式規則 */
}

核心特性:

  1. 優先級歸零:where()?內的選擇器不會增加整個選擇器的優先級

  2. 簡化選擇器:減少重復的選擇器代碼

  3. 容錯機制:忽略無效選擇器而不破壞整個規則

  4. 嵌套支持:支持多層嵌套使用

應?場景示例:

1、降低選擇器的特異性

????????:where() 選擇器可以?來降低特定規則的特異性,使得這些規則更容易被其他樣式覆蓋。這在重置或歸?化樣式時?常有?。
:where(.class1, .class2) {color: black;
}
在這個示例中, .class1 .class2 的特異性被降低,它們將顏?設置為??。

2、避免特異性戰爭

當你不希望樣式規則之間發?特異性沖突時, :where() 是?個有?的?具。
:where(header, main, footer) h1 {font-size: 2em;
}

?這個例?中,?論 header , main , footer 的特異性如何, h1 標簽總是應?相同的字體??。

3、與 :is() 選擇器結合

:where() 可以與 :is() 選擇器結合使?,以控制樣式規則的特異性。
:where(article, section) :is(h1, h2, h3) {margin-top: 0;
}

?????????在這個示例中,?論 article section 的特異性如何, h1 , h2 , h3 標簽的上邊距都會被設置為0

完整示例與演示:

代碼:

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS :where() 偽類函數選擇器</title><style>* {box-sizing: border-box;margin: 0;padding: 0;}body {font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;line-height: 1.6;color: #333;background: linear-gradient(135deg, #1a2a6c, #b21f1f, #1a2a6c);padding: 20px;min-height: 100vh;}.container {max-width: 1200px;margin: 0 auto;background-color: rgba(255, 255, 255, 0.95);border-radius: 15px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);overflow: hidden;}header {background: linear-gradient(to right, #3498db, #2c3e50);color: white;padding: 2rem;text-align: center;border-bottom: 5px solid #2980b9;}h1 {font-size: 2.8rem;margin-bottom: 1rem;text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);}.subtitle {font-size: 1.4rem;opacity: 0.9;max-width: 800px;margin: 0 auto;}.content {display: flex;flex-wrap: wrap;padding: 30px;gap: 30px;}.explanation,.demo {flex: 1;min-width: 300px;background: white;border-radius: 10px;padding: 25px;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);}h2 {color: #2c3e50;border-bottom: 3px solid #3498db;padding-bottom: 10px;margin-bottom: 20px;font-size: 1.8rem;}h3 {color: #3498db;margin: 15px 0 10px;}.code-block {background: #2c3e50;color: #ecf0f1;padding: 15px;border-radius: 8px;font-family: 'Courier New', monospace;margin: 15px 0;overflow-x: auto;}.comment {color: #95a5a6;font-style: italic;}.selector {color: #e74c3c;}.property {color: #3498db;}.value {color: #2ecc71;}/* :where() 選擇器演示 */:where(section, article, aside) :where(h2, h3) {color: #9b59b6;border-left: 4px solid #9b59b6;padding-left: 10px;}/* 這個規則會覆蓋上面的 :where() 規則 */section h2 {color: #e74c3c;border-left: 4px solid #e74c3c;}/* 優先級演示 */:where(#priority-demo, .priority-class) p {background-color: #3498db;color: white;padding: 10px;border-radius: 4px;}.priority-class p {background-color: #2ecc71;}/* 容錯機制演示 */:where(.valid-class, :invalid-selector) p {background-color: #f1c40f;color: #333;padding: 10px;border-radius: 4px;}.demo-container {display: grid;grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));gap: 20px;margin-top: 20px;}.demo-box {background: #f8f9fa;border: 1px solid #ddd;border-radius: 8px;padding: 20px;text-align: center;transition: all 0.3s ease;}.demo-box:hover {transform: translateY(-5px);box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);background: #fff;}.demo-box h3 {margin-top: 0;color: #2c3e50;}.priority-demo {background: #f0f7ff;padding: 15px;border-radius: 8px;margin-top: 20px;}footer {text-align: center;padding: 20px;background: #2c3e50;color: white;margin-top: 30px;border-top: 5px solid #3498db;}.browser-support {display: flex;justify-content: center;gap: 15px;flex-wrap: wrap;margin-top: 15px;}.browser {background: #34495e;padding: 8px 16px;border-radius: 30px;font-size: 0.9rem;}@media (max-width: 768px) {.content {flex-direction: column;}h1 {font-size: 2.2rem;}}</style>
</head><body><div class="container"><header><h1>CSS `:where()` 偽類函數選擇器</h1><p class="subtitle">零優先級選擇器,創建易于覆蓋的基礎樣式</p></header><div class="content"><div class="explanation"><h2>:where() 是什么?</h2><p><strong>:where()</strong> 偽類函數選擇器接受一個選擇器列表作為參數,匹配列表中任意選擇器可以選擇的元素,但<strong>不會增加選擇器的優先級</strong>。</p><div class="demo-box"><h3>核心優勢</h3><ul><li><strong>零優先級</strong>:不會增加選擇器權重,易于覆蓋</li><li><strong>代碼簡化</strong>:減少選擇器列表中的重復</li><li><strong>容錯機制</strong>:忽略無效選擇器而不破壞整個規則</li><li><strong>嵌套支持</strong>:支持多層嵌套使用</li></ul></div><h3>基本語法</h3><div class="code-block"><span class="comment">/* 匹配header或footer中的h1或h2元素 */</span><br><span class="selector">:where(header, footer) :where(h1, h2)</span> {<br>&nbsp;&nbsp;<span class="property">color</span>: <span class="value">#9b59b6</span>;<br>}</div><h3>與 :is() 的對比</h3><div class="code-block"><span class="comment">/* :is() - 優先級基于參數 */</span><br><span class="selector">:is(header, footer) h1</span> { <span class="comment">/* 優先級: 0,0,2 */</span>}<br><br><span class="comment">/* :where() - 優先級為零 */</span><br><span class="selector">:where(header, footer) h1</span> { <span class="comment">/* 優先級: 0,0,0*/</span> }</div><h3>使用場景</h3><ul><li>CSS重置和基礎樣式</li><li>主題和框架開發</li><li>需要輕松覆蓋的通用樣式</li><li>簡化復雜的選擇器組</li></ul></div><div class="demo"><h2>實際演示</h2><h3>標題樣式</h3><p>使用 :where() 設置基礎標題樣式:</p><div class="demo-container"><section class="demo-box"><h2>Section 標題</h2><p>基礎樣式來自 :where(),但被后續規則覆蓋</p></section><article class="demo-box"><h2>Article 標題</h2><p>保持 :where() 設置的紫色樣式</p></article><aside class="demo-box"><h3>Aside 子標題</h3><p>保持 :where() 設置的紫色樣式</p></aside></div><div class="priority-demo"><h3>優先級演示</h3><p>:where() 規則優先級為0,容易被覆蓋:</p><div class="demo-container"><div id="priority-demo" class="demo-box"><h3>ID選擇器元素</h3><p>使用 :where() 設置藍色背景</p></div><div class="priority-class demo-box"><h3>類選擇器元素</h3><p>:where() 樣式被后續規則覆蓋為綠色</p></div></div></div><h3>容錯機制</h3><p>:where() 忽略無效選擇器,應用有效部分:</p><div class="demo-container"><div class="valid-class demo-box"><h3>有效選擇器</h3><p>應用了 :where() 的黃色背景</p></div><div class="demo-box"><h3>普通元素</h3><p>沒有應用特殊樣式</p></div></div><div class="demo-box"><h3>瀏覽器支持</h3><p>:where() 在現代瀏覽器中得到良好支持:</p><div class="browser-support"><div class="browser">Chrome 88+</div><div class="browser">Firefox 78+</div><div class="browser">Safari 14+</div><div class="browser">Edge 88+</div></div></div></div></div><footer><p>CSS :where() 偽類函數選擇器演示 | 創建零優先級基礎樣式</p><p>提示::where() 特別適合用于CSS重置和基礎樣式框架</p></footer></div>
</body></html>

效果展示:

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88115.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EfficientVMamba: Atrous Selective Scan for Light Weight Visual Mamba論文精讀(逐段解析)

EfficientVMamba: Atrous Selective Scan for Light Weight Visual Mamba論文精讀&#xff08;逐段解析&#xff09; 論文地址&#xff1a;https://arxiv.org/abs/2403.09977 CVPR 2024 Abstract. Prior efforts in light-weight model development mainly centered on CNN an…

Integer緩沖區

文章目錄常見面試題&#xff1a;總結Integer緩沖區是Java預先創建的一個固定范圍的Integer對象緩存池&#xff08;默認-128到127&#xff09;&#xff0c;用于自動復用頻繁使用的整數值&#xff0c;減少內存開銷和對象創建。當通過自動裝箱或Integer.valueOf()生成該范圍內的整…

[國家電網備考]計算機網絡

計算機網絡的概述 概念: 用通信設備與線路將地理位置不同,功能獨立的計算機系統互連起來,以功能完善的網絡軟件實現網絡中資源共享和信息傳遞的系統 自治計算機: 能夠自我管理,配置,維護的計算機(目前我們使用的電腦) 以前的終端只有顯示器,不能叫做自治計算機 計算機網絡向用戶…

在 Linux(openEuler 24.03 LTS-SP1)上安裝 Kubernetes + KubeSphere 的防火墻放行全攻略

目錄 在 Linux&#xff08;openEuler 24.03 LTS-SP1&#xff09;上安裝 Kubernetes KubeSphere 的防火墻放行全攻略 一、為什么要先搞定防火墻&#xff1f; 二、目標環境 三、需放行的端口和協議列表 四、核心工具說明 1. 修正后的 exec.sh 腳本&#xff08;支持管道/重…

HTTP 響應頭信息詳解

HTTP 響應頭信息詳解 引言 HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的網絡協議之一。在HTTP協議中,響應頭信息是服務器向客戶端發送的重要信息之一。響應頭信息包含了關于響應的元數據,如狀態碼、內容類型、緩存策略等。本文將詳細介紹HTTP響應頭信息的概念、類型、作…

去掉長按遙控器power鍵后提示關機、飛行模式的彈窗

首先找到對應長短按power鍵的位置&#xff1a;frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.javaprivate final Runnable mPowerLongPress new Runnable() {Overridepublic void run() {// The context isnt readif (mLongPressOnPowerBe…

Redis-哨兵機制Sentinel

redis的主從復制模式下,一旦主節點出現了故障無法提供服務了,需要人工進行主從切換,同時大量的客戶端需要被通知切換到新的主節點上,對于有了一定規模的應用來說,這種方案的延遲是無法接受的,于是redis2.8提供了Redis-Sentinel(哨兵)來解決這個問題. 目錄 1.啥是哨兵節點: 2.r…

SQL 視圖

SQL 視圖 引言 SQL 視圖是數據庫管理系統中的一種重要概念,它允許用戶以不同的方式查看數據庫中的數據。本文將詳細介紹 SQL 視圖的概念、作用、創建方法以及在實際應用中的注意事項。 一、SQL 視圖的概念 SQL 視圖是數據庫中的一種虛擬表,它并不存儲實際的數據,而是基于…

ESP32-使用VSCODE 各種問題總結匯總

1 問題 1 1.1 具體問題描述-config:idf.customExtraPath 無法正確描述launch.json 中使用了一個變量&#xff1a; ${config:idf.customExtraPaths}但在 VSCode 的設置中&#xff0c;并沒有找到對應的設置項 idf.customExtraPaths&#xff0c;所以無法解析。 1.2 問題解決 1.2.1…

【剪裁Patch】已標注的WSI剪裁Patch的處理流程(以QuPath軟件得到的標注信息為例)

1. 整體處理思路 整體處理流程如圖所示,概括來說就是:根據標注信息將WSI區分為腫瘤區域和正常區域,對這個區域進行采樣裁剪得到具有Patch級別標簽的Patch。 當然,這里的Patch標簽是根據標注信息決定的,如果標注的是癌癥亞型信息,那么也可以將不同亞型的Patch區分出來。 …

Qt 與Halcon聯合開發九:算法類設計與實現講解(附源碼)

一、設計背景 在機器視覺系統中&#xff0c;算法是系統的核心。不同產品、不同項目對圖像處理的要求不盡相同&#xff0c;因此算法需要具備&#xff1a; 靈活拓展&#xff1a;方便添加新算法統一調用&#xff1a;界面或上層邏輯不關心算法細節結構清晰&#xff1a;便于維護與…

npu-driver 23.0.3驅動安裝

宿主機器上安裝npu-driver/ npu-firmware這兩個東西 wget -O Ascend-hdk-910b-npu-driver_23.0.3_linux-aarch64.run https://bj.bcebos.com/v1/aipe-easyedge-public/cann/eb_speed/Ascend-hdk-910b-npu-driver_23.0.3_linux-aarch64.run?authorizationbce-auth-v1%2F50c8bb…

LeetCode題解---<三數之和>

文章目錄題目<三數之和>--Python解法題解題目<三數之和>–Python解法 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請你返回所有和為…

探索Insplorion氫氣傳感器:高靈敏度與快速響應的創新解決方案

在追求更清潔、更安全能源的過程中&#xff0c;氫氣作為一種理想的清潔能源載體&#xff0c;正日益受到全球的重視。然而&#xff0c;氫氣的廣泛應用也帶來了新的挑戰——如何確保其儲存、運輸和使用的安全性&#xff1f;Insplorion通過其獨特的納米等離子體傳感&#xff08;NP…

【QT】事件(鼠標、按鍵、定時器、窗口)

文章目錄1. 事件1.1 事件的介紹1.2 事件的處理2. 按鍵事件3. 鼠標事件4. 定時器5. 窗口事件1. 事件 1.1 事件的介紹 事件是應用程序內部或者外部產生的事情或者動作的統稱。 在 Qt 中使用?個對象來表示?個事件。所有的 Qt 事件均繼承于抽象類 QEvent。事件是由系統或者 Qt …

STM32固件升級設計——串口IAP升級(基于YMODEM協議)

目錄 一、功能描述 1、BootLoader部分&#xff1a; 2、APP部分&#xff1a; 二、BootLoader程序制作 1、分區定義 2、 主函數 3、YMODEM協議的實現 4、程序跳轉 三、APP程序制作 四、工程配置&#xff08;默認KEIL5&#xff09; 五、運行測試 結束語 概述 IAP&…

Cookie(搭配domain)/Session(搭配HttpServletRequest+HttpSession)

各位看官&#xff0c;大家早安午安晚安呀~~~如果您覺得這篇文章對您有幫助的話歡迎您一鍵三連&#xff0c;小編盡全力做到更好 歡迎您分享給更多人哦今天我們來學習&#xff1a;Cookie/Session1.Cookie/Session的簡述我們在講解HTTP協議的時候已經講解過Cookie了HTTP 協議自身是…

240.搜索二維矩陣Ⅱ

純暴力有點太唐了&#xff0c;不過竟然能過&#xff1b;還有行和列的表示我一直搞反了。。。class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int i 0 ;i<matrix.length;i){for(int j 0 ;j<matrix[0].length;j){if(matrix[i][j]target)…

【計算機組成原理】-CPU章節學習篇—筆記隨筆

計算機組成原理 CPU 章節知識點總結&#xff08;適用于 408 考研&#xff09;? 一、CPU 的功能與基本結構? 1.1 CPU 的功能? CPU&#xff08;中央處理器&#xff09;是計算機的核心部件&#xff0c;主要功能包括&#xff1a;? 指令控制&#xff1a;程序的順序執行&#xff…

公用測控裝置的功能

公用測控裝置在電力系統中廣泛應用于變電站的高壓開關單元、變壓器本體及低壓側等對象。它集測量、控制、保護于一體&#xff0c;確保電網的安全、穩定運行。公用測控裝置采用高性能硬件架構&#xff0c;如32位微控制器和獨立AD采樣技術&#xff0c;結合軟件算法&#xff0c;實…