精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
認識hasLayout —— IE瀏覽器CSS BUG的一大禍首!

什么是hasLayout?
hasLayout是IE特有的一個屬性。很多的ie下的cssbug都與其息息相關(guān)。在ie中,一個元素要么自己對自身的內(nèi)容進行計算大小和組織,要么依賴于父元素來計算尺寸和組織內(nèi)容。當一個元素的hasLayout屬性值為true時,它負責對自己和可能的子孫元素進行尺寸計算和定位。雖然這意味著這個元素需要花更多的代價來維護自身和里面的內(nèi)容,而不是依賴于祖先元素來完成這些工作。

下列元素默認 hasLayout=true :

<table> <td> <body> <img> <hr><input> <select> <textarea> <button><iframe> <embed> <object> <applet><marquee>

很多情況下,我們把 hasLayout的狀態(tài)改成true 就可以解決很大部分ie下顯示的bug。
hasLayout屬性不能直接設(shè)定,你只能通過設(shè)定一些特定的css屬性來觸發(fā)并改變 hasLayout 狀態(tài)。下面列出可以觸發(fā)hasLayout的一些CSS屬性值。
-------------------------------------
display
啟動haslayout的值:inline-block
取消hasLayout的值:其他值
--------------------------------------
width/height
啟動hasLayout的值:除了auto以外的值
取消hasLayout的值:auto
---------------------------------------
position
啟動hasLayout的值:absolute
取消hasLayout的值:static
----------------------------------------
float
啟動hasLayout的值:left或right
取消hasLayout的值:none
---------------------------------------
zoom
啟動hasLayout的值:有值
取消hasLayout的值:narmal或者空值
(zoom是微軟IE專有屬性,可以觸發(fā)hasLayout但不會影響頁面的顯示效果。zoom: 1常用來除錯,不過 ie 5 對這個屬性不支持。)
----------------------------------------
writing-mode: tb-rl
這也是微軟專有的屬性。

ie7還有一些額外的屬性可以觸發(fā)該屬性(不完全列表):

min-height: (任何值)max-height: (任何值除了none)min-width: (任何值)max-width:(任何值除了none)overflow: (任何值除了visible)overflow-x: (任何值除了visible)overflow-y:(任何值除了visible)5position: fixed

因元素hasLayout而導(dǎo)致的問題其實一般都很容易發(fā)現(xiàn):往往是內(nèi)容出現(xiàn)錯位甚至完全不可見。舉一個典型例子,當一個元素內(nèi)含浮動或絕對定位的內(nèi)容時,它通常會表現(xiàn)出奇怪和錯誤的行為,看下面的代碼:

<div id="nofloatbox">
<div id="floatbox"></div>
</div>

CSS代碼如下:

#nofloatbox {border: 1px solid #FF0000;background: #CCC;} #floatbox{float: left;width: 100px;height: 100px;border: 1px solid #0000FF;background: #00FF00;}

ie顯示結(jié)果如下圖:

可見無浮動的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瀏覽器窗口,如下圖:


可見這次外圍容器的高度被撐起來了。 同樣,設(shè)定上文所述的其他會觸發(fā)hasLayout的css屬性都會得到這個結(jié)果。通常firefox等標準的遵守瀏覽器可以加上overflow: hidden;來解決,而IE則不行,需要觸發(fā)其hasLayout屬性才可以。
 
hasLayout對于內(nèi)聯(lián)元素也可以有效果,當內(nèi)聯(lián)元素的hasLayout為true的時候,可以給這個內(nèi)聯(lián)元素設(shè)定高度和寬度并得到期望的效果。如下例:
代碼:

<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就已經(jīng)不用特意去觸發(fā)hasLayout就可以得到和firefox一致的效果,不知ie8是否已經(jīng)棄用這個屬性了?

其實依據(jù)合理的語義化,恰當?shù)奈臋n流,正確的標準化所生產(chǎn)出來的頁面,在各個公司出品的標準渲染的瀏覽器下,一般并不會存在太多兼容性的問題的。

一般如果是因為layout而引起的顯示不符期望效果的話,在ff下會表現(xiàn)正常,而在ie下會出現(xiàn)錯誤。這個時候可以嘗試觸發(fā)父容器及其中的子容器的 haslayout屬性,通常可以通過加上zoom:1;來調(diào)試。直到找到了產(chǎn)生問題的元素,再進行針對性的修正。最好的辦法是對這個元素設(shè)置尺寸屬性。但是,有時不便指定尺寸屬性的情況下,就只能尋找替代方案了。對于ie7,最好的辦法是設(shè)置最小高度屬性為0;這個技術(shù)是無害的,因為0本來就是這個屬性的初始值。而且沒有必要對其他瀏覽器隱藏這個屬性。而對于ie6和更早版本中觸發(fā)一個元素hasLayout的方法是在overflow屬性是visible的情況下設(shè)置這個元素的高度屬性為1%,然后對其他瀏覽器隱藏這個設(shè)置。這種技術(shù)就是著名的Holly hack。


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
不要告訴我你懂margin
關(guān)于display:inline
hasLayout引發(fā)的CSS Bug表
On having layout - 藍色理想(2)
haslayout詳解
利用haslayout征服IE6、7
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 北碚区| 博客| 华池县| 广东省| 苏尼特左旗| 彰化市| 通化市| 磴口县| 宁晋县| 林西县| 萍乡市| 平安县| 增城市| 滨海县| 区。| 镇远县| 富锦市| 苏尼特右旗| 江口县| 鄢陵县| 海宁市| 家居| 仪征市| 靖远县| 桐梓县| 清镇市| 神木县| 毕节市| 沽源县| 建始县| 黄浦区| 南郑县| 沅陵县| 山东省| 拜城县| 宿松县| 绿春县| 江陵县| 辛集市| 宾阳县| 交口县|