繼承(inheritance)是從乙個元素向其後代元素傳遞屬性值所採用的機制。確定應當向乙個元素應用那些值時,使用者**(瀏覽器)不僅要考慮繼承,還要考慮宣告的特殊性(specificity),另外需要考慮宣告本身的**。這個過程就稱為層疊(cascade)。在此我們將討論css這三種機制的原理和關聯。
考慮以下2對規則,假設每一對規則都匹配同樣的元素:
h1 body h1
h2.grape h2每一對規則中只有乙個能勝出,因為所匹配的顏色只能是一種顏色,那麼怎樣知道哪乙個規則會更強呢?答案就在於每個選擇器的特殊性。
選擇器的特殊性由選擇器本身的元件確定。特殊性的值表述為4個部分:0,0,0,0。
乙個選擇器的具體特殊性如下確定:
特殊屬性計算值:
h1 /*有時某些宣告可能非常重要超過了其他所有生命。這時就可以在宣告的結束分號之前插入specificity=0,0,0,1
*/p em /*
specificity=0,0,0,2
*/.grade/*
specificity=0,0,1,0
*/*.bright/*
specificity=0,0,1,0
*/div#header [href]/*
specificity=0,1,1,1 包涵乙個屬性選擇器
*/
! important來標誌。
p
上圖中包含兩個列表,乙個無序,乙個有序。將生明 color:gray;應用到body元素時,這個元素會採用該宣告。這個值再沿著樹向下傳播到後代元素,並一直繼續,直到沒有更多得後代元素繼承這個值為至。(元素不會把值向上傳遞到其祖先,但是有乙個例外,應用到body元素的背景樣式可以傳遞到html元素。)
css中可以繼承的屬性概括為——所有關於文字大小樣式的屬性可以繼承( 例如:letter-spacing、word-spacing、white-space、line-height、color、font等)
繼承的值沒有特殊性,甚至連0特殊性都沒有。
如果特特殊性相等的兩個規則同時應用到同乙個元素,瀏覽器會怎樣解決這個衝突呢?如
h1 h1這兩個規則的特殊性都是0,0,0,1,所以他們的權重相等。但是乙個元素不可能即是紅色又是藍色,這時就要應用層疊規則。
1、找出所有相關的規則,這些規則都包含與乙個給定元素匹配的選擇器。
2、按顯示權重對應用到該元素的所有宣告排序。標誌(!important)的規則的權重要高於沒有(!important)標誌的規則。按**對應用到元素的所有生明排序,創作人員》讀者》使用者**。
權重由大到小的順序為:
3、按特殊性對應用到給定元素的所有宣告排序。有較高特殊性的元素權重要大於有較低特殊性的元素。
4、按出現順序對應用到給定元素的所有宣告排序。乙個宣告在樣式表或文件中越後出現,它的權重就越大。如果樣式表中有匯入的樣式表,一般認為出現在匯入樣式表中的宣告在前,主樣式表中的宣告在後。
層疊樣式表中最基本的方面就是層疊——衝突的宣告要通過這個層疊過程排序。
讀者的重要宣告(!important)>創作人員的重要宣告(! important)>內聯樣式(1,0,0,0)>id選擇器(0,1,0,0)>類選擇器、屬性選擇器、偽類選擇器(0,0,1,0)>元素選擇器(0,0,0,1)>
萬用字元選擇器(0,0,0,0)>繼承的屬性》瀏覽器預設樣式。
特例:元素的color、text-decoration屬性,以及標題元素的font-size 屬性,瀏覽器預設的樣式優先順序》繼承屬性的優先順序。
css繼承 層疊 特殊性
1 什麼是繼承?允許樣式不僅應用於某個特定html標籤元素,而且應用於其後代。例如 p 三年級時,我還是乙個膽小如鼠的小女孩。結果為 三年級時,我還是乙個膽小如鼠的小女孩。2 並非所有的css樣式都具有繼承性?例如 border 1px solid red p 三年級時,我還是乙個膽小如鼠的小女孩。...
CSS特殊性 繼承與層疊
一 特殊性規則 選擇器的特殊性由選擇器本身的元件確定 特殊性由四個部分組成,其初始值為0,0,0,0。1.對於選擇器中的每乙個id,加0,1,0,0 2.對於選擇器中的每乙個類 偽類 屬性選擇,加0,0,1,0 3.對於選擇器中的每乙個元素 偽元素,加0,0,0,1 4.結合符與萬用字元對於選擇器的...
CSS的繼承 層疊和特殊性
css的某些樣式是具有繼承性的,那麼什麼是繼承呢?繼承是一種規則,它允許樣式不僅應用於某個特定html標籤元素,而且應用於其後代。比如下面 如某種顏色應用於p標籤,這個顏色設定不僅應用p標籤,還應用於p標籤中的所有子元素文字,這裡子元素為span標籤。p 三年級時,我還是乙個膽小如鼠span 的小女...