天天看點

IE相容問題解決根源:深刻了解hasLayout屬性,原理與使用方法

解決IE相容問題是比較頭疼的問題,無論你是新入門的菜鳥還是久經考驗的職業行家,相容問題,特别是IE,IE6會讓你非常頭疼。很多時候,div CSS在IE下的解析十分奇怪,一個比較經典的bug就是設定border的時候,有時候border會斷開,重新整理頁面或者滾動滾動條的時候,斷掉的部分又會連接配接起來。這些問題的根源很多時候來源于IE的一個特有屬性:hasLayout。hasLayout是一個非常有意思的學術研究,如何深刻了解hasLayout屬性,及他的使用方法,原理,解決IE的相容問題非常有用處,下面來講解一下hasLayout的屬性,原理與使用方法。

這些詭異的問題往往大部分和IE下一個神秘的屬性相關——hasLayout。hasLayout是IE浏覽器專有的一個屬性,用于CSS的解析引擎。有時候在IE下一些複雜的CSS設定解析起來會出現bug,其原因可能與hasLayout沒有被自動觸發有關,我們通過一些技巧,手動觸發hasLayout屬性就可以解決Bug了。這也算是針對IE下疑難雜症的特殊偏方了,很多時候,觸發了hasLayout就可以藥到病除了。

hasLayout的觸發方法有很多種,例如設定width,height值,設定position為relative等。但如果設定了width,height,或position都會在觸發hasLayout的同時帶來一些副作用的。早期的一些工程師推薦使用“height:1%”來觸發hasLayout,那時還沒有出現IE7,而height屬性在IE6下其實是按照"min-height"來解析的,是以隻要對IE6進行hack,"* html{height:1%}"就可以觸發hasLayout,同時又不帶來副作用了。後來出現的IE7仍然存在很多hasLayout的問題,但IE7已經能夠正确識别height屬性了,“height:1%”的方法已經不再适用了。