優(yōu)先級(jí)就近原則,同權(quán)情況下樣式定義為最近者為準(zhǔn)
成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、全網(wǎng)營(yíng)銷(xiāo)推廣、小程序開(kāi)發(fā)、微信公眾號(hào)開(kāi)發(fā)、成都網(wǎng)站推廣服務(wù),提供專(zhuān)業(yè)營(yíng)銷(xiāo)思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開(kāi)發(fā)來(lái)完成項(xiàng)目落地,為石牌坊企業(yè)提供源源不斷的流量和訂單咨詢(xún)。
載入樣式以最后載入的定位為準(zhǔn)(后寫(xiě)的樣式優(yōu)先級(jí)高,前提是大家的權(quán)重一樣)
1、!important權(quán)值最高。
2、內(nèi)聯(lián)樣式表的權(quán)值為 1000。
3、ID 選擇器的權(quán)值為 100。
4、Class 類(lèi)選擇器的權(quán)值為 10。
5、HTML 標(biāo)簽(類(lèi)型)選擇器的權(quán)值為 1。
繼承得到的樣式的優(yōu)先級(jí)是最低的;最近的祖先樣式比其他祖先樣式優(yōu)先級(jí)高;"直接樣式"比"祖先樣式"優(yōu)先級(jí)高。
1、無(wú)繼承性的屬性
①? display:規(guī)定元素應(yīng)該生成的框的類(lèi)型
②? 文本屬性:
vertical-align:垂直文本對(duì)齊
text-decoration:規(guī)定添加到文本的裝飾
text-shadow:文本陰影效果
white-space:空白符的處理
unicode-bidi:設(shè)置文本的方向
③? 盒子模型的屬性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、 border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
④? 背景屬性:background、background-color、background-image、background-repeat、background-position、background-attachment
⑤? 定位屬性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
⑥? 生成內(nèi)容屬性:content、counter-reset、counter-increment
⑦? 輪廓樣式屬性:outline-style、outline-width、outline-color、outline
⑧? 頁(yè)面樣式屬性:size、page-break-before、page-break-after
⑨? 聲音樣式屬性:pause-before、pause-after、pause、cue-before、cue-after、cue、play-during
2、有繼承性的屬性
①? 字體系列屬性
font:組合字體
font-family:規(guī)定元素的字體系列
font-weight:設(shè)置字體的粗細(xì)
font-size:設(shè)置字體的尺寸
font-style:定義字體的風(fēng)格
font-variant:設(shè)置小型大寫(xiě)字母的字體顯示文本,這意味著所有的小寫(xiě)字母均會(huì)被轉(zhuǎn)換為大寫(xiě),但是所有使用小型大寫(xiě) 字體的字母與其余文本相比,其字體尺寸更小。
font-stretch:對(duì)當(dāng)前的 font-family 進(jìn)行伸縮變形。所有主流瀏覽器都不支持。
font-size-adjust:為某個(gè)元素規(guī)定一個(gè) aspect 值,這樣就可以保持首選字體的 x-height。
②?文本系列屬性
text-indent:文本縮進(jìn)
text-align:文本水平對(duì)齊
line-height:行高
word-spacing:增加或減少單詞間的空白(即字間隔)
letter-spacing:增加或減少字符間的空白(字符間距)
text-transform:控制文本大小寫(xiě)
direction:規(guī)定文本的書(shū)寫(xiě)方向
color:文本顏色 a元素除外
③? 元素可見(jiàn)性:visibility
④? 表格布局屬性:caption-side、border-collapse、border-spacing、empty-cells、table-layout
⑤? 列表布局屬性:list-style-type、list-style-image、list-style-position、list-style
⑥? 生成內(nèi)容屬性:quotes
⑦? 光標(biāo)屬性:cursor
⑧? 頁(yè)面樣式屬性:page、page-break-inside、windows、orphans
⑨? 聲音樣式屬性:speak、speak-punctuation、speak-numeral、speak-header、speech-rate、volume、voice-family、 pitch、pitch-range、stress、richness、、azimuth、elevation
3、所有元素可以繼承的屬性
①? 元素可見(jiàn)性:visibility
②? 光標(biāo)屬性:cursor
4、內(nèi)聯(lián)元素可以繼承的屬性
①? 字體系列屬性
②? ?除text-indent、text-align之外的文本系列屬性
5、塊級(jí)元素可以繼承的屬性
?text-indent、text-align
CSS 7 種基礎(chǔ)的選擇器:
ID 選擇器, 如 #id{}
類(lèi)選擇器, 如 .class{}
屬性選擇器, 如 a[href="segmentfault.com"]{}
偽類(lèi)選擇器, 如 :hover{}
偽元素選擇器, 如 ::before{}
標(biāo)簽選擇器, 如 span{}
通配選擇器, 如 *{}
優(yōu)先級(jí)關(guān)系 :內(nèi)聯(lián)樣式 ID 選擇器 類(lèi)選擇器 = 屬性選擇器 = 偽類(lèi)選擇器 標(biāo)簽選擇器 = 偽元素選擇器
屬性后插有?!important?的屬性擁有最高優(yōu)先級(jí)
:is()和:not():其偽類(lèi)在計(jì)算選擇器數(shù)量時(shí)當(dāng)做普通選擇器進(jìn)行計(jì)數(shù)。
關(guān)于CSS選擇器,首先請(qǐng)看這里: CSS 選擇器參考手冊(cè)
通過(guò)以上,我們可以將CSS選擇器分為以下幾種:
script async src="http://jsfiddle.net/hysunny/3gwbeu3v/embed/html,css,result/"/script
示例:
說(shuō)明:以下E表示元素,attr表示屬性,val表示屬性的值。
說(shuō)明:以下E表示元素
示例:
示例:
示例:
示例:
E:not(s) ,匹配不符合當(dāng)前選擇器的任何元素
示例:
E:target ,匹配文檔中特定"id"點(diǎn)擊后的效果
示例:
這里我們簡(jiǎn)單討論下后代元素選擇器和子元素選擇器的區(qū)別
示例
CSS優(yōu)先級(jí)是指CSS樣式在瀏覽器中被解析的 先后順序 。
多重樣式(Mutiple Styles):如果外部樣式、內(nèi)部樣式和內(nèi)聯(lián)樣式同時(shí)應(yīng)用于同一個(gè)元素,就是多重樣式的使用情況。
一般情況下,( 外部 樣式)External style sheet ( 內(nèi)部 樣式)Internal style sheet ( 內(nèi)聯(lián) 樣式)Inline style
例外 :如果外部樣式放在內(nèi)部樣式的后面,則外部樣式將會(huì)覆蓋內(nèi)部樣式。
示例:
給不同的選擇器分配不同的權(quán)值
解釋?zhuān)?/p>
示例
結(jié)果:標(biāo)簽內(nèi)的數(shù)據(jù)顯示為藍(lán)色。
比較樣式的優(yōu)先級(jí)是,只需統(tǒng)計(jì)不同選擇器的個(gè)數(shù),然后與對(duì)應(yīng)的權(quán)值相乘即可。根據(jù)結(jié)果便可得出優(yōu)先級(jí)。
看到這里,有些同學(xué)是不是對(duì)!important有點(diǎn)迷惑呀 為什么有了它,就優(yōu)先級(jí)最高吶 下面我們?cè)賮?lái)詳細(xì)講一講!important~
!important 是CSS1就定義的語(yǔ)法,作用是提高指定樣式的應(yīng)用優(yōu)先權(quán)。
語(yǔ)法格式: {cssRule !important} ,即寫(xiě)在定義的最后面,例如: box { color: red !important}
聲明了 !important 的樣式,具有最高的優(yōu)先級(jí),相當(dāng)于寫(xiě)在最下面(最后定義)
IE 6.0 不完全 支持!important
IE支持重定義中的!important,例如:
你將會(huì)發(fā)現(xiàn)定義了樣式 class="yuanxin" 時(shí),在IE下,字體顯示為紅色(#e00)。
但不支持同一定義中的 !important 。例如:
此時(shí)在IE6下不支持,你將會(huì)發(fā)現(xiàn)定義了樣式 class="yuanxin" 時(shí),字體顯示為黑色(#000)。
解釋 :
important的樣式屬性和覆蓋它的樣式屬性單獨(dú)使用時(shí)(不在一個(gè){}里),IE 6.0認(rèn)為!important優(yōu)先級(jí)較高,否則當(dāng)含!important的樣式屬性被同一個(gè){}里的樣式覆蓋時(shí),IE 6.0認(rèn)為!important較低!
再舉一個(gè)例子:
因?yàn)镮E 6.0一直都不完全支持這個(gè)語(yǔ)法,而其他的瀏覽器都支持。因此我們就可以利用這一點(diǎn)來(lái)分別利用!important,我們可以針對(duì)IE和非IE瀏覽器設(shè)置不同的樣式,只要在非IE瀏覽器樣式的后面加上!important。
完。
總結(jié)內(nèi)容參考以下:
w3school_CSS 選擇器參考手冊(cè)
阮一峰_CSS選擇器筆記
css選擇器優(yōu)先級(jí)深入理解
CSS 的優(yōu)先級(jí)機(jī)制[總結(jié)]
十分感謝你們的分享 n(*≧▽≦*)n
注:原文章首發(fā)于: CSS選擇器、優(yōu)先級(jí)以及!important知識(shí)總結(jié) ,現(xiàn)遷移至此。
script async src="http://jsfiddle.net/hysunny/3gwbeu3v/embed/html,css,result/"/script
當(dāng)在一個(gè)樣式聲明中使用一個(gè) !important 規(guī)則時(shí),此聲明將覆蓋任何其他聲明。雖然,從技術(shù)上講, !important 與優(yōu)先級(jí)無(wú)關(guān),但它與最終的結(jié)果直接相關(guān)。使用 !important 是一個(gè) 壞習(xí)慣 ,應(yīng)該盡量避免,因?yàn)檫@破壞了樣式表中的固有的級(jí)聯(lián)規(guī)則 使得調(diào)試找bug變得更加困難了。當(dāng)兩條相互沖突的帶有 !important 規(guī)則的聲明被應(yīng)用到相同的元素上時(shí),擁有更大優(yōu)先級(jí)的聲明將會(huì)被采用。
一些經(jīng)驗(yàn)法則:
什么的情況下可以使用 !important:
A) 覆蓋內(nèi)聯(lián)樣式
你的網(wǎng)站上有一個(gè)設(shè)定了全站樣式的 CSS 文件,同時(shí)你(或是你同事)寫(xiě)了一些很差的內(nèi)聯(lián)樣式。
全局的CSS文件會(huì)在全局范圍內(nèi)設(shè)置網(wǎng)站的外觀,而直接在各個(gè)元素上定義的內(nèi)聯(lián)樣式可能會(huì)覆蓋您的全局CSS文件。 內(nèi)聯(lián)樣式和!important都被認(rèn)為是非常不好的做法,但是有時(shí)你可以在CSS文件里用!important去覆蓋內(nèi)聯(lián)樣式。
在這種情況下,你就可以在你全局的 CSS 文件中寫(xiě)一些 !important 的樣式來(lái)覆蓋掉那些直接寫(xiě)在元素上的行內(nèi)樣式。
當(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 屬性被傳到其子標(biāo)簽上??聪旅娴?HTML 結(jié)構(gòu):
div
p/p/div
如果?div?有個(gè)屬性?color: red,則這個(gè)屬性將被?p?繼承,即?p?也擁有屬性?color: red。
由上可見(jiàn),當(dāng)網(wǎng)頁(yè)比較復(fù)雜, HTML 結(jié)構(gòu)嵌套較深時(shí),一個(gè)標(biāo)簽的樣式將深受其祖先標(biāo)簽樣式的影響。影響的規(guī)則是:
CSS 優(yōu)先規(guī)則1:?最近的祖先樣式比其他祖先樣式優(yōu)先級(jí)高。
例1:
!-- 類(lèi)名為 son 的 div 的 color 為 blue --div style="color: red"
div style="color: blue"
div class="son"/div
/div/div
如果我們把一個(gè)標(biāo)簽從祖先那里繼承來(lái)的而自身沒(méi)有的屬性叫做"祖先樣式",那么"直接樣式"就是一個(gè)標(biāo)簽直接擁有的屬性。又有如下規(guī)則:
CSS 優(yōu)先規(guī)則2:"直接樣式"比"祖先樣式"優(yōu)先級(jí)高。
例2:
!-- 類(lèi)名為 son 的 div 的 color 為 blue --div style="color: red"
div class="son" style="color: blue"/div/div
選擇器的優(yōu)先級(jí)
上面討論了一個(gè)標(biāo)簽從祖先繼承來(lái)的屬性,現(xiàn)在討論標(biāo)簽自有的屬性。在討論 CSS 優(yōu)先級(jí)之前,先說(shuō)說(shuō) CSS 7 種基礎(chǔ)的選擇器:
ID 選擇器, 如 #id{}
類(lèi)選擇器, 如 .class{}
屬性選擇器, 如 a[href="segmentfault.com"]{}
偽類(lèi)選擇器, 如 :hover{}
偽元素選擇器, 如 ::before{}
標(biāo)簽選擇器, 如 span{}
通配選擇器, 如 *{}
CSS 優(yōu)先規(guī)則3:優(yōu)先級(jí)關(guān)系:內(nèi)聯(lián)樣式 ID 選擇器 類(lèi)選擇器 = 屬性選擇器 = 偽類(lèi)選擇器 標(biāo)簽選擇器 = 偽元素選擇器
例3:
// HTMLdiv class="content-class" id="content-id" style="color: black"/div// CSS#content-id {
color: red;}.content-class {
color: blue;}div {
color: grey;}
最終的 color 為 black,因?yàn)閮?nèi)聯(lián)樣式比其他選擇器的優(yōu)先級(jí)高。
所有 CSS 的選擇符由上述 7 種基礎(chǔ)的選擇器或者組合而成,組合的方式有 3 種:
后代選擇符: .father .child{}
子選擇符: .father .child{}
相鄰選擇符: .bro1 + .bro2{}
當(dāng)一個(gè)標(biāo)簽同時(shí)被多個(gè)選擇符選中,我們便需要確定這些選擇符的優(yōu)先級(jí)。我們有如下規(guī)則:
CSS 優(yōu)先規(guī)則4:計(jì)算選擇符中 ID 選擇器的個(gè)數(shù)(a),計(jì)算選擇符中類(lèi)選擇器、屬性選擇器以及偽類(lèi)選擇器的個(gè)數(shù)之和(b),計(jì)算選擇符中標(biāo)簽選擇器和偽元素選擇器的個(gè)數(shù)之和(c)。按 a、b、c 的順序依次比較大小,大的則優(yōu)先級(jí)高,相等則比較下一個(gè)。若最后兩個(gè)的選擇符中 a、b、c 都相等,則按照"就近原則"來(lái)判斷。
例4:
// HTMLdiv id="con-id"
span class="con-span"/span/div// CSS#con-id span {
color: red;}div .con-span {
color: blue;}
由規(guī)則 4 可見(jiàn),span 的 color 為 red。
如果外部樣式表和內(nèi)部樣式表中的樣式發(fā)生沖突會(huì)出現(xiàn)什么情況呢?這與樣式表在 HTML 文件中所處的位置有關(guān)。樣式被應(yīng)用的位置越在下面則優(yōu)先級(jí)越高,其實(shí)這仍然可以用規(guī)則 4 來(lái)解釋。
例5:
// HTMLlink rel="stylesheet" type="text/css" href="style-link.css"style type="text/css"@import url(style-import.css); div {
background: blue;}/stylediv/div// style-link.cssdiv {
background: lime;}// style-import.cssdiv {
background: grey;}
從順序上看,內(nèi)部樣式在最下面,被最晚引用,所以 div 的背景色為 blue。
上面代碼中,@import?語(yǔ)句必須出現(xiàn)在內(nèi)部樣式之前,否則文件引入無(wú)效。當(dāng)然不推薦使用?@import?的方式引用外部樣式文件,原因見(jiàn)另一篇博客:CSS 引入方式。
CSS 還提供了一種可以完全忽略以上規(guī)則的方法,當(dāng)你一定、必須確保某一個(gè)特定的屬性要顯示時(shí),可以使用這個(gè)技術(shù)。
CSS 優(yōu)先規(guī)則5:屬性后插有?!important?的屬性擁有最高優(yōu)先級(jí)。若同時(shí)插有?!important,則再利用規(guī)則 3、4 判斷優(yōu)先級(jí)。
例6:
// HTMLdiv class="father"
p class="son"/p/div// CSSp {
background: red !important;}.father .son {
background: blue;}
雖然 .father .son 擁有更高的權(quán)值,但選擇器 p 中的 background 屬性被插入了 !important, 所以 p 的 background 為 red。
錯(cuò)誤的說(shuō)法
在學(xué)習(xí)過(guò)程中,你可能發(fā)現(xiàn)給選擇器加權(quán)值的說(shuō)法,即 ID 選擇器權(quán)值為 100,類(lèi)選擇器權(quán)值為 10,標(biāo)簽選擇器權(quán)值為 1,當(dāng)一個(gè)選擇器由多個(gè) ID 選擇器、類(lèi)選擇器或標(biāo)簽選擇器組成時(shí),則將所有權(quán)值相加,然后再比較權(quán)值。這種說(shuō)法其實(shí)是有問(wèn)題的。比如一個(gè)由 11 個(gè)類(lèi)選擇器組成的選擇器和一個(gè)由 1 個(gè) ID 選擇器組成的選擇器指向同一個(gè)標(biāo)簽,按理說(shuō) 110 100,應(yīng)該應(yīng)用前者的樣式,然而事實(shí)是應(yīng)用后者的樣式。錯(cuò)誤的原因是:權(quán)重的進(jìn)制是并不是十進(jìn)制,CSS 權(quán)重進(jìn)制在 IE6 為 256,后來(lái)擴(kuò)大到了 65536,現(xiàn)代瀏覽器則采用更大的數(shù)量。。還是拿剛剛的例子說(shuō)明。11 個(gè)類(lèi)選擇器組成的選擇器的總權(quán)值為 110,但因?yàn)?11 個(gè)均為類(lèi)選擇器,所以其實(shí)總權(quán)值最多不能超過(guò) 100, 你可以理解為 99.99,所以最終應(yīng)用后者樣式。