解析CSS編寫(xiě)中的屬性優(yōu)先級(jí)問(wèn)題

當(dāng)你將一個(gè)樣式添加到元素上卻發(fā)現(xiàn)不起作用時(shí),那就是遇到優(yōu)先級(jí)問(wèn)題了。那么應(yīng)該如何處理 CSS 優(yōu)先級(jí)問(wèn)題呢,下面我總結(jié)了一些解決 CSS 優(yōu)先級(jí)問(wèn)題的常用法則。
樣式距離
我們可以通過(guò)使用外部樣式、內(nèi)部樣式、內(nèi)聯(lián)樣式等方法給元素添加指定的樣式,此時(shí)的優(yōu)先級(jí)是:
外部樣式 < 內(nèi)部樣式 < 內(nèi)聯(lián)樣式
這個(gè)應(yīng)該比較容易理解,也就是說(shuō)離元素距離越近的樣式優(yōu)先級(jí)越大。如:
- <style type="text/css">
- div{color:blue;} //內(nèi)部樣式
- </style>
- <link rel="stylesheet" type="text/css" href="mystyle.css"/> //外部樣式(color:green)
- <div style="color:red">my color</div>//內(nèi)聯(lián)樣式
此時(shí)顯示的優(yōu)先級(jí)是 red > blue > green。所以 my color 顯示為紅色。
特殊的計(jì)算方法
假設(shè)有下面這段代碼:
- <style type="text/css">
- div p.classSelector {color: blue}
- #idselector p {color: red}
- </style>
- <div id="idSelector">
- <p class="classSelector">my color</p>
- </div>
我們面對(duì)下面的 css,如何判斷優(yōu)先級(jí)呢?
- <style type="text/css">
- div p.classSelector {color: blue}
- #idselector p {color: red}
- </style>
這里介紹一種特殊的計(jì)算方法:
元素, 偽元素: 1 – (0,0,0,1)
類, 偽類, 屬性: 1 – (0,0,1,0)
ID: 1 – (0,1,0,0)
內(nèi)聯(lián)樣式: 1 – (1,0,0,0)
這里的屬性指的是:
效果如下:
優(yōu)先級(jí)從上往下依次增加,至于如何計(jì)算,同樣舉例說(shuō)明:
p: 1個(gè)元素– (0,0,0,1)
div: 1個(gè)元素 – (0,0,0,1)
#idSelector: 1個(gè)ID – (0,1,0,0)
div#idSelector: 1個(gè)元素, 1個(gè)ID – (0,1,0,1)
div#idSelector p: 2個(gè)元素, 1個(gè)ID– (0,1,0,2)
div#idSelector p.classSelector: 2個(gè)元素, 1個(gè)類, 1個(gè)ID – (0,1,1,2)
所以現(xiàn)在我們?cè)賮?lái)看上面的例子:
- div p.classSelector {color: blue} - (0,0,0,1) + (0,0,0,1) + (0,0,1,0) = (0,0,1,2)
- #idselector p {color: red} - (0,1,0,0) + (0,0,0,1) = (0,1,0,1)
由于優(yōu)先級(jí)上 (0,1,0,1) > (0,0,1,2),所以我們知道最后顯示的顏色為紅色。
繼承
繼承是個(gè)比較好理解的概念,即子元素會(huì)繼承父元素的樣式。例如:
- <div style="color:red">
- <p>my color</p>
- </div>
上例中的 span 會(huì)繼承父元素 div 的樣式。但不是所有的屬性都會(huì)默認(rèn)使用繼承的方式,比如 margin 和 padding 屬性。例如:
- <div style="margin:10px;padding:10px">
- <p>my color</p>
- </div>
此時(shí),元素 p 并不會(huì)繼承父元素 div 的 margin 和 padding 樣式,除非你這么做:
- <div style="margin:10px;padding:10px">
- <p style="margin:inherit;padding:inherit">my color</p>
- </div>
總結(jié)
1.首先找到所有作用在元素上的樣式。(不要忽略來(lái)自繼承的樣式)
2.計(jì)算樣式的作用距離,距離越近,優(yōu)先級(jí)越大。
3.使用特殊的計(jì)算方法來(lái)判斷同距離內(nèi)的樣式。
4.如果計(jì)算后的結(jié)果相同,那么后聲明的樣式覆蓋先前聲明的樣式。
5.如果某個(gè)樣式中設(shè)置 !important,則無(wú)論它的優(yōu)先級(jí)如何,都以該樣式為準(zhǔn)。(除非迫不得已,強(qiáng)烈不建議使用這個(gè)方法,因?yàn)檫@無(wú)疑是不符合 css 思想的用法)
相關(guān)文章
- CSS在使用選擇器對(duì)元素施加屬性的時(shí)候會(huì)有先后順序,包括特殊性和重要性等概念在內(nèi),這里我們就來(lái)詳解CSS中的選擇器優(yōu)先級(jí)順序,需要的朋友可以參考下2016-06-21
詳解CSS中的選擇器優(yōu)先級(jí)及樣式層疊問(wèn)題解決
CSS中的選擇器是分權(quán)重的,如果不加注意則很有可能會(huì)遇到樣式層疊的問(wèn)題,下面我們就來(lái)詳解CSS中的選擇器優(yōu)先級(jí)及樣式層疊問(wèn)題解決,需要的朋友可以參考下2016-06-14CSS z-index 層級(jí)關(guān)系優(yōu)先級(jí)的概念
這篇文章主要介紹CSS z-index 層級(jí)關(guān)系優(yōu)先級(jí)的概念,講解的比較詳細(xì),需要的朋友可以參考下。2016-06-06CSS中的各種選擇器與樣式優(yōu)先級(jí)小結(jié)
這里為大家送上CSS中的各種選擇器與樣式優(yōu)先級(jí)小結(jié),基本上常用的都被整理在其中,歡迎隨看隨記^^2016-05-24- 這篇文章主要介紹了四種CSS常用的選擇器使用方法和注意事項(xiàng),為大家介紹了CSS選擇器的優(yōu)先級(jí),感興趣的小伙伴們可以參考一下2016-05-03
- 下面小編就為大家?guī)?lái)一篇css優(yōu)先級(jí)計(jì)算方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-19