CSS中的樣式層疊機制Cascade

2021-08-13 11:02:08 字數 1871 閱讀 3415

文章位址

樣式衝突是css渲染過程要解決的乙個關鍵問題,樣式衝突主要由兩個原因造成:

元素包含了不同物件所賦予的樣式:瀏覽器、使用者、作者。其中,瀏覽器樣式是指不對元素賦予樣式時,元素所表現出來的樣式,也就是瀏覽器賦予的元素預設樣式;使用者樣式是指使用者通過瀏覽器外掛程式設定的樣式,比如色弱者會對文字顏色進行修改;作者樣式只是程式設計師所編寫的css樣式。

程式設計師經常會在css中對同一元素進行重複定義,這往往是因為程式設計師整體區域性的樣式編寫習慣造成的,當然這是好的習慣。

css設計了cascade機制通過確定樣式層疊的順序來解決樣式衝突的問題,其過程就是對所有衝突樣式按照其對應的優先順序進行排序,然後確定優先順序最高樣式為最終渲染樣式。我將該排序過程歸納為三個級聯的排序階段。

step1.對所有衝突樣式,按照設定其的物件優先順序順序進行排序;物件優先順序順序如下:

1.讀者樣式+!important

2.作者樣式+!important

3.預設樣式+!important

4.作者樣式

5.讀者樣式

6.預設樣式

step2.對step1中優先順序相等的作者樣式(作者樣式+!important優先順序、作者樣式優先順序)再分別按照樣式specificity值從大到小進行二次排序;

step3.對優先順序相等的樣式最後按照申明時間從早到晚進行排序。

specificity可以看成是乙個∞進製的4位數。作者樣式的specificity值由定義其的選擇器決定,下表展示了各種選擇器所定義的樣式、html中的樣式、繼承樣式的specificity值對照表。組合選擇器(e fe>fe+fe~f)的specificity值等於所有單選擇器specificity值的累加和。比如div.aside p的權specificity值=(0,0,0,1)+(0,0,1,0)+(0,0,0,1)=(0,0,1,2);11個元素選擇器的specificity值(0,0,0,11)比乙個類選擇的specificity值(0,0,1,0)小。

selector

type example

specificity

通用選擇器

*0,0,0,0

元素選擇器

div0,0,0,1

偽元素選擇器

::first-line

0,0,0,1

類選擇器

.warning

0,0,1,0

偽類選擇器]

:hover

0,0,1,0

屬性選擇器

[type=」checkbox」]

0,0,1,0

id選擇器

content

0,1,0,0

html中的樣式

style=」color: red;」

1,0,0,0

繼承樣式

——0,0,0,0

其中,繼承樣式(inheritance)是指從上級元素繼承來的樣式。css規定,dom樹中的下層元素會繼承它上級父元素的部分樣式。css定義了每個樣式屬性的可繼承性,比如:padding, border, margin, background是不可繼承的,具體可查閱書籍《css pocket reference》。

更詳細的css選擇器介紹請見延伸閱讀[1],偽類與偽元素的區別分析請見延伸閱讀[2]。

延伸閱讀:

[1] css選擇器備忘錄

[2] 偽類與偽元素的區別

css層疊樣式

css 四大核心 一 選擇器 二 盒子模型 實現網頁布局 三 浮動四 四 定位 了解css 概念 層疊樣式表 級聯樣式表 cascading style s heet 作用 美化網頁 通過css的方式給html標籤設定樣式 css語法 選擇器 類選擇器 語法 1.定義型別.自定義型別名 2.呼叫型別...

css層疊樣式

層疊樣式表 層疊 相同的樣式的不同值作用到同一元素的時候,會有樣式被覆蓋.樣式生效會有先後重要的順序.根據樣式優先順序,如果優先順序一樣,後寫會覆蓋先寫的.樣式表 元素視覺表現的集合.例如我們看到的寬高背景顏色等等 樣式是依附html而存在的,如果沒有標籤,樣式將毫無意義.最小影響法則 當我們建立乙...

css層疊樣式

用來調節標籤的樣式 注釋 標籤選擇器 元素選擇器 divid選擇器 d1類選擇器 c1樣式類名不要用數字開頭 通用選擇器 後代選擇器 標籤 空格 標籤 div span樣式只改變後代標籤,並不改變父類本身 兒子選擇器 只影響兒子,其他後代不影響 div span毗鄰選擇器,只影響div 後邊同一級別...