CSS規則淺析
首先,要知道CSS規則,我們要先了解CSS的定義。
CSS(英文全稱:CascadingStyle Sheets)意思爲樣式層疊表。是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等文件樣式的計算機語言。CSS不僅可以靜態地修飾網頁,還可以配合各種腳本語言動態地對網頁各元素進行格式化。
一般規則是:
1)樣式有繼承性,子元素可以繼承父元素的樣式
能繼承的樣式有文本相關、列表相關、顏色color等;不能繼承的樣式:border,margin,padding,background-color等。
2)CSS規則大小寫不敏感,不過存在一個例外:如果涉及到與 HTML 文檔一起工作的話,則要注意class 和 id 名稱的大小寫,有些瀏覽器對此是敏感的。
3)*可以消除瀏覽器的默認值,比如:*{margin:0;padding:0;}
如果是大型網站,則推薦這樣html,body,div,span,applet,object,iframe,h1,h2,p,a{margin:0;padding:0;}
而不是*{margin:0;padding:0;}
因爲 css 通配符 “*”會將網站內所有元素的默認值重設,這在大型網站會加重客戶端的負擔,瀏覽器運行速度變慢。但如果開發的是小型站點或企業網站,頁面元素不是很多,使用CSS 通配符造成的性能影響可以忽略。
4)如果樣式規則出現錯誤,通常這個錯誤以下規則都被忽略。
由上我們知道CSS意爲樣式層疊表,就如字面上的意思,CSS就是把樣式進行層疊。所謂層疊:有多種方式可設置樣式,如果同時用多種方式設置了樣式,則多重樣式將層疊爲一個。
瀏覽器進行層疊的步驟是:
1) 收集所有樣式
2) 找元素匹配的樣式
3) 規則排序
4) 處理衝突
樣式層疊並不是隨便進行層疊的,它們層疊是有一些規則的,在瞭解規則前,我們先了解下樣式的分類,樣式分爲三種:內聯樣式,內部樣式,外部樣式。
而這三種樣式的優先級爲內聯樣式>外(內)部樣式,而內部樣式和外部樣式屬於同一級別的。
如果我們要判斷某個p元素中的文本顏色是什麼,即樣式color是什麼?
1) 首先,看該元素是否有內聯樣式color,如果有則就是它了,否則繼續下面步驟
2) 看該元素是否有內部樣式color和外部樣式color,否則繼續下面步驟
3) 看該元素是否有看繼承情況,否則繼續下面步驟
4) 都沒有,使用瀏覽器默認值
在上面的2)中如果多個選擇器選擇了該元素呢?如:<p class=”c1 c2 c3”>…</p>,假如多個選擇器中都定義了color屬性,也就是有了衝突,哪個規則起作用?哪個規則更“特定”則起作用。
如果一樣“特定”呢?則看位置順序,寫的位置在最後的起作用。---所謂更“特定”可以理解爲選擇器選擇的元素範圍更小,也可用選擇器的權值來比較:id選擇器100、class選擇器10、元素選擇器1,內聯樣式不是選擇器,但權值最高,可以認爲是1000。例如:
p { color: red;}//權值爲1
.c1 {color: green;} //權值爲10
p.c1 {color: blue;} //權值爲11
p.c2{color: yellow;} //權值爲11
p.c3{color: #ccc;} //權值爲11
總的而言,樣式層疊優先次序如下:
!important > 內聯樣式 > 外部樣式(內部樣式) > 繼承 > 讀者設置(瀏覽器用戶) > 默認值(瀏覽器)。
注:
1)在外部樣式(內部樣式)中按選擇器的權值來確定(id > class > 元素)
2)如果權值相等,則它們的優先級取決於它們的先後順序,誰放在後方,誰就優先。
3)特別地,加了!important;的優先級最高。如:p{color:red!important;},實際上就是強制提升優先級。