IE,這個令所有網站設計人員討厭,但又不得不為它工作的瀏覽器。不論是6、7還是8,它們都有一個共同的渲染標準haslayout,所以haslayout 是一個非常有必要徹底弄清除的概念。大多 數IE下的顯示錯誤,就是源于它。
什么是Layout呢?
"Layout" 是 IE 的一個私有屬性,并不是W3C標準。它決定了一個對象(就是一個標簽div、li等)在內容中如何顯示、與周圍對象的位置關系、以及怎樣響應程序或用戶產生的事件。
這個屬性可以被一些css強制激活。一些HTML標簽默認具有haslayout。
PS:一個對象的layout屬性被激活,它的具體表現就是haslayout=true。我們可以用IE Developer Toolbar工具看到被激活的對象帶有"haslayout = -1"的屬性。
下面這些標簽默認擁有haslayout屬性:
你可能就問:微軟干嘛要設layout這個東西呢?當一個對象的layout被激活時,它以及它的子對象的定位和尺寸計算將獨立進行,不受附近對象 的干擾。也就是說它擁有一個獨立的布局(layout)。因此瀏覽器要花費更多的代價來處理擁有haslayout的對象。為了提高性能,微軟增加了 layout這個IE私有的概念。
怎樣激活layout?
下面列出的css屬性可以激活對象的layout:
設置絕對定位可能會引發新的問題。
IE下的浮動也會產生一些莫名其妙的問題。
當一個內聯元素需要haslayout屬性時就需要用它,但是IE本身不支持inline-block的,只是表現得像標準里說的inline-block。
1.width: 除'auto'外的任意值
優先考慮使用該屬性。
2.height: 除'auto'外的任意值
對 IE6 及更早版本來說很常用,該方法被稱為霍莉破解(Holly hack),即設定這個元素的高度為 1% (height:1%;)。但是要注意,當這個元素的 overflow 屬性被設置為 visible 時,這個方法就失效了。
新聞熱點
疑難解答