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

首頁 > 開發(fā) > CSS > 正文

老調(diào)重彈的CSS優(yōu)先級

2024-07-11 08:46:59
字體:
供稿:網(wǎng)友
首先,我們對CSS作一個簡單的說明:CSS是層疊樣式表(Cascading Style Sheets)的簡稱。它的規(guī)范代表了互聯(lián)網(wǎng)歷史上一個獨特的發(fā)展階段。現(xiàn)在對于從事網(wǎng)頁制作的朋友來說,應(yīng)該很少沒有聽說過CSS了,因為在制作網(wǎng)頁過程中我們經(jīng)常需要用到。

  其次:我們能通過CSS為文檔設(shè)置豐富且易于修改的外觀,以減輕網(wǎng)頁制作者的工作負擔(dān),從而減輕制作及后期維護的代價。

  其實現(xiàn)在還來講CSS是什么,CSS有什么作用完全是多余的,相信從事網(wǎng)頁制作的朋友都已經(jīng)或多或少的接觸過了。

  言歸正傳,我們開始進入今天的話題:

  一、什么是CSS優(yōu)先級?

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

  二、CSS優(yōu)先級規(guī)則

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

  樣式表中的特殊性描述了不同規(guī)則的相對權(quán)重,它的基本規(guī)則是:
  1. 統(tǒng)計選擇符中的ID屬性個數(shù)。
  2. 統(tǒng)計選擇符中的CLASS屬性個數(shù)。
  3. 統(tǒng)計選擇符中的HTML標記名個數(shù)。

  最后,按正確的順序?qū)懗鋈齻€數(shù)字,不要加空格或逗號,得到一個三位數(shù)(css2.1是用4位數(shù)表示)。( 注意,你需要把數(shù)字轉(zhuǎn)換成一個以三個數(shù)字結(jié)尾的更大的數(shù))。相應(yīng)于選擇符的最終數(shù)字列表可以很容易確定較高數(shù)字特性凌駕于較低數(shù)字的。

  例如:
  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,后面會解釋。

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

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

選擇符

特性值

h1 {color:blue;}

1

p em {color:purple;}

2

.apple {color:red;}

10

p.bright {color:yellow;}

11

p.bright em.dark {color:brown;}

22

#id316 {color:yellow}

100


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

選擇符

特性值

h1 {color:blue;} 1
p em {color:purple;} 1+1=2
.apple {color:red;} 10
p.bright {color:yellow;} 1+10=11
p.bright em.dark {color:brown;} 1+10+1+10=22
#id316 {color:yellow} 100

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

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

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

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

  四、CSS的繼承性

  4.1 繼承的表現(xiàn)

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

樣式定義:body {color:#f00;}
舉例代碼:<p>CSS<strong>繼承性</strong>的測試</p>
舉例效果:

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

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

  我們?nèi)砸陨厦娴呐e例代碼為例:在樣式定義中添加一條:strong {color:#000;}。

舉例效果:

  發(fā)現(xiàn)只需要給<strong>加個顏色值就能覆蓋掉它繼承自<body>的樣式顏色。由此可見:任何顯示申明的規(guī)則都可以覆蓋其繼承樣式。

  4.2 繼承的局限性

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

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

樣式定義:div {border:1px solid #000;}
舉例代碼:<div>我是<em>border</em>我是不能被繼承滴</div>
預(yù)期效果:
實際效果:

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

  五、附加說明

  1. 文內(nèi)的樣式優(yōu)先級為1,0,0,0,所以始終高于外部定義。這里文內(nèi)樣式指形如<div style="color:red">blah</div>的樣式,而外部定義指經(jīng)由<link>或<style>卷標定義的規(guī)則。
  2. 有!important聲明的規(guī)則高于一切。
  3. 如果!important聲明沖突,則比較優(yōu)先權(quán)。
  4. 如果優(yōu)先權(quán)一樣,則按照在源碼中出現(xiàn)的順序決定,后來者居上。
  5. 由繼承而得到的樣式?jīng)]有specificity的計算,它低于一切其它規(guī)則(比如全局選擇符*定義的規(guī)則)。
  6. 關(guān)于經(jīng)由@import加載的外部樣式,由于@import必須出現(xiàn)在所有其它規(guī)則定義之前(如不是,則瀏覽器應(yīng)該忽略之),所以按照后來居上原則,一般優(yōu)先權(quán)沖突時是占下風(fēng)的。

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

  優(yōu)先權(quán)問題看起來簡單,但背后還是有非常復(fù)雜的機制,在實際應(yīng)用中需要多多留意。

  六、練習(xí)

  看完上面的文字后,來做幾道非常簡單的題目。(自己答完前,請不要先看各題給出的鏈接地址哦

1. 如何讓使用兩個使用相同樣式名的元素具有不同的效果:css優(yōu)先級測試
固定效果:
固定代碼: <div class="test">傳說中的測試</div>
      <p class="test">傳說中的測試</p>

2. 如何讓<h3>始終為黑色,而<em>在不被<h3>包含的情況為紅色:css優(yōu)先級測試
固定效果:
固定代碼: <h3>討論<em>CSS</em>優(yōu)先級</h3>
      <p>討論<em>CSS</em>優(yōu)先級</p>

3. 如何寫一個外部樣式使得<h3 style="color:#000;"> 覆蓋我</h3>的顏色為紅色:css優(yōu)先級測試

4. 如何讓同時具有.a,.b樣式的元素只表現(xiàn).a的顏色樣式:css優(yōu)先級測試
固定代碼:<p class="a b">傳說中滴測試</p>

  關(guān)于樣式優(yōu)先級,今天就先聊到這。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 彭阳县| 喀什市| 保德县| 新和县| 聊城市| 高阳县| 罗甸县| 天津市| 白城市| 太谷县| 平潭县| 德清县| 乌拉特前旗| 台湾省| 游戏| 礼泉县| 商城县| 内黄县| 黑河市| 酉阳| 忻城县| 永川市| 静乐县| 吴桥县| 青浦区| 舒城县| 龙川县| 腾冲县| 丽江市| 尉氏县| 岳阳市| 余干县| 东宁县| 九寨沟县| 乡宁县| 金川县| 积石山| 家居| 五大连池市| 华宁县| 青川县|