!important和(空格)/**/:的組合技巧及其他
先溫習(xí)一下對于IE的box-model的破解 IE box-model這個臭名昭著的bug存在于IE6/Win以前的每一只版本,這個蟲子直到tantak發(fā)布了流傳最為廣泛的那個hack才開始被馴服。
http://www.tantek.com/CSS/Examples/boxmodelhack.html IE5.X/win對box-model的解析是一樣的,他們認(rèn)為width包括了邊框(border)和補白(padding),幸運的是這個情況在IE6中有了好轉(zhuǎn)。
但是IE6在向后兼容的同時也包容了以前的錯誤,IE6其實有兩個核心,在舊的頁面前他仍舊表現(xiàn)出對錯誤的寬容,只有在文檔中嚴(yán)格地加上文檔類型(DOCTYPE)聲明,IE6才能夠接受正確的box-model。
所以,tantak的hack必須和正確的DOCTYPE同時包含在文檔中才能夠正常工作
div.content { width:400px; //這個是錯誤的width,所有瀏覽器都讀到了 voice-family: "\"}\""; //IE5.X/win忽略了"\"}\""后的內(nèi)容 voice-family:inherit; width:300px; //包括IE6/win在內(nèi)的部分瀏覽器讀到這句,新的數(shù)值(300px)覆蓋掉了舊的 } html>body .content { //html>body是CSS2的寫法 width:300px; //支持CSS2該寫法的瀏覽器有幸讀到了這一句 }
現(xiàn)在回到主題,我們經(jīng)?吹!important和(空格)/**/:組合在一起使用,這個寫法有什么奧妙呢?
看剛才那個寫法,我這里可以提供另一種寫法也能達(dá)到這樣的效果
div.content { width:300px !important; //這個是正確的width,大部分支持!important標(biāo)記的瀏覽器使用這里的數(shù)值 width(空格)/**/:400px; //IE6/win不解析這句,所以IE6/win仍然認(rèn)為width的值是300px;而IE5.X/win讀到這句,新的數(shù)值(400px)覆蓋掉了舊的,因為!important標(biāo)記對他們不起作用 } html>body .content { //html>body是CSS2的寫法 width:300px; //支持CSS2該寫法的瀏覽器有幸讀到了這一句 }
同樣,這個方法仍必須依靠正確的文檔類型聲明才能夠正常工作,原因在前面已經(jīng)說過。
文檔類型聲明就像一個開關(guān),打開向后兼容的未來,而錯誤使用的話,就是一個Pandora box。
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進(jìn)入論壇網(wǎng)站綜合、網(wǎng)頁制作版塊參加討論
|