網(wǎng)頁(yè)css優(yōu)先級(jí)為您詳細(xì)解讀

在講CSS優(yōu)先級(jí)之前,我們得要了解什么是CSS,CSS是用來(lái)做什么的。
首先,我們對(duì)CSS作一個(gè)簡(jiǎn)單的說(shuō)明:CSS是層疊樣式表(Cascading Style Sheets)的簡(jiǎn)稱。它的規(guī)范代表了互聯(lián)網(wǎng)歷史上一個(gè)獨(dú)特的發(fā)展階段?,F(xiàn)在對(duì)于從事網(wǎng)頁(yè)制作的朋友來(lái)說(shuō),應(yīng)該很少?zèng)]有聽(tīng)說(shuō)過(guò)CSS了,因?yàn)樵谥谱骶W(wǎng)頁(yè)過(guò) 程中我們經(jīng)常需要用到。
其次:我們能通過(guò)CSS為文檔設(shè)置豐富且易于修改的外觀,以減輕網(wǎng)頁(yè)制作者的工作負(fù)擔(dān),從而減輕制作及后期維護(hù)的代價(jià)。
其實(shí)現(xiàn)在還來(lái)講CSS是什么,CSS有什么作用完全是多余的,相信從事網(wǎng)頁(yè)制作的朋友都已經(jīng)或多或少的接觸過(guò)了。
言歸正傳,我們開(kāi)始進(jìn)入今天的話題:
一、什么是CSS優(yōu)先級(jí)?
所謂CSS優(yōu)先級(jí),即是指CSS樣式在瀏覽器中被解析的先后順序。
二、CSS優(yōu)先級(jí)規(guī)則
既然樣式有優(yōu)先級(jí),那么就會(huì)有一個(gè)規(guī)則來(lái)約定這個(gè)優(yōu)先級(jí),而這個(gè)“規(guī)則”就是本次所需要講的重點(diǎn)。
樣式表中的特殊性描述了不同規(guī)則的相對(duì)權(quán)重,它的基本規(guī)則是:
- 統(tǒng)計(jì)選擇符中的ID屬性個(gè)數(shù)。
- 統(tǒng)計(jì)選擇符中的CLASS屬性個(gè)數(shù)。
- 統(tǒng)計(jì)選擇符中的HTML標(biāo)記名個(gè)數(shù)。
最后,按正確的順序?qū)懗鋈齻€(gè)數(shù)字,不要加空格或逗號(hào),得到一個(gè)三位數(shù)(css2.1是用4位數(shù)表示)。( 注意,你需要把數(shù)字轉(zhuǎn)換成一個(gè)以三個(gè)數(shù)字結(jié)尾的更大的數(shù))。相應(yīng)于選擇符的最終數(shù)字列表可以很容易確定較高數(shù)字特性凌駕于較低數(shù)字的。
例如:
- 每個(gè)ID選擇符(#someid),加 0,1,0,0。
- 每個(gè)class選擇符(.someclass)、每個(gè)屬性選擇符(形如[attr=value]等)、每個(gè)偽類(形如:hover等)加0,0,1,0。
- 每個(gè)元素或偽元素(:firstchild)等,加0,0,0,1。
- 其它選擇符包括全局選擇符*,加0,0,0,0。相當(dāng)于沒(méi)加,不過(guò)這也是一種specificity,后面會(huì)解釋。
三、特性分類的選擇符列表
以下是一個(gè)按特性分類的選擇符的列表:
選擇符 | 特性值 |
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 |
單從上面這個(gè)表來(lái)看,貌似不大好理解,下面再給出一張表:
選擇符 | 特性值 |
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 |
通過(guò)上面,就可以很簡(jiǎn)單的看出,HTML標(biāo)記的權(quán)重是1,CLASS的權(quán)重是10,ID的權(quán)重是100,繼承的權(quán)重為0(后面會(huì)講到)。
按這些規(guī)則將數(shù)字符串逐位相加,就得到最終的權(quán)重,然后在比較取舍時(shí)按照從左到右的順序逐位比較。
優(yōu)先級(jí)問(wèn)題其實(shí)就是一個(gè)沖突解決的問(wèn)題,當(dāng)同一個(gè)元素(內(nèi)容)被CSS選擇符選中時(shí),就要按照優(yōu)先級(jí)取舍不同的CSS規(guī)則,這其中涉及到的問(wèn)題其實(shí)很多。
說(shuō)到這里,我們不得不說(shuō)一下CSS的繼承性。
網(wǎng)頁(yè)中加載多個(gè)css樣式文件,其中一個(gè)是Ext庫(kù)自帶的樣式文件,里面對(duì)所有標(biāo)簽定義了一些樣式,導(dǎo)致原有網(wǎng)頁(yè)顯示不正確。通過(guò)找到對(duì)應(yīng)樣式,重新設(shè)置了正確的樣式。將新樣式加到body標(biāo)簽上,但是出現(xiàn)兩個(gè)樣式,Ext樣式仍然有效。最后發(fā)現(xiàn)時(shí)在設(shè)置新樣式的時(shí)候沒(méi)有加*,導(dǎo)致只對(duì)body標(biāo)簽有用,而對(duì)子標(biāo)簽無(wú)效。下面為修改后的樣式
.diy,
.diy *{
box-sizing: content-box;
-moz-box-sizing : content-box;
-webkit-box-sizing: content-box;
}
當(dāng)一個(gè)標(biāo)簽被定義多個(gè)樣式,而樣式之間出現(xiàn)沖突時(shí),優(yōu)先級(jí)為“針對(duì)ID定義的樣式” > “類定義樣式” > “針對(duì)標(biāo)簽類型定義的樣式”。例如下面幾個(gè)樣式
div{
border:2px solid #0000FF;
}
.powerHeader{
border:2px solid #00ff00;
}
#navigation{
border:2px solid #ff0000;
}
在標(biāo)簽<div id="navigation" class="powerHeader">,首先應(yīng)用的是#navigation,當(dāng)#navigation不存在時(shí)應(yīng)用.powerHeader樣式,最后才是div樣式。
同時(shí),單使用link或style定義多個(gè)標(biāo)簽類class之間出現(xiàn)沖突時(shí),會(huì)應(yīng)用定義在最后的那個(gè)類。
了解css樣式優(yōu)先級(jí),能夠在網(wǎng)頁(yè)開(kāi)發(fā)中避免許多樣式?jīng)_突問(wèn)題。
相關(guān)文章
- 作為一個(gè)Web開(kāi)發(fā)者,掌握必要的前臺(tái)技術(shù)也是很重要的特別是CSS選擇器的優(yōu)先級(jí)問(wèn)題,為了廣大web愛(ài)好者可以更好的解決問(wèn)題,這里就CSS選擇器的優(yōu)先級(jí)問(wèn)題做了一些總結(jié)2013-08-01
CSS控制樣式的三種方式(優(yōu)先級(jí)對(duì)比驗(yàn)證)
大家都知道,CSS的中文名叫做層疊樣式表,而CSS在控制樣式的時(shí)候,有三種引入方式,這里簡(jiǎn)單介紹下CSS控制樣式的三種方式2013-07-22CSS優(yōu)先級(jí)的相關(guān)知識(shí)詳細(xì)介紹
所謂CSS優(yōu)先級(jí),即是指CSS樣式在瀏覽器中被解析的先后順序,既然樣式有優(yōu)先級(jí),那么就會(huì)有一個(gè)規(guī)則來(lái)約定這個(gè)優(yōu)先級(jí),而這個(gè)“規(guī)則”就是本次所需要講的重點(diǎn)2013-04-22- css樣式優(yōu)先級(jí)是按照樣式表中出現(xiàn)順序還是按照元素中class或者id值的聲明順序呢,這個(gè)問(wèn)題貌似一直存在我們身邊卻一直無(wú)從選擇,接下來(lái)用實(shí)例為大家說(shuō)明下,到底哪個(gè)高點(diǎn),2013-03-14
CSS層疊樣式表之CSS解析機(jī)制的優(yōu)先級(jí)及樣式覆蓋問(wèn)題探討
多重樣式(Multiple Styles): 如果外部樣式、內(nèi)部樣式和內(nèi)聯(lián)樣式同時(shí)應(yīng)用于同一個(gè)元素,就是使多重樣式的情況.有個(gè)例外的情況,就是如果外部樣式放在內(nèi)部樣式的后面,則2013-02-01CSS優(yōu)先級(jí)和!important與IE6的BUG討論及解決方案
本來(lái)我對(duì)他誰(shuí)的ie6不支持!important也沒(méi)什么異議,可是正好在前幾天正好用個(gè)這個(gè)!important屬性解決了一個(gè)樣式優(yōu)先級(jí)的問(wèn)題,而且是支持ie6的,這是為什么呢?到底ie6支不2013-01-23IE6下CSS多類選擇符優(yōu)先級(jí)不起作用的bug分析及解決方法
IE6,這個(gè)前端開(kāi)發(fā)的夢(mèng)魘總是在你不經(jīng)意的時(shí)候給你捅一刀,在ie6環(huán)境下CSS多類選擇符優(yōu)先級(jí)不起作用,多么的令人氣憤啊,經(jīng)過(guò)測(cè)試:IE6下這種類組合的優(yōu)先級(jí)不如單個(gè)類, 感2013-01-23- css樣式的優(yōu)先級(jí)是一個(gè)龐雜的知識(shí)點(diǎn),我甚至覺(jué)得它的龐雜可以與“浮動(dòng)”以及“框模型”相提并論,今天就利用點(diǎn)時(shí)間把我所了解的寫下來(lái),大家共同進(jìn)步2013-01-11
- css基礎(chǔ)選擇器有標(biāo)簽選擇器、類選擇器、id選擇器、通用選擇器,本文將深入介紹css選擇器優(yōu)先級(jí),這會(huì)給正在解決優(yōu)先級(jí)問(wèn)題的朋友,帶來(lái)些許幫助2012-12-04
- CSS的調(diào)用方式一共有4種,分別是:行內(nèi)樣式,內(nèi)嵌式,link鏈接式,@import導(dǎo)入式,在同級(jí)的前提下,我們可以按樣就近原則來(lái)理解他們的優(yōu)先級(jí),則越前定義的樣式,會(huì)被后面2010-07-23