css優化——低權重原則

css設置的樣式是可以重疊的,如果兩個不同的的選擇符對同一個標籤的定義產生衝突,就會設計到css選擇符的權重問題了。

當不同的選擇符樣式設置有衝突時,會採用權重高的選擇符設置樣式。

權重的規則如下:HTML標籤的權重是1,class的權重是10,id的權重是100,例如p的權重是1,“div em”的權重是1+1=2,“strong.demo”的權重是1+10=11,“#text.red”的權重是100+10=110.

如果兩個的權重相同,那麼就會遵循就近原則,哪個選擇符最後定義,就採用哪個選擇符的樣式。

<style type=”text/css”>
span{font-size:40px}
.text{color:red;}
.text2{color:green;}
</style>
<span class=”text text2″>123123123</span>

上述代碼中的123123123會以綠色顯示,注意這裏強調的“就近原則”是基於選擇符定義的先後順序,而不是掛class的先後順序。掛class的順序沒有區別。

css選擇符的權重問題容易被忽視,會帶來想不到的小麻煩。例如:

<p id=”test”>css is <span>important<span></p>

方案一:利用子選擇器;

#test  span{color:red;}

可以實現important紅色,而且不用修改html。

方案二:新建class;

<p id=”test”>css is <span class=”font”>important</span></p>

.font{color:red;}

方案二由於新增了class,很多人不推薦這麼做,這麼考慮是有道理的,但是如果需求有變化,需要加入新的文字。

<p id=”test”>css is <span>important</span>,<span class=”font2″>you must take care of  it<span>.</p>

並且要求新增字體爲綠色。那麼按照方案一的思路我們很容易這樣去寫css:

#test span{color:red;}

.font2{color:green;}

這樣本應是綠色的文字會變成綠色嗎?不會,因爲#test span選擇符的權重爲100+1=101,高於.font2的權重10,所以後設定的綠色不能覆蓋前面的紅色。

我們要修改css:

#test span{color:red;}

#test .font2{color:green;}

這樣便能實現我們的設計。如果使用方案二呢?我們需要添加一個新的class:

.font{color:red;}

.font2{color:green;}

<p id=”test”>css is <span class=”font”>important</span>,<span class=”font2″>you must take care of  it<span>.</p>

由於方案二沒有使用子選擇器,所以我們添加新的class就可以很好的完成設計。使用子選擇器,會增加css選擇符的權重,css權重越高,就越難以被覆蓋,所以除非html結構非常穩定,不會再修改,所以儘量不要使用子選擇器。

爲了保證樣式容易被覆蓋,提高可維護性,css選擇符需保證權重儘可能低。

避免使用子選擇器,而添加class與組合的思路差不多,有興趣的朋友可以查看高質量css一文。

發佈了14 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章