摘要:所以我更傾向于認(rèn)為外部樣式表和內(nèi)部樣式表具有相同的優(yōu)先級(jí),結(jié)論如下瀏覽器缺省設(shè)置外部樣式表內(nèi)部樣式表內(nèi)聯(lián)樣式同一樣式表內(nèi)部的優(yōu)先級(jí)同一樣式表內(nèi),樣式的優(yōu)先級(jí)主要是由選擇器的權(quán)重和權(quán)重的累加決定的。
前幾天做百度的筆試題,第一題就是關(guān)于css優(yōu)先級(jí)的,雖然知道一些規(guī)則,但碰上把各條規(guī)則相互組合就懵逼了,所以還是得來(lái)好好總結(jié)一下的。
首要原則就兩條:
優(yōu)先級(jí)高的樣式覆蓋優(yōu)先級(jí)低的樣式
同一優(yōu)先級(jí)的樣式,后定義的覆蓋先定義的,即后來(lái)居上
而至于樣式的優(yōu)先級(jí)如何確定,就是接下來(lái)要討論的問(wèn)題:
多重樣式間的優(yōu)先級(jí)w3school給出的優(yōu)先級(jí)順序從低到高是:
瀏覽器缺省設(shè)置
標(biāo)簽內(nèi)部)
外部樣式表
內(nèi)部樣式表(位于
內(nèi)聯(lián)樣式(在 HTML 元素內(nèi)部)
但其實(shí)外部樣式表若放在內(nèi)部樣式表后面其實(shí)是會(huì)覆蓋內(nèi)部樣式表的,舉個(gè)例子:
多重樣式優(yōu)先級(jí) ---highter.css #box { height: 200px; } ---wider.css #box { width: 200px; }
最終得到的是一個(gè)寬高都為200px的紅色元素,很明顯,內(nèi)部樣式被放在后面的外部樣式覆蓋了。所以我更傾向于認(rèn)為外部樣式表和內(nèi)部樣式表具有相同的優(yōu)先級(jí),結(jié)論如下:
瀏覽器缺省設(shè)置 < 外部樣式表 = 內(nèi)部樣式表 < 內(nèi)聯(lián)樣式
同一樣式表內(nèi)部的優(yōu)先級(jí)同一樣式表內(nèi),樣式的優(yōu)先級(jí)主要是由選擇器的權(quán)重和權(quán)重的累加決定的。
首先,參考這篇文章可知選擇器的權(quán)重排序?yàn)椋?/p>
1.通用選擇器* 0-0-0
2.標(biāo)簽選擇器,偽元素 0-0-1
3.類(lèi)選擇器,屬性選擇器,偽類(lèi) 0-1-0
4.ID 選擇器 1-0-0
而對(duì)于組合上面幾種情況的選擇器式而言,就需要將所有出現(xiàn)的權(quán)重進(jìn)行相加,取相加后的結(jié)果作為權(quán)重,注意相加時(shí):
不進(jìn)位。因?yàn)槊课粰?quán)重間相差的數(shù)量級(jí)是很大的,在正常使用時(shí)不會(huì)出現(xiàn)低級(jí)選擇器靠數(shù)量的累加提升為高級(jí)權(quán)重(雖然在某些情況下確實(shí)會(huì)發(fā)生,比如256個(gè)class選擇器可以干掉1個(gè)id選擇器。。。)
無(wú)視+,>,~等組合選擇器的符號(hào)
not偽類(lèi)不作為偽類(lèi)計(jì)算權(quán)重,而是直接計(jì)算其參數(shù)的權(quán)重。比如下面的代碼中not偽類(lèi)的權(quán)重要高于類(lèi)選擇器:
not偽類(lèi)的優(yōu)先級(jí)
除了選擇器,樣式自身還可以繼承和提升優(yōu)先級(jí),規(guī)則如下:
從祖先元素繼承來(lái)的樣式優(yōu)先級(jí)低于通用選擇器;甚至低于瀏覽器的缺省設(shè)置,比如最常見(jiàn)的,重置鏈接的默認(rèn)樣式時(shí)必須寫(xiě)在鏈接元素上,放在祖先元素中是沒(méi)有卵用滴
使用大殺器!important可將樣式提升到最高等級(jí),不管這個(gè)樣式在哪個(gè)樣式表或選擇器中;如果在同一樣式中出現(xiàn)了多個(gè)!important,就得看上面的權(quán)重規(guī)則進(jìn)行pk了
是不是看起來(lái)有點(diǎn)暈,附上參考文章里的大魚(yú)吃小魚(yú)的圖來(lái)輔助理解吧:
最終結(jié)論結(jié)合上面的討論,我們可以得出元素的最終樣式是由什么決定的:
多重樣式間遵循:繼承來(lái)的樣式 < 瀏覽器缺省設(shè)置 < 外部樣式表 = 內(nèi)部樣式表 < 內(nèi)聯(lián)樣式
而在同一樣式表中存在:通用選擇器* 0-0-0 < 標(biāo)簽選擇器,偽元素 0-0-1 < 類(lèi)選擇器,屬性選擇器,偽類(lèi) 0-1-0 < ID 選擇器 1-0-0 << !important,其中對(duì)于組合選擇器還要用上面提到的方法進(jìn)行權(quán)重累加后才能判斷
首要原則:高優(yōu)先級(jí)覆蓋低優(yōu)先級(jí),同一優(yōu)先級(jí)則后來(lái)居上
最后,要知道了解樣式的優(yōu)先級(jí),最重要的不是為了用來(lái)酷炫和裝逼,而是能讓我們寫(xiě)出更簡(jiǎn)潔高效的代碼,保證在寫(xiě)代碼時(shí)就知道一定會(huì)出來(lái)什么樣式,而不是等到堆上一堆選擇器后樣式還出不來(lái)時(shí),再一臉懵逼地去排查。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/115202.html
摘要:下面我們從這兩方面去看看樣式的優(yōu)先級(jí)。影響的規(guī)則是優(yōu)先規(guī)則最近的祖先樣式比其他祖先樣式優(yōu)先級(jí)高。若同時(shí)插有,則再利用規(guī)則判斷優(yōu)先級(jí)。 CSS 樣式優(yōu)先級(jí) 當(dāng)創(chuàng)建的樣式表越來(lái)越復(fù)雜時(shí),一個(gè)標(biāo)簽的樣式將會(huì)受到越來(lái)越多的影響,這種影響可能來(lái)自周?chē)臉?biāo)簽,也可能來(lái)自其自身。下面我們從這兩方面去看看 CSS 樣式的優(yōu)先級(jí)。 CSS 的繼承性 CSS 的繼承特性指的是應(yīng)用在一個(gè)標(biāo)簽上的那些 CSS...
摘要:還有一篇是這樣排序的多重樣式間遵循繼承來(lái)的樣式瀏覽器缺省設(shè)置外部樣式表內(nèi)部樣式表內(nèi)聯(lián)樣式結(jié)合樣式繼承問(wèn)題這個(gè)問(wèn)題及其答案來(lái)看,繼承的優(yōu)先級(jí)的確是最低的。 原文:http://www.bkjia.com/Javascri... 樣式選擇器權(quán)重優(yōu)先級(jí): important > 內(nèi)嵌樣式 > ID > 類(lèi) > 標(biāo)簽 | 偽類(lèi) | 屬性選擇 > 偽對(duì)象 > 繼承 > 通配符 importa...
摘要:還有一篇是這樣排序的多重樣式間遵循繼承來(lái)的樣式瀏覽器缺省設(shè)置外部樣式表內(nèi)部樣式表內(nèi)聯(lián)樣式結(jié)合樣式繼承問(wèn)題這個(gè)問(wèn)題及其答案來(lái)看,繼承的優(yōu)先級(jí)的確是最低的。 原文:http://www.bkjia.com/Javascri... 樣式選擇器權(quán)重優(yōu)先級(jí): important > 內(nèi)嵌樣式 > ID > 類(lèi) > 標(biāo)簽 | 偽類(lèi) | 屬性選擇 > 偽對(duì)象 > 繼承 > 通配符 importa...
摘要:我是紅色這種引用代碼的方式在一定程度上解決了所有代碼都分散寫(xiě)在各個(gè)元素上的問(wèn)題,但是不利于代碼的整體重用。需要詳盡選定該元素來(lái)設(shè)置具體的樣式。子元素會(huì)繼承父元素的樣式,等除外。 上一篇簡(jiǎn)單總結(jié)了一下選擇器,如果一個(gè)元素被多個(gè)選擇器選中,元素的樣式就會(huì)以級(jí)聯(lián)方式被應(yīng)用到。要搞清最終那個(gè)樣式被應(yīng)用到元素上了,首先要明白引用CSS代碼的幾種方式。 CSS代碼引用方式 如何應(yīng)用CSS代碼到Ht...
摘要:我是紅色這種引用代碼的方式在一定程度上解決了所有代碼都分散寫(xiě)在各個(gè)元素上的問(wèn)題,但是不利于代碼的整體重用。需要詳盡選定該元素來(lái)設(shè)置具體的樣式。子元素會(huì)繼承父元素的樣式,等除外。 上一篇簡(jiǎn)單總結(jié)了一下選擇器,如果一個(gè)元素被多個(gè)選擇器選中,元素的樣式就會(huì)以級(jí)聯(lián)方式被應(yīng)用到。要搞清最終那個(gè)樣式被應(yīng)用到元素上了,首先要明白引用CSS代碼的幾種方式。 CSS代碼引用方式 如何應(yīng)用CSS代碼到Ht...
閱讀 3647·2021-11-25 09:43
閱讀 2019·2019-08-30 13:56
閱讀 1289·2019-08-30 12:58
閱讀 3492·2019-08-29 13:52
閱讀 817·2019-08-26 12:17
閱讀 1513·2019-08-26 11:32
閱讀 1011·2019-08-23 13:50
閱讀 1358·2019-08-23 11:53