CSS優(yōu)先級和!important與IE6的BUG討論及解決方案
發(fā)布時間:2013-01-23 14:37:39 作者:佚名
我要評論

本來我對他誰的ie6不支持!important也沒什么異議,可是正好在前幾天正好用個這個!important屬性解決了一個樣式優(yōu)先級的問題,而且是支持ie6的,這是為什么呢?到底ie6支不支持!important呢
一、css的優(yōu)先級
今天有人跟我說csshack中用!important來區(qū)分ie6,因?yàn)閕e6不支持!important,是的在很早以前我也是用過這種方法寫hack,但是后來就基本不用了。本來我對他誰的ie6不支持!important也沒什么異議,可是正好在前幾天正好用個這個!important屬性解決了一個樣式優(yōu)先級的問題,而且是支持ie6的,這是為什么呢?到底ie6支不支持!important呢?
首先我們來看看!important這個屬性的作用:!important是用來提升樣式優(yōu)先級的,我們知道樣式是有優(yōu)先級的。
我們先看看css的優(yōu)先級的幾個基本的規(guī)則:
ID選擇器(形如#id{})>類選擇器(形如.class{})>標(biāo)簽選擇器(形如body{}或者*{}),也就是ID選擇器,類選擇器,標(biāo)簽選擇器中,ID選擇器的優(yōu)先級最高,標(biāo)簽選擇器最低;選擇器越具體優(yōu)先級就越高,也就是
.classA.classB.classC{font-size:25px;}
.classB.classC{font-size:18px}
.classC{font-size:12px;}
這里.classA.classB.classC的優(yōu)先級最高,.classC的優(yōu)先級最低;
•在同一個級別的情況下,最后指定的規(guī)則優(yōu)先級就越高,也就是我們通常說的就近原則;
•html中標(biāo)簽的style的屬性都高于css文件中的選擇器樣式;
•標(biāo)有”!important”的規(guī)則有最高優(yōu)先級。
我們可以利用!important使該樣式優(yōu)先級最高,例如:
#idA{font-size:20px}
.classA{font-size:12px;}
HTML代碼:我要20像素的字
#idA{font-size:20px}
.classA{font-size:12px!important;}
HTML代碼:我要12像素的字
這樣.classA{font-size:12px!important;}這個樣式就被引用了。
這種方法在優(yōu)先級低的樣式被優(yōu)先級高的樣式覆蓋,又想引用優(yōu)先級低的樣式時候非常有用!
二、!important在ie6下的一個BUG
還是看這一段代碼,
#idA{font-size:20px}
.classA{font-size:12px!important;}
HTML代碼:我要12像素的字
大家可以在IE6下測試一下,文字是12像素的,也就是.classA{font-size:12px!important;}被引用了,這證明IE6是支持!important的。但是csshack中用!important來區(qū)分ie6,說ie6不支持!important又是怎么回事呢?
原來ie6下,在同一個選擇器樣式(即同一個大括號里面)下!important是無效的,例如:
.classA{font-size:68px!important;font-size:12px}
HTML代碼:我要12像素的字
這里在ie6下是12像素的字,而其他瀏覽器下是68px的字,當(dāng)然我們把樣式改一下,!important放在后面,即
.classA{font-size:12px;font-size:68px!important;}
,那么ie6下和其他瀏覽器一樣也是68px的字。也就是在同一個選擇器樣式(即同一個大括號里面)下!important被ie6徹底的無視了。
==============以下2009年8月1日更新==============
昨天在紫鼠的博客上也看到了關(guān)于!important的文章,說IE8在同一個選擇器樣式(即同一個大括號里面)下對!important的解析也是和IE6一樣的,可是我測試的情況是IE8和IE6是不一樣的,并留了言,今天我們討論了這個問題,確實(shí)他寫的他寫的代碼IE8和IE6對!important的解析是一樣的。經(jīng)過比較發(fā)現(xiàn),他代碼上沒有DTD的聲明,就是html代碼上面的這一句:“”,神啊,在沒有DTD的聲明的情況下,在同一個選擇器樣式(即同一個大括號里面)下,IE6,IE7,IE8對!important的解析都是無效的。還有只要有聲明文檔類型的不管是html4,xhtml1.o,還有html5(“”),除去ie6有上面說的BUG外其他都是正常的。
今天有人跟我說csshack中用!important來區(qū)分ie6,因?yàn)閕e6不支持!important,是的在很早以前我也是用過這種方法寫hack,但是后來就基本不用了。本來我對他誰的ie6不支持!important也沒什么異議,可是正好在前幾天正好用個這個!important屬性解決了一個樣式優(yōu)先級的問題,而且是支持ie6的,這是為什么呢?到底ie6支不支持!important呢?
首先我們來看看!important這個屬性的作用:!important是用來提升樣式優(yōu)先級的,我們知道樣式是有優(yōu)先級的。
我們先看看css的優(yōu)先級的幾個基本的規(guī)則:
ID選擇器(形如#id{})>類選擇器(形如.class{})>標(biāo)簽選擇器(形如body{}或者*{}),也就是ID選擇器,類選擇器,標(biāo)簽選擇器中,ID選擇器的優(yōu)先級最高,標(biāo)簽選擇器最低;選擇器越具體優(yōu)先級就越高,也就是
復(fù)制代碼
代碼如下:.classA.classB.classC{font-size:25px;}
.classB.classC{font-size:18px}
.classC{font-size:12px;}
這里.classA.classB.classC的優(yōu)先級最高,.classC的優(yōu)先級最低;
•在同一個級別的情況下,最后指定的規(guī)則優(yōu)先級就越高,也就是我們通常說的就近原則;
•html中標(biāo)簽的style的屬性都高于css文件中的選擇器樣式;
•標(biāo)有”!important”的規(guī)則有最高優(yōu)先級。
我們可以利用!important使該樣式優(yōu)先級最高,例如:
復(fù)制代碼
代碼如下:#idA{font-size:20px}
.classA{font-size:12px;}
HTML代碼:我要20像素的字
復(fù)制代碼
代碼如下:#idA{font-size:20px}
.classA{font-size:12px!important;}
HTML代碼:我要12像素的字
這樣.classA{font-size:12px!important;}這個樣式就被引用了。
這種方法在優(yōu)先級低的樣式被優(yōu)先級高的樣式覆蓋,又想引用優(yōu)先級低的樣式時候非常有用!
二、!important在ie6下的一個BUG
還是看這一段代碼,
復(fù)制代碼
代碼如下:#idA{font-size:20px}
.classA{font-size:12px!important;}
HTML代碼:我要12像素的字
大家可以在IE6下測試一下,文字是12像素的,也就是.classA{font-size:12px!important;}被引用了,這證明IE6是支持!important的。但是csshack中用!important來區(qū)分ie6,說ie6不支持!important又是怎么回事呢?
原來ie6下,在同一個選擇器樣式(即同一個大括號里面)下!important是無效的,例如:
復(fù)制代碼
代碼如下:.classA{font-size:68px!important;font-size:12px}
HTML代碼:我要12像素的字
這里在ie6下是12像素的字,而其他瀏覽器下是68px的字,當(dāng)然我們把樣式改一下,!important放在后面,即
復(fù)制代碼
代碼如下:.classA{font-size:12px;font-size:68px!important;}
,那么ie6下和其他瀏覽器一樣也是68px的字。也就是在同一個選擇器樣式(即同一個大括號里面)下!important被ie6徹底的無視了。
==============以下2009年8月1日更新==============
昨天在紫鼠的博客上也看到了關(guān)于!important的文章,說IE8在同一個選擇器樣式(即同一個大括號里面)下對!important的解析也是和IE6一樣的,可是我測試的情況是IE8和IE6是不一樣的,并留了言,今天我們討論了這個問題,確實(shí)他寫的他寫的代碼IE8和IE6對!important的解析是一樣的。經(jīng)過比較發(fā)現(xiàn),他代碼上沒有DTD的聲明,就是html代碼上面的這一句:“”,神啊,在沒有DTD的聲明的情況下,在同一個選擇器樣式(即同一個大括號里面)下,IE6,IE7,IE8對!important的解析都是無效的。還有只要有聲明文檔類型的不管是html4,xhtml1.o,還有html5(“”),除去ie6有上面說的BUG外其他都是正常的。
相關(guān)文章
淺談CSS 權(quán)值 層疊 重要性(!important)
下面小編就為大家?guī)硪黄獪\談CSS 權(quán)值 層疊 重要性(!important)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-05css中提升優(yōu)先級屬性!important的用法總結(jié)
!important只有Ie7.0和firefox可以識別,但是Ie6.0不能成功應(yīng)用.!important提升優(yōu)先級,下面對它的用法做下總結(jié)2014-08-08從可維護(hù)性角度考慮css的!important規(guī)則的可用性
使用!important對于性能并沒有什么負(fù)面影響。但是從可維護(hù)性角度考慮還是少用這個規(guī)則。不過這個規(guī)則在IE6中有bug2014-06-05- 在css 中使用width:200px; 界面不管怎么設(shè)置寬度都不會邊200px,然后再后面加上!important就好,這就是強(qiáng)制CSS,不了解的朋友可以參考下2014-03-19
css中!important的作用(IE6 IE7 FF)及其原理
眾所周知,!important這個規(guī)則對Ie6.0,Ie7.0和Firefox能寫hack,現(xiàn)在就來講解這是什么原理,感興趣的朋友可以參考下2014-01-02- CSS中的!important是一個非常重要的屬性,有時候發(fā)揮著非常大的作用。2010-01-05
CSS中提升優(yōu)先級屬性!important的用法問題總結(jié)
本文介紹了CSS中提升優(yōu)先級屬性!important的用法問題總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-11