国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 網頁設計 > 正文

CSS優先級的相關知識詳細介紹

2024-08-30 08:35:15
字體:
來源:轉載
供稿:網友

  在講CSS優先級之前,我們得要了解什么是CSS,CSS是用來做什么的。簡單說來,CSS是層疊樣式表(Cascading Style Sheets)的簡稱。它的規范代表了互聯網歷史上一個獨特的發展階段。現在對于從事網頁制作的朋友來說,應該很少沒有聽說過CSS了,因為在制作網頁過程中我們經常需要用到。我們能通過CSS為文檔設置豐富且易于修改的外觀,以減輕網頁制作者的工作負擔,從而減輕制作及后期維護的代價。

  其實現在還來講CSS是什么,CSS有什么作用完全是多余的,相信從事網頁制作的朋友都已經或多或少的接觸過了。言歸正傳,開始進入今天的話題。

  一、什么是CSS優先級?

  所謂CSS優先級,即是指CSS樣式在瀏覽器中被解析的先后順序。

  二、CSS優先級規則

  既然樣式有優先級,那么就會有一個規則來約定這個優先級,而這個“規則”就是本次所需要講的重點。

  樣式表中的特殊性描述了不同規則的相對權重,它的基本規則是:

  1、統計選擇符中的ID屬性個數。

  2、統計選擇符中的CLASS屬性個數。

  3、統計選擇符中的HTML標記名個數。

  最后,按正確的順序寫出三個數字,不要加空格或逗號,得到一個三位數(css2.1是用4位數表示)。( 注意,你需要把數字轉換成一個以三個數字結尾的更大的數)。相應于選擇符的最終數字列表可以很容易確定較高數字特性凌駕于較低數字的。

  例如:

  1、每個ID選擇符(#someid),加 0,1,0,0。

  2、每個class選擇符(.someclass)、每個屬性選擇符(形如[attr=value]等)、每個偽類(形如:hover等)加0,0,1,0。

  3、每個元素或偽元素(:firstchild)等,加0,0,0,1。

  4、其它選擇符包括全局選擇符*,加0,0,0,0。相當于沒加,不過這也是一種specificity,后面會解釋。

  三、特性分類的選擇符列表

  以下是一個按特性分類的選擇符的列表:

  1

  單從上面這個表來看,貌似不大好理解,下面再給出一張表:

  1

  通過上面,就可以很簡單的看出,HTML標記的權重是1,CLASS的權重是10,ID的權重是100,繼承的權重為0(后面會講到)。

  按這些規則將數字符串逐位相加,就得到最終的權重,然后在比較取舍時按照從左到右的順序逐位比較。

  優先級問題其實就是一個沖突解決的問題,當同一個元素(內容)被CSS選擇符選中時,就要按照優先級取舍不同的CSS規則,這其中涉及到的問題其實很多。

  說到這里,我們不得不說一下CSS的繼承性。

  四、CSS的繼承性

  4.1 繼承的表現

  繼承是CSS的一個主要特征,它是依賴于祖先-后代的關系的。繼承是一種機制,它允許樣式不僅可以應用于某個特定的元素,還可以應用于它的后代。例如一個BODY定義了的顏色值也會應用到段落的文本中。

  樣式定義:

  1

  舉例代碼:

  1

  舉例效果:

  

  這段代碼的應用結果是:“CSS繼承性的測試”這段話是紅顏色的,“繼承性”幾個字由于應用了標簽,所以是粗體。很顯然,這段文字都繼承了由body {color:#f00;}樣式定義的顏色。這也就是為什么說繼承性是CSS的一部分。

  然而CSS繼承性的權重是非常低的,是比普通元素的權重還要低的0。

  我們仍以上面的舉例代碼為例:在樣式定義中添加一條:

  1

  舉例效果:

  發現只需要給加個顏色值就能覆蓋掉它繼承自的樣式顏色。由此可見:任何顯示申明的規則都可以覆蓋其繼承樣式。

  4.2 繼承的局限性

  繼承是CSS重要的一部分,我們甚至不用去考慮它為什么能夠這樣,但CSS繼承也是有限制的。

  有一些屬性不能被繼承,如:border, margin, padding, background等。

  樣式定義:

  1

  舉例代碼:

  1

  預期效果:

  

  實際效果:

  

  從上面的效果中,我們可以看出,border是不能被繼承的,還有一些其它的屬性也是如此,這里就不一一列舉。

  五、附加說明

  1、文內的樣式優先級為1,0,0,0,所以始終高于外部定義。這里文內樣式指形如<div style="color:red>blah</div>的樣式,而外部定義指經由<link>或<style>卷標定義的規則。

  2、有!important聲明的規則高于一切。

  3、如果!important聲明沖突,則比較優先權。

  4、如果優先權一樣,則按照在源碼中出現的順序決定,后來者居上。

  5、由繼承而得到的樣式沒有specificity的計算,它低于一切其它規則(比如全局選擇符*定義的規則)。

  6、關于經由@import加載的外部樣式,由于@import必須出現在所有其它規則定義之前(如不是,則瀏覽器應該忽略之),所以按照后來居上原則,一般優先權沖突時是占下風的。

  還需要說一下,IE是可以識別位置錯誤的@import的,但無論@import在什么地方,它都認為是位于所有其它規則定義之前的,這可能會引發一些誤會。

  優先權問題看起來簡單,但背后還是有非常復雜的機制,在實際應用中需要多多留意。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 含山县| 伊金霍洛旗| 江永县| 宝丰县| 平湖市| 利辛县| 车致| 抚州市| 喀喇| 湘乡市| 阿拉尔市| 金乡县| 张掖市| 萍乡市| 克拉玛依市| 岗巴县| 聂拉木县| 拉萨市| 永兴县| 昌图县| 布尔津县| 柯坪县| 凌云县| 锡林郭勒盟| 阜平县| 富民县| 海宁市| 玉树县| 黑山县| 拉萨市| 威远县| 建水县| 武安市| 武隆县| 江孜县| 五指山市| 磴口县| 临夏县| 宣武区| 额济纳旗| 甘孜县|