[讀書筆記] CSS權威指南2: 結構和層疊

来源:http://www.cnblogs.com/philipding/archive/2016/04/24/5426619.html
-Advertisement-
Play Games

層疊樣式表中最基本的一個方面可能就是層疊——衝突的聲明要通過這個層疊過程排序,並由此確定最終的文檔表示。這個過程的核心是選擇器及其相關聲明的特殊性,以及繼承機制。 特殊性 對於每個規則,用戶代理會計算選擇器的特殊性,並將這個特殊性附加到規則中的各個聲明。如果一個元素有兩個或多個衝突的屬性聲明,那麼有 ...


層疊樣式表中最基本的一個方面可能就是層疊——衝突的聲明要通過這個層疊過程排序,並由此確定最終的文檔表示。這個過程的核心是選擇器及其相關聲明的特殊性,以及繼承機制。

特殊性

對於每個規則,用戶代理會計算選擇器的特殊性,並將這個特殊性附加到規則中的各個聲明。如果一個元素有兩個或多個衝突的屬性聲明,那麼有最高特殊性的聲明就會勝出。

選擇器的特殊性由選擇器本身的組件確定。特殊性值表述為4個部分,如:0,0,0,0。一個選擇器的具體特殊性如下確定:

對於選擇器中給定的各個ID屬性值,加0,1,0,0。

對於選擇器中給定的各個類屬性值,屬性選擇或偽類,加0,0,1,0。

對於選擇器中給定的各個元素和偽元素,加0,0,0,1。

內聯樣式,加1,0,0,0。

結合符和通配符選擇器對特殊性沒有任何貢獻

h1{color:red;}/* specifity = 0,0,0,1 */
p em{color:purple;}/* specifity = 0,0,0,2 */
.grape{color:purple;}/* specifity = 0,0,1,0 */
*.bright{color:yellow;}/* specifity = 0,0,1,0 */
p.bright em.dark{color:maroon;}/* specifity = 0,0,2,2 */
#id216{color:blue;}/* specifity = 0,1,0,0 */
div#sidebar *[href]{color:silver;}/* specifity = 0,1,1,1 */
h1+p{color:black;font-style:italic;}/* specifity = 0,0,0,2 */
<h1 style="color:green;">Green</h1> /* specifity = 1,0,0,0*/

重要性

CSS允許在這些聲明的結束分號之前插入 !important 來標誌。

p.dark {color:#333 !important; background: white;}

標誌為!important的聲明並沒有特殊的特殊性值,不過要與非重要聲明分開考慮。實際上,所有!important聲明會分組在一起,重要聲明的特殊性衝突會在重要聲明內部解決,而不會與非重要聲明相混。如果一個重要聲明和一個非重要聲明衝突,勝出的總是重要聲明。

繼承

樣式不僅應用到指定的元素,還會應用到它的後代元素。

/*
將聲明color :gray;應用到ul元素時,這個元素會採用該聲明。這個值再沿著樹向下傳播到後代元素,並一直繼續,直到再沒有更多的後代元素繼承這個值為止。值絕對不會向上傳播,也就是說,元素不會把值向上傳遞到其祖先。
*/
/*
註意:在HTML中,對於向上傳播規則有一個例外:應用到body元素的背景樣式可以傳遞到html元素(html是文檔的根元素),相應地可以定義其畫布。
*/
ul {
    color: red;
}

一般地,大多數框模型屬性(包括外邊距、內邊距、背景和邊框)不能繼承。

繼承的值根本沒有特殊性,甚至連0特殊性都沒有。

只要id為toolbar的元素只包含純文本而不包含其他內容,這就能正常起作用。不過,如果這個元素中的文本都是超鏈接(a元素),用戶代理的超鏈接樣式就會占上風。在一個Web瀏覽器中,這意味著它們的顏色很可能是藍色,因為瀏覽器的樣式表可能包含以下規則:

a:link {color: blue;}

為剋服這個問題,必須如下聲明:

#toolbar {color: white; background: black;}

#toolbar a:link {color: white;}通過向工具條中的a元素直接指定規則才可以覆蓋預設的規則了。

而通配選擇器具有0特殊性,所以一旦應用了通配選擇器,它就會覆蓋繼承的值,所以通配選擇器往往有一種短路繼承的效果。這說明不加區別的使用通配選擇器可能存在奇怪的問題。

層疊

  1. 按顯式權重對應用到該元素的所有聲明排序。標誌!important的規則的權重要高於沒有!important標誌的規則。
  2. 按來源對應用到給定元素的所有聲明排序。共有3種來源:創作人員、讀者和用戶代理。正常情況下,創作人員的樣式要勝過讀者的樣式。有!important標誌的讀者樣式要強乾所有其他樣式,這包括有!important標誌的創作人員樣式。創作人員樣式和讀者樣式都比用戶代理的預設樣式要強。
    1. 讀者的!important樣式
    2. 創作者的!important樣式
    3. 創作者的正常樣式
    4. 讀者的正常樣式
    5. 用戶代理聲明的樣式
  3. 按特殊性對應用到給定元素的所有聲明排序。有較高特殊性的元素權重要大於有較低特殊性的元素。
  4. 按出現順序對應用到給定元素的所有聲明排序。一個聲明在樣式表或文檔中越後出現,它的權重就越大。如果樣式表中有導入的樣式表,一般認為出現在導入樣式表中的聲明在前,主樣式表中的所有聲明在後。

 


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

-Advertisement-
Play Games
更多相關文章
  • 數據共用和數據傳遞是相輔相成的,我們一起來討論這個問題。首先要說的是共用和傳遞都是有作用域的。作用域就是起作用的區域,在同一個作用域數據可以共用,超過這個作用域就是跨作用域,就得用到數據傳遞了。 作用域 ui作用域每一個ui文件預設都有對應的ui.js。他們作為一個閉合的作用域。ui.js里根據ui ...
  • 學習要點: 1.HTML5 文檔結構 2.文檔結構解析 3.元素標簽探討 主講教師:李炎恢 本章主要先從 HTML5 的文檔結構談起。 這些基礎元素確定了 HTML 文檔的輪廓以及瀏覽器的初始環境。幾乎所有頁面都必須首先鍵入這些元素。 一.HTML5 文檔結構 1.第一步:打開 Sublime Te ...
  • 我們來個例子,一個HTML里包含一段文本和一個無序的列表。 上面例子里,我們使用getElementById DOM方法來訪問p段落,在SCRIPT里添加如下代碼: 變數introParagraph現在已經引用到該DOM節點上了,我們可以對該節點做很多事情,比如查詢內容和屬性,或者其它任何操作,甚至 ...
  • DOM
    DOM對象**1.屬性** docment.title 返回當前文檔的標題docment.URL 返迴文檔完整的URLdocument.bgColor 背景色document.fgColor 前景色 **2.方法** 2.1 document.getElementById(“elementID”); ...
  • 學習要點: 1.HTML5 的歷史 2.HTML5 的功能 3.HTML5 的特點 4.課程學習問題 主講教師:李炎恢 HTML5 是繼 HTML4.01 和 XHTML1.0 之後的超文本標記語言的最新版本。 它是由一群自由思想者組成的團隊設計出來,並最終實現多媒體支持、交互性、更加智能的表單,以 ...
  • 在bootstrap框架中將導航獨立出來成為一個導航組件,根據不同的版本,可以找到相應的源碼: LESS: navs.less SASS: _navs.scss 標簽形導航,也稱選項卡導航 標簽形導航是通過.nav-tabs樣式來實現的,在製作標簽形導航時需要在原導航類名為.nav的容器上追加類名. ...
  • 一、寫在最前面 最近都忙一些雜七雜八的事情,複習軟考、研讀經典...好像都好久沒寫過博客了。。。 我自己寫過三個圖片輪播,一個是簡單的原生JS實現的,沒有什麼動畫效果的,一個是結合JQuery實現的,淡入淡出切換的。現在想做一個酷一點的放在博客或者個人網站,到時候可以展示自己的作品。逛了一下慕課網, ...
  • 按鈕下拉菜單 按鈕下拉菜單僅從外觀上看和下拉菜單效果基本上是一樣的。它們唯一的不同是外部容器div.dropdown換成了div.btn-group bootstrap.css文件 按鈕的向下向上三角形 按鈕的向下三角形,是通過在button標簽中添加span標簽元素,且類名為.caret 這個三角 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...