CSS 層疊和繼承

2022-02-05 06:59:45 字數 2505 閱讀 6732

我們知道文件中的乙個元素可能同時被多個css選擇器選中,每個選擇器都有一些css規則,這就是層疊。這些規則有可能不矛盾的,自然這些規則將會同時起效,然而有些規則是相互衝突的,例如:

<

html

xmlns

="">

<

head

>

<

title

>css cascade

title

>

<

style

type

="text/css">

h1 body h1

style

>

head

>

<

body

>

<

h1>hello css

h1>

body

>

html

>

為此需要為每條規則制定特殊性,當發生衝突的時候必須選出一條最高特殊性的規則來應用。css規則的特殊性可以用4個整數來表示,例如0,0,0,0.計算規則如下:

對於規則中的每個id選擇符,特殊性加0,1,0,0

對於規則中每個類選擇符和屬性選擇符以及偽類,特殊性加0,0,1,0

對於規則中的每個元素名或者偽元素,特殊性加0,0,0,1

對於萬用字元,特殊性加0,0,0,0.

對於內聯規則,特殊性加 1,0,0,0

最終得到結果就是這個規則的特殊性。兩個特殊性的比較類似字串大小的比較,是從左往右依次比較,第乙個數字大的規則的特殊性高。上例中兩條規則的特殊性分別是0,0,0,1 和 0,0,0,2,顯然第二條勝出,因此最終字是藍色的。

注意,萬用字元的特殊性0,0,0,0看起來沒有作用,實際上不是,還有一種沒有特殊性的規則,0,0,0,0要比沒有特殊性更特殊,下面會介紹。

css還有乙個!important標籤,用來改變css規則的特殊性。實際上,在解析css規則特殊性的時候,是將具有!important的規則和沒有此標籤的規則利用上述方法分別計算特殊性,分別選出特殊性最高的規則。最終合併的時候,具有任何特殊性的帶有!important標記的規則勝出。

所謂繼承,就是父元素的規則也會適用於子元素。比如給body設定為color:red;那麼他內部的元素如果沒有其他的規則設定,也都會變成紅色。繼承得來的規則沒有特殊性。下面看乙個簡單的例子:

<

html

xmlns

="">

<

head

>

<

title

>css cascade

title

>

<

style

type

="text/css">

* div

.imp

#content

style

>

head

>

<

body

>

<

div>hello <

span

>css

span

>

div>

<

div

id="content">

<

p class

="imp">title

p>

content goes here.

div>

body

>

html

>

結果如下:

注意,第一行的css並沒有繼承div的黑色,這是因為萬用字元的緣故。萬用字元的特殊性雖然是全0,但是還是比繼承的特殊性要高。第二行展示了!important標記的作用。

另外,一些明顯不應該繼承的屬性,比如border,margin,padding之類的是不會被繼承的,具體可以參考css手冊。

雖然有4個整數來表示乙個特殊性,仍然有可能出現兩條衝突的規則的特殊性完全一致的情況,此時就按照css規則出現的順序來確定,在樣式表中最後乙個出現的規則勝出。一般不會出現這樣的情況,只有乙個情況例外,考慮如下樣式表:

:active

:hover

:visited

:link

這樣頁面中的鏈結永遠也不會顯示紅色和藍色,因為乙個鏈結要麼被訪問過,要麼沒有被訪問過。而這兩條規則在最後,因此總會勝出。如果改成這樣:

:link  

:visited

:hover

:active

就能實現滑鼠懸停和點選的瞬間變色的效果。這樣的順序的首字母正好連成 「love ha」,這樣的順序被約定俗成的叫做love ha 規則。
特殊性規則從理論上講比較抽象和難懂,但在實踐中,只要樣式表是設計良好的,並不會有太多這方面的困擾,因此本文也不再做深究。

css的繼承和層疊

important 行內式 id選擇器 類選擇器 標籤選擇器 權重值 無窮大 1000 100 10 1 同一選擇器,靠後者生效 繼承的權重值為零,所以繼承的樣式可以被任何選擇器修改的屬性對應的屬性值所覆蓋。例 如上所示,案例一和案例二兩個h1標籤繼承了來自父元素的id選擇器所賦予的color屬性值...

css特性 繼承和層疊

1.乙個元素如果沒有設定某屬性的值,就會跟隨父元素的值 2.當然,乙個元素如果有設定某屬性的值,就會使用自己設定的值 3.比如color font size等屬性是可以繼承的 4.可以用inherit強制繼承 5.css繼承的是計算值 css允許多個css屬性層疊 1.使用相同的選擇器,後面的會把前...

CSS 繼承與層疊

css 繼承 即,從父元素那繼承部分css屬性 好處 1.父元素設定樣式,子元素可以繼承部分屬性 2.減少css 注意 當元素本身的樣式與繼承而來的樣式有衝突時,將忽略繼承來的樣式,如下 chrom瀏覽器預設字型大小是16px h1 預設字型大小font size 是2em 正常字型的兩倍 因此,在...