CSS `:is()` `:where()` 實戰指南:簡化選擇器,提升可維護性

🎯 CSS :is() & :where() 實戰指南:簡化選擇器,提升可維護性

你是否在項目中寫過一大串重復的選擇器?比如:

h1, h2, h3, h4, h5, h6 { margin-bottom: 1rem; }

這樣的代碼既冗長又難維護。
現在 CSS 提供了 :is():where() 選擇器,讓你可以寫得更短、更優雅,還能更好地控制優先級。


🧠 什么是 :is():where()

它們都是 選擇器列表函數,允許你在一個規則中傳入多個候選選擇器:

  • :is():匹配多個選擇器,計算 正常的優先級
  • :where():匹配多個選擇器,但 權重始終為 0

? 基礎示例

/* 用 :is() 簡化 */
:is(h1, h2, h3, h4, h5, h6) {margin-bottom: 1rem;
}

效果等同于:

h1, h2, h3, h4, h5, h6 {margin-bottom: 1rem;
}

🧪 實戰一:按鈕多狀態寫法

.button:is(:hover, :focus, :active) {background: #4f46e5;color: white;
}

📌 優勢:不再寫 .button:hover, .button:focus, .button:active,簡潔很多。


🧪 實戰二:用 :where() 降低選擇器優先級

/* 全局 reset 樣式 */
:where(h1, h2, h3, p) {margin: 0;padding: 0;
}

📌 因為 :where() 權重為 0,后續樣式可以輕松覆蓋,不會“打架”。


🌟 高級技巧

  1. 組合選擇器

    .card :is(h2, h3) {color: #111;
    }
    

    ? 匹配 .card 內的所有 h2h3

  2. 與偽類結合

    nav :is(a:hover, a:focus) {text-decoration: underline;
    }
    
  3. 重置 + 覆蓋最佳實踐

    • :where() 寫 Reset(低優先級)
    • :is() 寫組件邏輯(正常優先級)

🌐 瀏覽器支持(2025)

瀏覽器支持情況
Chrome 88+?
Safari 15+?
Firefox 78+?
Edge 88+?

📌 幾乎已完全普及,可以放心用在生產環境。


?? 注意事項

  • :is() 的權重 = 里面最具體選擇器的權重

    div:is(.highlight, #id) { ... }
    

    權重會按 #id 來算。

  • :where() 永遠是 0 權重,適合寫 Reset 或全局初始化。

  • 不要濫用,否則可讀性可能下降。


? 一句話總結

:is():where() 是現代 CSS 的“選擇器助手”,讓你的樣式更簡潔、更可維護,合理利用權重差異,還能輕松寫出優雅的架構。

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

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

相關文章

Linux I/O 訪問架構深入分析

Linux I/O 訪問架構深入分析 目錄 概述I/O 架構層次核心數據結構I/O 處理流程VFS 虛擬文件系統塊設備I/O字符設備I/O內存映射I/O異步I/O機制I/O調度器調試工具與方法性能優化策略 概述 Linux I/O 系統是一個多層次、高度抽象的架構,旨在為應用程序提供統一的文件訪問…

Linux:6_基礎IO

基礎IO 一.理解"文件" 文件分類 1.內存級(被打開)文件 2.磁盤級文件 1. 狹義理解 文件在磁盤里磁盤是永久性存儲介質,因此文件在磁盤上的存儲是永久性的磁盤是外設 (即是輸出設備也是輸入設備)磁盤上的文件本質是對文件的所有操作,都是對外…

Coze源碼分析-資源庫-刪除插件-前端源碼-核心邏輯

刪除插件邏輯 1. 刪除操作入口組件 刪除插件操作主要通過 usePluginConfig hook 中的 renderActions 方法實現,該方法返回 TableAction 組件來處理表格行的操作。 文件位置:frontend/packages/studio/workspace/entry-base/src/pages/library/hooks/u…

第一代:嵌入式本地狀態(Flink 1.x)

最初的架構將狀態以 JVM Heap 對象的形式存儲在 TaskManager 的內存中。對于小規模數據集,這種方式效果良好,但隨著狀態大小的增長超出內存,將所有狀態保存在內存中變得成本高昂且不穩定。 為了解決狀態規模增長的問題,引入了一種…

跨境金融數據對接實踐:印度NSE/BSE股票行情API集成指南

跨境金融數據對接實踐:印度NSE/BSE股票行情API集成指南 關鍵詞:印度股票數據對接 NSE實時行情 BSE證券接口 金融API開發 Python請求示例一、印度股市數據源技術解析(核心價值) 印度兩大交易所數據獲取難點: 時區差異&a…

AFSim2.9.0學習筆記 —— 1、AFSim及完整工具介紹(文末附:完整afsim2.9.0源碼、編譯好的完整工具包、中文教材等)

🔔 AFSim2.9.0 相關技術、疑難雜癥文章合集(掌握后可自封大俠 ?_?)(記得收藏,持續更新中…) AFSim介紹 AFSim(Advanced Framework for Simulation Integration & Modeling【高級仿真集成與…

ArcGIS學習-18 實戰-降雨量空間分布插值分析

設置環境加載要素投影查看要素,發現均不是投影數據,但都是地理坐標都是WGS1984使用工具進行批量投影然后新建空地圖,重新加載確認圖層的投影與柵格數據一致插值樣條法得到反距離權重法插值得到克里金法插值得到

HarmonyOS應用開發:深入理解聲明式UI與彈窗交互的最佳實踐

HarmonyOS應用開發:深入理解聲明式UI與彈窗交互的最佳實踐 引言 隨著HarmonyOS 4.0的發布及后續版本的演進,華為的分布式操作系統已經進入了全新的發展階段。基于API 12及以上的開發環境為開發者提供了更強大、更高效的開發工具和框架。在HarmonyOS應用…

探索Java并發編程--從基礎到高級實踐技巧

Thread(線程)線程 程序執行的最小單位(一個進程至少有一個線程)。線程內有自己的執行棧、程序計數器(PC),但與同進程內其他線程共享堆內存與進程資源 在java中,線程由java.lang.Thr…

Go語言實戰案例-開發一個Markdown轉HTML工具

這個小工具可以把 .md 文件轉換為 .html 文件,非常適合寫筆記、博客或者快速預覽 Markdown 內容。📌 案例目標? 讀取一個 Markdown 文件? 使用開源庫將 Markdown 轉換為 HTML? 將 HTML 輸出到新文件中📦 所需庫我們用 goldmark 這個 Markd…

基于51單片機的太陽能鋰電池充電路燈

基于51單片機的太陽能鋰電池充電路燈系統設計 1 系統功能介紹 本設計以 STC89C52單片機 為核心,構建了一個能夠利用太陽能為鋰電池充電并智能控制LED路燈的系統。系統結合了 光照檢測電路、LED燈電路、按鍵檢測電路、太陽能充電電路 等模塊,實現了節能、…

PAT 1178 File Path

這一題的大意是給出了一個windows的文件夾目錄,讓我們按照所屬的目錄關系,來找相應的目錄是否存在,如果存在,就輸出找到該文件的路徑,如果不存在輸出error 我的思路是用合適的樹形結構保存下來目錄的所屬關系&#xff…

云原生部署_k8s入門

K8S官網文檔:https://kubernetes.io/zh/docs/home/Kubernetes是什么Kubernetes 是用于自動部署、擴縮和管理容器化應用程序的開源系統。 Kubernetes 源自 ,Google 15 年生產環境的運維經驗同時凝聚了社區的最佳創意和實踐。簡稱K8s.Kubernet…

實戰項目-----Python+OpenCV 實現對視頻的椒鹽噪聲注入與實時平滑還原”

實戰項目實現以下功能:功能 1:為視頻每一幀添加椒鹽噪聲作用:模擬真實環境中圖像傳輸或采集時可能出現的噪聲。實現方式:讀取視頻的每一幀。隨機選擇 10000 個像素點,將其設置為黑色(0)或白色&a…

Day42 PHP(mysql注入、跨庫讀取)

一、sql注入基本原理:沒有對用戶輸入的數據進行限制,導致數據庫語句可以做什么,用戶就可以做什么。取決于不同數據庫的不同查詢語言,所以為什么有mysql注入/orcale注入等等。步驟:【access】表名(字典爆破來…

機器人控制器開發(部署——軟件打包備份更新)

文章總覽 為什么做備份更新 為機器人控制器設計一套打包備份更新機制,為控制器的批量生產和產品與項目落地做準備。 當某個模塊出現bug需要升級時,用戶可以快速獲取正確的bak包并導入到控制器中重啟生效。 如果沒有做好軟件的備份更新機制&#xff0c…

LaTeX TeX Live 安裝與 CTAN 國內鏡像配置(Windows / macOS / Linux 全流程)

這是一份面向國內環境的 LaTeX 從零到可編譯 指南:覆蓋 TeX Live / MacTeX 安裝、PATH 配置、CTAN 國內鏡像(清華/北外/上交/中科大等)一鍵切換與回滾、常見坑位(權限、鏡像路徑、版本切換)、以及 XeLaTeX/latexmk 的實…

WhoisXML API再次榮登2025年美國Inc. 5000快速成長企業榜單

WhoisXML API非常自豪地宣布,我們再次榮登美國權威榜單——2025年Inc.5000全美成長最快的私營企業之一。今年,公司在地區排名中位列第119名,在全美總體排名中位列第4,271名。Inc. 5000榜單要求參評企業必須保持獨立運營,并在2021至…

Elasticsearch面試精講 Day 9:復合查詢與過濾器優化

【Elasticsearch面試精講 Day 9】復合查詢與過濾器優化 在Elasticsearch的搜索體系中,復合查詢(Compound Queries)與過濾器(Filters)優化是構建高效、精準搜索邏輯的核心能力。作為“Elasticsearch面試精講”系列的第…

Android使用ReactiveNetwork監聽網絡連通性

引入庫 implementation com.github.pwittchen:reactivenetwork-rx2:3.0.8監聽網絡連接變更ReactiveNetwork.observeNetworkConnectivity(context).subscribeOn(Schedulers.io())// ... // anything else what you can do with RxJava.observeOn(Schedulers.computation()).subs…