CSS優先順序的及其衡量標準CSS權重

来源:https://www.cnblogs.com/jaelynl/archive/2018/08/16/9489330.html
-Advertisement-
Play Games

一、背景 CSS有三大特性:層疊性、繼承性、優先順序。 而我們在給CSS定義樣式的時候,經常出現兩個及以上的規則應用在同一元素上,單該元素最終在瀏覽器呈現的效果是應用的哪個規則呢?這就要考慮優先順序的問題了。 CSS優先順序是由CSS權重來作為衡量標準的,權重的計算有一套計算公式,有如下規範: 使用一個4 ...


一、背景

CSS有三大特性:層疊性、繼承性、優先順序

而我們在給CSS定義樣式的時候,經常出現兩個及以上的規則應用在同一元素上,單該元素最終在瀏覽器呈現的效果是應用的哪個規則呢?這就要考慮優先順序的問題了。

CSS優先順序是由CSS權重來作為衡量標準的,權重的計算有一套計算公式,有如下規範:

使用一個4位數的字串來表示級別,從左到右,左邊的做大,往右依次遞減,且數位之間沒有進位,級別之間不可逾越。沒有進位的意思是:即使是10個標簽的權重相加也不會大於類選擇器的權重,類推,十個類選擇器的權重也小於id選擇器的。

繼承 或者 * 的貢獻值0,0,0,0
每個元素(標簽)的貢獻值 0,0,0,1
每個類、偽類貢獻值 0,0,1,0
每個ID貢獻值 0,1,0,0,
每個行內式貢獻值 1,0,0,0
每個!important 無窮大

二、權重的計算實例

以一下代碼為例:

<div>
    <ul>
        <li>1</li>
        <li class="red">2</li>
        <li  class="red" id="blue">3</li>
        <li  class="red" id="blue">4</li>
        <li>5</li>
        <li>6</li>
    </ul>
</div>

首先給li以下樣式:

div ul li{  /*該選擇器的權重是0,0,0,3*/
    width: 200px;
    height: 30px;
    border:1px solid #000;
    background-color: pink;
    }

標簽選擇器的權重

選擇器div ul li是後代選擇器,三個標簽的權重都是(0,0,0,1 ),因為是同一級選擇器,權重可以相加,最後得到div ul li的權重就是(0,0,0,3)。

類選擇器的權重

在以上樣式的基礎上給.red添加樣式.red{background-color:red;}效果如下:

權重:類、偽類選擇器>標簽選擇器

id選擇器的權重

在以上樣式的基礎上給id名為blue的li添加樣式#blue{background-color:blue;}效果如下:

id選擇器>類、偽類選擇器>標簽選擇器

行內樣式

在以上樣式的基礎上給第4個li添加行內樣式

<li class="red" id="blue" style="">4</li>

效果如下:第4個li的背景色只呈現了行內樣式的設置,其他的都被覆蓋了。

行內樣式>id選擇器>類、偽類選擇器>標簽選擇器

複合選擇器權重計算例如:

div ul  li   ------>      0,0,0,3

.nav ul li   ------>      0,0,1,2    (2個標簽,1個類)

a:hover      -----—>      0,0,1,1     (1個標簽,一個偽類)

.nav a       ------>      0,0,1,1   (1個標簽,一個類)

#nav p       ----->       0,1,0,1   (1個id,一個標簽)

三、總結優先順序

總結排序:!important > 行內樣式>ID選擇器 > 類選擇器 > 標簽 > 通配符 > 繼承 > 瀏覽器預設屬性

需要註意的特殊情況:

  1. 繼承樣式的權重為0。即在嵌套結構中,不管父元素樣式的權重多大,被子元素繼承時,他的權重都為0,也就是說子元素定義的樣式會覆蓋繼承來的樣式。
  2. 行內樣式優先。應用style屬性的元素,其行內樣式的權重非常高,可以理解為遠大於100。總之,他擁有比上面提高的選擇器都大的優先順序。
  3. 權重相同時,CSS遵循就近原則。也就是說靠近元素的樣式具有最大的優先順序,或者說排在最後的樣式優先順序最大。
  4. CSS定義了一個!important命令,該命令被賦予最大的優先順序。也就是說不管權重如何以及樣式位置的遠近,!important都具有最大優先順序。

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

-Advertisement-
Play Games
更多相關文章
  • JavaScript 中常見設計模式 單例模式 策略模式 代理模式 迭代器模式 發佈訂閱模式 命令模式 組合模式 模板方法模式 享元模式 職責鏈模式 中介者模式 裝飾者模式 狀態模式 適配器模式 各設計模式關鍵詞 看完了上述設計模式後,把它們的關鍵詞特點羅列出來,以後提到某種設計模式,進而聯想相應的 ...
  • 什麼是狀態模式? 定義:將事物內部的每個狀態分別封裝成類,內部狀態改變會產生不同行為。 主要解決:對象的行為依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行為。 何時使用:代碼中包含大量與對象狀態有關的條件語句。 如何解決:將各種具體的狀態類抽象出來。 應用實例: 1、打籃球的時候運 ...
  • 一.數組的定義(來源於Array.prototype) 1.構造函數方法: (1)var arr = new Array();//沒有參數等價於 var arr = []; (2)var arr = new Array(length);//創建指定長度的數組;預分配一個數組空間;但數組中沒有存儲值, ...
  • jQuery的優勢: 使用jQuery: jQuery對象和DOM對象的區別 一://取得jsDOM對象: 二://獲得jquery對象 三:DOM對象與jQuery對象互相轉換 可以把jQuery對象看做DOM對象的數組,因此 可以通過索引下標在jQuery中獲取DOM對象 方法一:jquery對 ...
  • MDN定義:位運算符將它的操作數視為32位元的二進位串(0和1組成)而非十進位八進位或十六進位數。 例如:十進位數字9用二進位表示為1001,位運算符就是在這個二進位表示上執行運算,但是返回結果是標準的JavaScript數值。 位運算符有7個,這裡只講一個:按位異或^ 用法: a^b, 運算規則: ...
  • 11、強制轉換 強制轉換主要指使用Number、String和Boolean三個構造函數,手動將各種類型的值,轉換成數字、字元串或者布爾值。 1>Number強制轉換 參數為原始類型值的轉換規則: 原始類型的值主要是字元串、布爾值、undefined和null,它們都能被Number轉成數值或NaN ...
  • 4-1 渲染機制:-1-,什麼是DOCTYPE及其作用?DTD(document type definition,文檔類型定義)是一系列的語法規則,用來定義XML或(X)HTML的文件類型,瀏覽器會使用DTD來判斷文檔類型,決定使用何種協議來解析,以及切換瀏覽器模式。DOCTYPE就是用來聲明文檔類 ...
  • 什麼是職責鏈模式? 重要性:4 星,在項目中能對 if-else 語句進行優化 定義:避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿著這條鏈傳遞請求,直到有對象處理它為止。 主要解決:職責鏈上的處理者負責處理請求,客戶只需要將請求發送到職責鏈上即可,無須 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...