亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

深入解析IE瀏覽器專有的CSS屬性hasLayout

2024-07-11 08:56:57
字體:
來源:轉載
供稿:網友

一.hasLayout 是什么?
hasLayout 與 BFC 有很多相似之處,但 hasLayout 的概念會更容易理解。在 Internet Explorer 中,元素使用“布局”概念來控制尺寸和定位,分為擁有布局和沒有布局兩種情況,擁有布局的元素由它控制本身及其子元素的尺寸和定位,而沒有布局的元素則通過父元素(最近的擁有布局的祖先元素)來控制尺寸和定位,而一個元素是否擁有布局則由 hasLayout 屬性告知瀏覽器,它是個布爾型變量,true 代表元素擁有布局,false 代表元素沒有布局。簡而言之,hasLayout 只是一個 IE 下專有的屬性,hasLayout 為 true 的元素瀏覽器會賦予它一系列的效果。

特別注意的是,hasLayout 在 IE 8 及之后的 IE 版本中已經被拋棄,所以在實際開發中只需針對 IE 8 以下的瀏覽器為某些元素觸發 hasLayout 。

一個元素觸發 hasLayout 會影響一個元素的尺寸和定位,這樣會消耗更多的系統資源,因此 IE 設計者默認只為一部分的元素觸發 hasLayout (即默認有部分元素會觸發 hasLayout ,這與 BFC 基本完全由開發者通過特定 CSS 觸發并不一樣),這部分元素如下:

body and html
table, tr, th, td
img
hr
input, button, file, select, textarea, fieldset
marquee
frameset, frame, iframe
objects, applets, embed

二.如何觸發 hasLayout
除了 IE 默認會觸發 hasLayout 的元素外,Web 開發者還可以使用特定的 CSS 觸發元素的 hasLayout 。

通過為元素設置以下任一 CSS ,可以觸發 hasLayout (即把元素的 hasLayout 屬性設置為 true)。

float: (left 或 right)
position: absolute
display: inline-block
width: (除 auto 外任何值)
height: (除 auto 外任何值)
writing-mode: tb-rl
zoom: (除 normal 外任意數值,包括設置為效果等同于 normal 的 1 也有效)
另外,一些 CSS 在 IE 7 下亦能觸發 hasLayout。

min-width: (包含 0 在內的任意值)
max-width: (除 none 外任意值)
min-height: (包含 0 在內的任意值)
max-height: (除 none 外任意值)
overflow 除了 visible 以外的值(hidden,auto,scroll)
position: fixed
對于內聯元素(可以是默認被瀏覽器認為是內聯元素的 span 元素,也可以是設置了 display: inline 的元素),width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下能觸發元素的 hasLayout ,但是對于 IE6,如果瀏覽器運行于標準兼容模式下,內聯元素會忽略 width 或 height 屬性,所以設置 width 或 height 不能在此種情況下令該元素觸發 hasLayout 。但 zoom 除了在 IE 5.0 中外,總是能觸發 hasLayout 。zoom 用于設置或檢索元素的縮放比例,為元素設置 zoom: 1 既可以觸發元素的 hasLayout 同時不會對元素造成多余的影響。因此綜合考慮瀏覽器之間的兼容和對元素的影響,Kayo 建議使用 zoom: 1 來觸發元素的 hasLayout 。

三.觸發 hasLayout 的效果
雖然 hasLayout 也會像 BFC 那樣影響著元素的尺寸和定位,但它卻又不是一套完整的標準,并且由于它默認只為某些元素觸發,這導致了 IE 下很多前端開發的 bugs ,觸發 hasLayout 更大的意義在于解決一些 IE 下的 bugs ,而不是利用它的一些“副作用”來達到某些效果。另外由于觸發 hasLayout 的元素會出現一些跟觸發 BFC 的元素相似的效果,因此為了統一元素在 IE 與支持 BFC 的瀏覽器下的表現,Kayo 建議為觸發了 BFC 的元素同時觸發 hasLayout ,當然還需要考慮實際的情況,也有可能只需觸發其中一個就可以達到表現統一,下面會舉例介紹。

這里首先列出觸發 hasLayout 元素的一些效果:

1.阻止外邊距折疊

兩個相連的 div 在垂直上的外邊距會發生疊加,而觸發 hasLayout 的元素之間則不會有這種情況發生,如下圖:
2016519112936439.png (797×222)

上圖的例子中,三個 div 各包含一個 p 元素,三個 div 及其包含的 p 元素都有頂部和底部的外邊距,但只有第三個 div 的邊距沒有與它的子元素 p 的外邊距折疊。這是因為第三個 div 使用 zoom: 1 觸發了 hasLayout ,阻止了它與它的子元素的外邊距折疊。

另外,例子中也使用了 overflow: hidden 觸發元素的 BFC ,這利用了 BFC 阻止外邊距折疊的特性達到元素在 IE 與現代瀏覽器下的表現統一。

2.可以包含浮動的子元素,即計算高度時包括其浮動子元素

效果如圖:
2016519112957472.png (795×104)

上圖的例子中,有兩個 div ,它們各包含一個設置了浮動的 p 元素,但第一個 div 實際被瀏覽器判斷為沒有高度和寬度,即高度為 0 ,上下邊框重疊在一起。而第二個 div 使用 zoom: 1 觸發了 hasLayout ,可以包含浮動元素,因此能正確表現出高度,其邊框位置也正常了。

本例子中也使用了 overflow: hidden 觸發 BFC ,跟上例相似,這利用了 BFC 可以包含浮動子元素的特性達到元素在 IE 與現代瀏覽器下的表現統一。

3.背景圖像顯示問題

元素背景圖不能正確顯示是網頁重構中最常見的問題之一了,在 IE 7 及以下的 IE 版本中,沒有設置高度、寬度的元素往往不能顯示出背景圖(背景色則顯示正常),這實際上與 hasLayout 有關。實際的情況是,沒有觸發 hasLayout 的元素不能顯示背景圖,上面有說過,觸發 hasLayout 也就是使到元素擁有布局,換句話說,擁有布局的元素才能正確顯示背景圖。如下圖:
2016519113016025.png (794×108)

上圖兩個 div 都設置了背景圖,但只有使用 zoom: 1 觸發了 hasLayout 的第二個 div 才能正確顯示背景圖。

本例子中沒有觸發元素的 BFC ,這是因為在現代瀏覽器中,元素本身并沒有背景圖顯示問題。

可以看出,上面的第一、二個例子中,為了使到元素在 IE (包括低版本 IE 以及較新版本的 IE)和現代瀏覽器中表現盡量統一同時觸發了 hasLayout 和 BFC ,而第三個例子中的問題因為只在低版本 IE 中出現,所以只需為低版本 IE 觸發 hasLayout ,這些技巧在實際項目中需要特別注意。

上面也有說道,hasLayout 與很多 IE 下的顯示 bugs 都有關,實際上很多莫名奇妙的 bugs 都因 hasLayout 而起,因此只要適當的觸發元素的 hasLayout ,很多 IE bugs 往往就能解決。這里 Kayo 列舉幾個例子:

IE 6 及更低版本下浮動元素雙倍 margin bug - 為元素設置 display: inline 可以解決
IE 5-6 的 3 像素偏移 bug - 為元素設置 _height: 1% 可以解決

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清激情视频| 国产a∨精品一区二区三区不卡| 日韩av快播网址| 91精品久久久久久久久久另类| 成人免费看片视频| 精品免费在线观看| 亚洲v日韩v综合v精品v| 精品国产乱码久久久久久天美| 欧美亚洲视频一区二区| 亚洲天堂开心观看| 国产精品永久免费| 国产精品第一视频| 97国产成人精品视频| 一道本无吗dⅴd在线播放一区| 欧美在线免费看| 亚洲精品国产精品国自产观看浪潮| 成人在线免费观看视视频| 久久国产一区二区三区| 午夜精品蜜臀一区二区三区免费| 1769国内精品视频在线播放| 欧美午夜性色大片在线观看| 国产精品久久久久免费a∨| 国产精品久久久久国产a级| 日韩一区在线视频| 国产女精品视频网站免费| 久久亚洲国产成人| 日韩精品视频免费专区在线播放| 日韩中文字幕国产| 91系列在线播放| 国产精品视频白浆免费视频| 一区二区三区在线播放欧美| 草民午夜欧美限制a级福利片| 国产精品视频久久| 欧美极品少妇xxxxⅹ喷水| 97久久久免费福利网址| 91视频8mav| 精品久久久国产精品999| 亚洲aa在线观看| 久久久久久久97| 国产成人一区二区三区小说| 国产91ⅴ在线精品免费观看| 高清亚洲成在人网站天堂| 中文字幕亚洲图片| 精品人伦一区二区三区蜜桃网站| 欧美精品九九久久| 日韩在线观看精品| 欧美一区二区三区免费视| 欧美高清在线视频观看不卡| 久久久久久久999| 精品无人区乱码1区2区3区在线| 久久夜色精品亚洲噜噜国产mv| 久久成人这里只有精品| 久久亚洲精品一区| 亚洲国产精品人人爽夜夜爽| 在线亚洲午夜片av大片| 69久久夜色精品国产7777| 91免费精品视频| 亚洲欧美三级伦理| 最近日韩中文字幕中文| 久久久久国产精品一区| 亚洲高清福利视频| 欧洲中文字幕国产精品| 欧美激情亚洲另类| 97人人模人人爽人人喊中文字| 久久精品精品电影网| 91色在线观看| 欧美一级电影免费在线观看| 成人黄色大片在线免费观看| 色多多国产成人永久免费网站| 国产欧美欧洲在线观看| 日韩av高清不卡| 欧美激情奇米色| 久久人人97超碰精品888| 在线成人激情黄色| 亚洲图片在线综合| 久久精品国产成人精品| 国内精品小视频在线观看| 7m精品福利视频导航| 美日韩精品免费观看视频| 亚洲第一av网| 国产97免费视| 亚洲电影免费观看高清完整版| 成人一区二区电影| 国产不卡一区二区在线播放| 欧美电影免费观看大全| 一区二区av在线| 欧洲日本亚洲国产区| 97精品欧美一区二区三区| 亚洲最大的av网站| 亚洲欧美综合精品久久成人| 成人免费视频xnxx.com| 欧美美女18p| 欧美亚洲国产日本| 亚洲福利在线看| 亚洲精品视频播放| 97精品久久久中文字幕免费| 久久精品国产精品亚洲| 日本a级片电影一区二区| 亚洲国产高潮在线观看| 在线看日韩欧美| 欧美重口另类videos人妖| 日韩欧美一区二区三区| 国产一区二区动漫| 亚洲国产精品悠悠久久琪琪| 亚洲国产中文字幕在线观看| 在线播放国产一区中文字幕剧情欧美| 国产精品普通话| 91精品视频在线看| 黑人巨大精品欧美一区二区一视频| 亚洲性日韩精品一区二区| 成人性生交xxxxx网站| 日韩在线精品视频| 欧美极品在线播放| 欧美性猛交xxxx乱大交| 亚洲日本中文字幕| 久久香蕉国产线看观看av| 在线日韩中文字幕| 久久精品精品电影网| 亚洲福利视频免费观看| 精品无人区太爽高潮在线播放| 亚洲欧美在线一区二区| 97免费视频在线播放| 欧美怡春院一区二区三区| 日韩欧美精品中文字幕| 欧美日韩国产一中文字不卡| 欧美小视频在线观看| 26uuu亚洲伊人春色| 欧美与欧洲交xxxx免费观看| 久久精品一本久久99精品| 精品视频在线播放免| 亚洲人精选亚洲人成在线| 中文字幕亚洲一区二区三区五十路| 精品无人区乱码1区2区3区在线| 国产日韩精品在线播放| 高清亚洲成在人网站天堂| 国产一区二区三区四区福利| 日韩精品视频在线观看网址| 国产成人精品日本亚洲专区61| 日本19禁啪啪免费观看www| 亚洲女人天堂网| 久久综合亚洲社区| 欧美另类极品videosbest最新版本| 北条麻妃99精品青青久久| 1769国产精品| 国产婷婷色综合av蜜臀av| 国产精品高潮粉嫩av| 久久精品亚洲精品| 亚洲图中文字幕| 在线看福利67194| 欧美人与物videos| 亚洲人成电影网站| 国产乱肥老妇国产一区二| 久久久久久久999精品视频| 欧美电影免费在线观看| 亚洲japanese制服美女| 亚洲欧美另类在线观看| 亚洲国产精品热久久| 久久躁狠狠躁夜夜爽| 亚洲自拍欧美另类| 欧美一级片久久久久久久| 大荫蒂欧美视频另类xxxx| 亚洲日韩中文字幕在线播放| 国产九九精品视频| 亚洲成人av片|