要解決的問題:當兩條樣式規則衝突時,瀏覽器會如何決定採用哪一條渲染頁面?
每個合法的文件都會生成乙個文件樹(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.使用相同的選擇器,後面的會把前...