CSS優(yōu)先級的兩種理解方式
方式一:值相加
我們先去MDN看看官方的解釋:
優(yōu)先級是如何計算的?
優(yōu)先級就是分配給指定的 CSS 聲明的一個權(quán)重,它由 匹配的選擇器中的 每一種選擇器類型的 數(shù)值 決定。
而當(dāng)優(yōu)先級與多個 CSS 聲明中任意一個聲明的優(yōu)先級相等的時候,CSS 中最后的那個聲明將會被應(yīng)用到元素上。
當(dāng)同一個元素有多個聲明的時候,優(yōu)先級才會有意義。因為每一個直接作用于元素的 CSS 規(guī)則總是會接管/覆蓋(take
over)該元素從祖先元素繼承而來的規(guī)則。
我們從上面一段描述中得到個很重要的信息: 權(quán)重
我們再來看選擇器優(yōu)先級關(guān)系:ID選擇器 > 類選擇器 = 屬性選擇器 = 偽類選擇器 > 標(biāo)簽選擇器 = 偽元素選擇器。
看來真相已經(jīng)呼之欲出了。
我們只要給不同類型的選擇器設(shè)定一個權(quán)重值,然后在根據(jù)選擇器的數(shù)量進行相加,就很容易得出優(yōu)先級,例如:
ID選擇器的權(quán)重值設(shè)為 1000
類選擇器 、屬性選擇器 、偽類選擇器的權(quán)重值設(shè)為 100
標(biāo)簽選擇器、偽元素選擇器的權(quán)重值設(shè)為 10
我們可以很快速的計算出下面這段CSS的權(quán)重值并作出正確的判斷。
//權(quán)重值1110
#app .menu .item{}
//權(quán)重值210
.menu.menu .item{}
//權(quán)重值30
.item.item.item{}
可是。。。細心的你可能會發(fā)現(xiàn)只要低優(yōu)先級的選擇器數(shù)量足夠多(例如: .item...x200 {} ),那么低優(yōu)先級的權(quán)重值就可以超過高優(yōu)先級的權(quán)重值,但實際效果其實還是以高優(yōu)先級樣式為準(zhǔn)。當(dāng)出現(xiàn)這種情況時可能用現(xiàn)在的權(quán)重值計算方式就無法解釋了!
當(dāng)然可以通過限制選擇器的最大數(shù)量及拉大選擇器的權(quán)重值數(shù)值還是可以解釋的,但我總覺得這不是一種好的實現(xiàn)方式。
方式二:bit位存儲
我們假設(shè)權(quán)重值是用 unsigned int 變量存儲,那么該變量的 bit 位一共有32位(4字節(jié)),我們從高位按字節(jié)展開如下:
字節(jié)1:00000000
字節(jié)2:00000000
字節(jié)3:00000000
字節(jié)4:00000000
按字節(jié)和選擇器對應(yīng):
字節(jié)1:00000000
字節(jié)2:00000000 ;ID選擇器
字節(jié)3:00000000 ;類選擇器 、屬性選擇器 、偽類選擇器
字節(jié)4:00000000 ;標(biāo)簽選擇器、偽元素選擇器
相同類型選擇器直接進行個數(shù)相加,并填入到指定字節(jié)內(nèi)。
例1:
#app .menu .item{}
得到的權(quán)重值 bit 位如下:
結(jié)果為:65793
例2:
.menu.menu .item{}
得到的權(quán)重值 bit 位如下:
結(jié)果為:513
例3:
.item.item.item{}
得到的權(quán)重值 bit 位如下:
結(jié)果為:3
上面示例中位存儲容量只有8位,所以選擇器的最大限制為255,當(dāng)然我們可以提高bit位來提高選擇器的最大值。
總結(jié)
這里介紹了2種CSS優(yōu)先級理解方式,你覺得那種更適合你呢?
感興趣的朋友可以給小編留言,說出你的想法。
相關(guān)文章
- 這篇文章主要介紹了CSS優(yōu)先級計算的規(guī)則,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-17
- 下面小編就為大家?guī)硪黄猚ss優(yōu)先級計算方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-19
- CSS在使用選擇器對元素施加屬性的時候會有先后順序,包括特殊性和重要性等概念在內(nèi),這里我們就來詳解CSS中的選擇器優(yōu)先級順序,需要的朋友可以參考下2016-06-21
- CSS中的選擇器是分權(quán)重的,如果不加注意則很有可能會遇到樣式層疊的問題,下面我們就來詳解CSS中的選擇器優(yōu)先級及樣式層疊問題解決,需要的朋友可以參考下2016-06-14
CSS z-index 層級關(guān)系優(yōu)先級的概念
這篇文章主要介紹CSS z-index 層級關(guān)系優(yōu)先級的概念,講解的比較詳細,需要的朋友可以參考下。2016-06-06

