CSS學習筆記(三) 繼承 結構和層疊

2021-07-10 12:41:06 字數 1928 閱讀 4729

要解決的問題:當兩條樣式規則衝突時,瀏覽器會如何決定採用哪一條渲染頁面?

每個合法的文件都會生成乙個文件樹(js裡面的dom?),從而根據各個元素的祖先、兄弟關係來選擇元素,應用樣式規則。

1 特殊性(或稱具體性、權值)

同乙個元素有多條規則時,通過給每條宣告中不同元素賦予不同的值,計算這條宣告的值,取值比較大的宣告將被應用。

具體計算規則:值分為4個部分:0,0,0,0

給定了id屬性值的,加0,1,0,0

給定了類、屬性選擇或偽類的,加0,0,1,0

各個元素或偽元素,加0,0,0,1

結合符和萬用字元不計算

舉例如下:

h1

/*特殊性值為 0,0,0,1*/pem

/*特殊性值為 0,0,0,2*/

.banner

/*特殊性值為 0,0,1,0*/

div#sidebar

/*特殊性值為 0,1,0,1*/

p.bright

em.dark

/*特殊性值為 0,0,2,2*/

明顯,當有規則

h1

.grape

/*特殊性值為 0,0,1,1*/

h1/*特殊性值為 0,0,0,1*/

時,第一條規則將被應用

內聯樣式特殊性

所有的內聯樣式特殊性均為1,0,0,0 就是說,內聯樣式有最高的優先權。(css2.1 新增)

重要性

有時有某個特別重要的樣式規則,需要忽略其他的規則時,css2.1允許在其宣告的結束符(分號)之前加上!important來進行標識,如

p

.em

2 繼承

基於css的繼承機制,樣式不僅會應用到指定元素,還會應用到它的後代元素。

例如,將

h1

應用到

時,不僅h1元素會變綠色,em元素也會繼承性的變成綠色。

繼承對列表也有效(無論是ol或者ul

定義的框模型無法繼承,繼承也無法向上進行,除了body,對body所設定的背景樣式也會傳遞到html

關於0特殊性

繼承的值沒有特殊性,通配選擇器為0特殊性,0特殊性強於無特殊性

如對

id="aaa">what do you see!em>

h1>

welcomep>

應用樣式

h1

#aaa

*

因為通賠選擇器的0繼承性大於繼承的值,所以最終em會顯示為紅色而不是綠色,如圖

3 層疊

對特殊性衝突的宣告,css會按照層疊的方式選擇應用他們,具體規則為:

!important標誌的宣告優先於沒有!important標誌的宣告。

計算特殊性,特殊性大的宣告優先在前。

按宣告的出現順序排序,乙個宣告在html文件或css樣式表中越靠後,則越優先。若有匯入樣式表,匯入樣式表優先在前,主樣式表在後。

CSS 層疊和繼承

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

css的繼承和層疊

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

css特性 繼承和層疊

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