|  什么是hasLayout?  下列元素默認 hasLayout=true : <table> <td> <body> <img> <hr> <input> <select> <textarea> <button> <iframe> <embed> <object> <applet> <marquee> 很多情況下,我們把 hasLayout的狀態(tài)改成true 就可以解決很大部分ie下顯示的bug。  min-height: (任何值)max-height: (任何值除了none)min-width: (任何值)max-width: (任何值除了none)overflow: (任何值除了visible)overflow-x: (任何值除了visible)overflow-y: (任何值除了visible)5position: fixed 因元素hasLayout而導致的問題其實一般都很容易發(fā)現(xiàn):往往是內容出現(xiàn)錯位甚至完全不可見。舉一個典型例子,當一個元素內含浮動或絕對定位的內容時,它通常會表現(xiàn)出奇怪和錯誤的行為,看下面的代碼: <div id="nofloatbox"> CSS代碼如下: #nofloatbox {border: 1px solid #FF0000;background: #CCC;} #floatbox {float: left;width: 100px;height: 100px;border: 1px solid #0000FF; background: #00FF00;} 可見無浮動的div并沒有被里面的浮動元素的高度撐開,其高度并不會自動計算。我們下面再給這個無浮動的div加上個zoom:1;來觸發(fā)其hasLayout屬性試試,css代碼如下: #nofloatbox { border: 1px solid #FF0000;background: #CCC;zoom:1;} #floatbox {float: left; width: 100px;height: 100px;border: 1px solid #0000FF;background: #00FF00;} 保存刷新ie瀏覽器窗口,如下圖: 
 <p>今天的<span style="width: 100px; height: 50px; background: #DDD;">天氣</span>真好</p> 效果如下圖所示: 下面給span加上zoom: 1;來觸發(fā)hasLayout: <p>今天的<span style="width: 100px; height: 50px; background: #DDD; zoom: 1;">天氣</span>真好</p> 這回的效果如下圖所示: 要注意的是,hasLayout是微軟專有的東西,對firefox等比較遵守標準的瀏覽器就無效了,因此不可太過依賴。貌似現(xiàn)在的IE8就已經不用特意去觸發(fā)hasLayout就可以得到和firefox一致的效果,不知ie8是否已經棄用這個屬性了? 其實依據合理的語義化,恰當的文檔流,正確的標準化所生產出來的頁面,在各個公司出品的標準渲染的瀏覽器下,一般并不會存在太多兼容性的問題的。 一般如果是因為layout而引起的顯示不符期望效果的話,在ff下會表現(xiàn)正常,而在ie下會出現(xiàn)錯誤。這個時候可以嘗試觸發(fā)父容器及其中的子容器 的 haslayout屬性,通??梢酝ㄟ^加上zoom: 1;來調試。直到找到了產生問題的元素,再進行針對性的修正。最好的辦法是對這個元素設置尺寸屬性。但是,有時不便指定尺寸屬性的情況下,就只能尋找替代 方案了。對于ie7 ,最好的辦法是設置最小高度屬性為0;這個技術是無害的,因為0本來就是這個屬性的初始值。而且沒有必要對其他瀏覽器隱藏這個屬性。而對于ie6和更早版 本中觸發(fā)一個元素hasLayout的方法是在overflow屬性是visible的情況下設置這個元素的高度屬性為1%,然后對其他瀏覽器隱藏這個設 置。這種技術就是著名的Holly hack。 | 
|  |