CSS 層疊和繼承實(shí)現(xiàn)
發(fā)布時(shí)間:2010-03-14 16:56:14 作者:佚名
我要評(píng)論

我們知道文檔中的一個(gè)元素可能同時(shí)被多個(gè)css選擇器選中,每個(gè)選擇器都有一些css規(guī)則,這就是層疊。所謂繼承,就是父元素的規(guī)則也會(huì)適用于子元素。
1. 層疊
我們知道文檔中的一個(gè)元素可能同時(shí)被多個(gè)css選擇器選中,每個(gè)選擇器都有一些css規(guī)則,這就是層疊。這些規(guī)則有可能不矛盾的,自然這些規(guī)則將會(huì)同時(shí)起效,然而有些規(guī)則是相互沖突的,例如:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS Cascade</title>
<style type="text/css">
h1{color:Red;}
body h1{color:Blue;}
</style>
</head>
<body>
<h1>Hello CSS</h1>
</body>
</html>
為此需要為每條規(guī)則制定特殊性,當(dāng)發(fā)生沖突的時(shí)候必須選出一條最高特殊性的規(guī)則來應(yīng)用。CSS規(guī)則的特殊性可以用4個(gè)整數(shù)來表示,例如0,0,0,0.計(jì)算規(guī)則如下:
對(duì)于規(guī)則中的每個(gè)ID選擇符,特殊性加0,1,0,0
對(duì)于規(guī)則中每個(gè)類選擇符和屬性選擇符以及偽類,特殊性加0,0,1,0
對(duì)于規(guī)則中的每個(gè)元素名或者偽元素,特殊性加0,0,0,1
對(duì)于通配符,特殊性加0,0,0,0.
對(duì)于內(nèi)聯(lián)規(guī)則,特殊性加 1,0,0,0
最終得到結(jié)果就是這個(gè)規(guī)則的特殊性。兩個(gè)特殊性的比較類似字符串大小的比較,是從左往右依次比較,第一個(gè)數(shù)字大的規(guī)則的特殊性高。上例中兩條規(guī)則的特殊性分別是0,0,0,1 和 0,0,0,2,顯然第二條勝出,因此最終字是藍(lán)色的。
注意,通配符的特殊性0,0,0,0看起來沒有作用,實(shí)際上不是,還有一種沒有特殊性的規(guī)則,0,0,0,0要比沒有特殊性更特殊,下面會(huì)介紹。
css還有一個(gè)!important標(biāo)簽,用來改變css規(guī)則的特殊性。實(shí)際上,在解析css規(guī)則特殊性的時(shí)候,是將具有!important的規(guī)則和沒有此標(biāo)簽的規(guī)則利用上述方法分別計(jì)算特殊性,分別選出特殊性最高的規(guī)則。最終合并的時(shí)候,具有任何特殊性的帶有!important標(biāo)記的規(guī)則勝出。
2.繼承
所謂繼承,就是父元素的規(guī)則也會(huì)適用于子元素。比如給body設(shè)置為color:Red;那么他內(nèi)部的元素如果沒有其他的規(guī)則設(shè)置,也都會(huì)變成紅色。繼承得來的規(guī)則沒有特殊性。下面看一個(gè)簡(jiǎn)單的例子:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS Cascade</title>
<style type="text/css">
*{color:Blue;}
div{color:Black;}
.imp{color:Red !important;}
#content{color:Green;}
</style>
</head>
<body>
<div>Hello <span>Css</span> </div>
<div id="content">
<p class="imp">Title</p>
Content Goes Here.
</div>
</body>
</html>
結(jié)果如下:
注意,第一行的Css并沒有繼承div的黑色,這是因?yàn)橥ㄅ浞木壒?。通配符的特殊性雖然是全0,但是還是比繼承的特殊性要高。第二行展示了!important標(biāo)記的作用。
另外,一些明顯不應(yīng)該繼承的屬性,比如border,margin,padding之類的是不會(huì)被繼承的,具體可以參考css手冊(cè)。
3. 其他
雖然有4個(gè)整數(shù)來表示一個(gè)特殊性,仍然有可能出現(xiàn)兩條沖突的規(guī)則的特殊性完全一致的情況,此時(shí)就按照css規(guī)則出現(xiàn)的順序來確定,在樣式表中最后一個(gè)出現(xiàn)的規(guī)則勝出。一般不會(huì)出現(xiàn)這樣的情況,只有一個(gè)情況例外,考慮如下樣式表:
:active{color:Red;}
:hover{color:Blue;}
:visited{color:Purple;}
:link{color:Green;}
這樣頁面中的鏈接永遠(yuǎn)也不會(huì)顯示紅色和藍(lán)色,因?yàn)橐粋€(gè)鏈接要么被訪問過,要么沒有被訪問過。而這兩條規(guī)則在最后,因此總會(huì)勝出。如果改成這樣:
:link{color:Green;}
:visited{color:Purple;}
:hover{color:Blue;}
:active{color:Red;}就能實(shí)現(xiàn)鼠標(biāo)懸停和點(diǎn)擊的瞬間變色的效果。這樣的順序的首字母正好連成 “LoVe HA”,這樣的順序被約定俗成的叫做Love Ha 規(guī)則。特殊性規(guī)則從理論上講比較抽象和難懂,但在實(shí)踐中,只要樣式表是設(shè)計(jì)良好的,并不會(huì)有太多這方面的困擾,因此本文也不再做深究。
我們知道文檔中的一個(gè)元素可能同時(shí)被多個(gè)css選擇器選中,每個(gè)選擇器都有一些css規(guī)則,這就是層疊。這些規(guī)則有可能不矛盾的,自然這些規(guī)則將會(huì)同時(shí)起效,然而有些規(guī)則是相互沖突的,例如:
復(fù)制代碼
代碼如下:<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS Cascade</title>
<style type="text/css">
h1{color:Red;}
body h1{color:Blue;}
</style>
</head>
<body>
<h1>Hello CSS</h1>
</body>
</html>
為此需要為每條規(guī)則制定特殊性,當(dāng)發(fā)生沖突的時(shí)候必須選出一條最高特殊性的規(guī)則來應(yīng)用。CSS規(guī)則的特殊性可以用4個(gè)整數(shù)來表示,例如0,0,0,0.計(jì)算規(guī)則如下:
對(duì)于規(guī)則中的每個(gè)ID選擇符,特殊性加0,1,0,0
對(duì)于規(guī)則中每個(gè)類選擇符和屬性選擇符以及偽類,特殊性加0,0,1,0
對(duì)于規(guī)則中的每個(gè)元素名或者偽元素,特殊性加0,0,0,1
對(duì)于通配符,特殊性加0,0,0,0.
對(duì)于內(nèi)聯(lián)規(guī)則,特殊性加 1,0,0,0
最終得到結(jié)果就是這個(gè)規(guī)則的特殊性。兩個(gè)特殊性的比較類似字符串大小的比較,是從左往右依次比較,第一個(gè)數(shù)字大的規(guī)則的特殊性高。上例中兩條規(guī)則的特殊性分別是0,0,0,1 和 0,0,0,2,顯然第二條勝出,因此最終字是藍(lán)色的。
注意,通配符的特殊性0,0,0,0看起來沒有作用,實(shí)際上不是,還有一種沒有特殊性的規(guī)則,0,0,0,0要比沒有特殊性更特殊,下面會(huì)介紹。
css還有一個(gè)!important標(biāo)簽,用來改變css規(guī)則的特殊性。實(shí)際上,在解析css規(guī)則特殊性的時(shí)候,是將具有!important的規(guī)則和沒有此標(biāo)簽的規(guī)則利用上述方法分別計(jì)算特殊性,分別選出特殊性最高的規(guī)則。最終合并的時(shí)候,具有任何特殊性的帶有!important標(biāo)記的規(guī)則勝出。
2.繼承
所謂繼承,就是父元素的規(guī)則也會(huì)適用于子元素。比如給body設(shè)置為color:Red;那么他內(nèi)部的元素如果沒有其他的規(guī)則設(shè)置,也都會(huì)變成紅色。繼承得來的規(guī)則沒有特殊性。下面看一個(gè)簡(jiǎn)單的例子:
復(fù)制代碼
代碼如下:<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS Cascade</title>
<style type="text/css">
*{color:Blue;}
div{color:Black;}
.imp{color:Red !important;}
#content{color:Green;}
</style>
</head>
<body>
<div>Hello <span>Css</span> </div>
<div id="content">
<p class="imp">Title</p>
Content Goes Here.
</div>
</body>
</html>
結(jié)果如下:

注意,第一行的Css并沒有繼承div的黑色,這是因?yàn)橥ㄅ浞木壒?。通配符的特殊性雖然是全0,但是還是比繼承的特殊性要高。第二行展示了!important標(biāo)記的作用。
另外,一些明顯不應(yīng)該繼承的屬性,比如border,margin,padding之類的是不會(huì)被繼承的,具體可以參考css手冊(cè)。
3. 其他
雖然有4個(gè)整數(shù)來表示一個(gè)特殊性,仍然有可能出現(xiàn)兩條沖突的規(guī)則的特殊性完全一致的情況,此時(shí)就按照css規(guī)則出現(xiàn)的順序來確定,在樣式表中最后一個(gè)出現(xiàn)的規(guī)則勝出。一般不會(huì)出現(xiàn)這樣的情況,只有一個(gè)情況例外,考慮如下樣式表:
:active{color:Red;}
:hover{color:Blue;}
:visited{color:Purple;}
:link{color:Green;}
這樣頁面中的鏈接永遠(yuǎn)也不會(huì)顯示紅色和藍(lán)色,因?yàn)橐粋€(gè)鏈接要么被訪問過,要么沒有被訪問過。而這兩條規(guī)則在最后,因此總會(huì)勝出。如果改成這樣:
:link{color:Green;}
:visited{color:Purple;}
:hover{color:Blue;}
:active{color:Red;}就能實(shí)現(xiàn)鼠標(biāo)懸停和點(diǎn)擊的瞬間變色的效果。這樣的順序的首字母正好連成 “LoVe HA”,這樣的順序被約定俗成的叫做Love Ha 規(guī)則。特殊性規(guī)則從理論上講比較抽象和難懂,但在實(shí)踐中,只要樣式表是設(shè)計(jì)良好的,并不會(huì)有太多這方面的困擾,因此本文也不再做深究。
相關(guān)文章
- 你對(duì)CSS層疊和繼承的概念和用法你是否熟悉,這里和大家分享一下,文檔中的一個(gè)元素可能同時(shí)被多個(gè)CSS選擇器選中,每個(gè)選擇器都有一些CSS規(guī)則,這就是層疊,而所謂繼承,就2011-01-27
- 下面小編就為大家?guī)硪黄狢SS默認(rèn)可繼承樣式詳解。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-06
- 這篇文章主要介紹了CSS中的繼承,是CSS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-07-16
CSS教程:學(xué)習(xí)CSS的繼承性-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
所謂CSS的繼承是指被包在內(nèi)部的標(biāo)簽將擁有外部標(biāo)簽的樣式性質(zhì)。繼承特性最典型的應(yīng)用通常發(fā)揮在整個(gè)網(wǎng)頁的樣式預(yù)設(shè),需要指定為其它樣式的部份設(shè)定在個(gè)別元素里即可。這項(xiàng)2008-10-17CSS樣式表中繼承關(guān)系的空格與不空格-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
這可能是一個(gè)非常簡(jiǎn)單的問題,但是今天花一點(diǎn)點(diǎn)時(shí)間把這個(gè)簡(jiǎn)單的問題在說清晰一點(diǎn),相信大家對(duì)CSS的學(xué)習(xí)和認(rèn)識(shí)會(huì)很有幫助,強(qiáng)化一些概念的東西,對(duì)以后的工作效率的2008-10-17CSS教程:水平對(duì)齊(text-align)-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
水平對(duì)齊(text-align),用以設(shè)定元素內(nèi)文本的水平對(duì)齊方式。 1.語法 text-align具體參數(shù)如下: 語法:text-align:left|right|center|justify 說明:2008-10-17CSS教程:line-height屬性的繼承-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
原文:http://www.planabc.net/2008/07/25/unitless-line-heights/ 淘寶商城的detail 頁面“產(chǎn)品詳情”部分是商家自定義區(qū)塊,曾出現(xiàn)這樣一個(gè)問題: &2008-10-17CSS教程:行高line-height屬性(2)-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
相關(guān)文章:CSS教程:行高line-height屬性(1) 7.3.3行高的計(jì)算與繼承 以em、ex和百分比為單位的行高,其基數(shù)是元素本身的字體尺寸。例如有代碼如下: <pstyle=&quo2008-10-17CSS教程:理解繼承屬性及應(yīng)用-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
4.5繼承 在本書的[3.3.2繼承與層疊]一節(jié)曾經(jīng)簡(jiǎn)要介紹過繼承:(X)HTML元素可以從其父元素那里繼承部分CSS屬性,即使當(dāng)前元素并沒有定義該屬性。 4.5.1值的繼承 繼承也是2008-10-17- 下面小編就為大家?guī)硪黄钊肜斫釩SS定位與層疊。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-15