CSS 的 :is()和 :where() 即將在瀏覽器中和大家見面

来源:https://www.cnblogs.com/coderhf/archive/2020/07/03/13230322.html
-Advertisement-
Play Games

現在,Safari(技術預覽版106)和Firefox(版本78)的預覽版均支持新的CSS :is() 和 :where() 偽類。 Chrome的實施仍然落後。 使用 :is() 減少重覆 你可以使用 :is() 偽類來刪除選擇器列表中的重覆項。 /* BEFORE */ .embed .save ...


現在,Safari(技術預覽版106)和Firefox(版本78)的預覽版均支持新的CSS :is():where() 偽類。 Chrome的實施仍然落後。

使用 :is() 減少重覆

你可以使用 :is() 偽類來刪除選擇器列表中的重覆項。

 /* BEFORE */
 .embed .save-button:hover,
 .attachment .save-button:hover {
   opacity: 1;
 }/* AFTER */
 :is(.embed, .attachment) .save-button:hover {
   opacity: 1;
 }

 

此功能主要在未處理的標準CSS代碼中有用。如果使用Sass或類似的CSS預處理程式,則可能更喜歡嵌套。

註意:瀏覽器還支持非標準的 :-webkit-any():-moz-any() 偽類,它們與 :is() 相似,但限制更多。WebKit在2015年棄用了 :-webkit-any() ,Mozilla已將Firefox的用戶代理樣式表更新為使用 :is() 而不是 :-moz-any()

使用 :where() 來保持低特殊性

:where() 偽類與 :is() 具有相同的語法和功能。它們之間的唯一區別是 :where() 不會增加整體選擇器的特殊性(即某條CSS規則特殊性越高,它的樣式越優先被採用)。

:where() 偽類及其任何參數都不對選擇器的特殊性有所幫助,它的特殊性始終為零。

此功能對於應易於覆蓋的樣式很有用。例如,基本樣式表 sanitize.css 包含以下樣式規則,如果缺少 `` 屬性,該規則將設置預設的填充顏色:

 svg:not([fill]) {
   fill: currentColor;
 }

 

由於其較高的特殊性(B = 1,C = 1),網站無法使用單個類選擇器(B = 1)覆蓋此聲明,並且被迫添加 !important 或人為地提高選擇器的特殊性(例如 .share- icon.share-icon)。

 .share-icon {
   fill: blue; /* 由於特殊性較低,因此不適用 */
 }

 

CSS庫和基礎樣式表可以通過用 :where() 包裝它們的屬性選擇器來避免這個問題,以保持整個選擇器的低特殊性(C=1)。

 /* sanitize.css */
 svg:where(:not([fill])) {
   fill: currentColor;
 }/* author stylesheet */
 .share-icon {
   fill: blue; /* 由於特殊性較高,適用 */
 }

 

總結

如果你覺得這篇文章不錯,請別忘記點個關註哦~

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如需轉載,請註明出處:Flutter學習筆記(16)--BottomNavigationBar底部item超過3個只顯示icon,不顯示title items: [ _bottomItem(Ids.home, 'ic_home_normal', 'ic_home_selected', 0), _bo ...
  • 什麼是 React 高階組件 React 高階組件就是以高階函數的方式包裹需要修飾的 React 組件,並返回處理完成後的 React 組件。React 高階組件在 React 生態中使用的非常頻繁,比如react-router 中的 withRouter 以及 react-redux 中 conn ...
  • 新的一天又開始了,今天學習了三個內容 一、表格標簽 table 在各個網頁中我們會發現許多商品頁面,展示是用什麼來展示的呢,表格無疑是一種不錯的選擇看下圖。 一張常見的簡歷就是有表格標簽來編寫的 創建表格: <!-- 表格由基本標簽table tr td組成其中tr代表表格的行 td代表表格的列,行 ...
  • 一、什麼是 Promise 1.1 Promise 的前世今生 Promise 最早出現在 1988 年,由 Barbara Liskov、Liuba Shrira 首創(論文:Promises: Linguistic Support for Efficient Asynchronous Proce ...
  • JavaScript中數組去重的幾種方法 正常情況下,數據去重的工作一般都是由後端同事來完成的,但是前端也要掌握好處理數據的能力,萬一去重的工作交給我們大前端處理,我們也不能慫呀。現在我總結了一些去重的方法,希望對大家有點幫助。 方法一:new Set()實現數組去重 ES6 提供了新的數據結構 S ...
  • CSS實現居中對齊的幾種方式 頁面佈局中,居中對齊是我們經常遇到的場景,現在總結幾個常用的方式供大家參考。 場景一:按鈕文字居中對齊,line-height + text-align html代碼: <div class="btn">Hello World</div> CSS代碼: .btn{ wi ...
  • 做一個簡易計算器,效果圖片 c表示清空,為一個空字元串 +/-表示該值為正還是負 %表示當前值/100 ←表示退格,往前刪除一個值 eval 函數是能夠計算出字元串表達式或者語句的結果,把結果求出來。 代碼如下 <!DOCTYPE html> <html> <head> <meta charset= ...
  • 我第一次直播寫代碼是在去年七月份。我想要直播一下我在業餘時間內為開源項目領域所做的工作,儘管在youtube上的大部分直播都是關於游戲的。我比較擅長於NodeJS的硬體庫方面的工作(儘管大部分項目都是自己的)。並且我在youtube上曾經開啟過一個房間了,那為什麼我不繼續做下去?我的欄目可以叫做:基 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...