1、佈局——layout
佈局是windows提出的概念,用於控制元素的尺寸和定位。擁有佈局的元素負責自身及其子元素的尺寸及定位,而沒有佈局的元素只能依靠最近的祖先元素進行控制。
通常在IE6中出現的BUG,很可能是因爲佈局的緣故而產生的,因而修復IE中BUG的時候,第一件事就是嘗試通過規則迫使元素擁有佈局來看能否修復。
默認情況下擁有佈局的元素包括:body、html(標準模式下)、table、tr、td、img、hr、input、select、textarea、button、iframe、embed、object、applet、marquee
通過設置CSS屬性也可以迫使元素擁有佈局:
1)float:left或right
2)display:inline-block
3)width:任何值
4)height:任何值
5)zoom:任何值
6)writing-mode:tb-rl
在IE7中,以下屬性也可迫使元素擁有佈局:
1)overflow:hidden、scroll或auto
2)min-width:任何值
3)max-width:none之外的任何值
在IE6中因爲佈局而常出現的問題包括:
1)擁有佈局的元素不會收縮:即是如果元素設定了尺寸,而元素內容超過元素尺寸時,一般是內容溢出到元素外,而IE6中是將元素進行擴展以適應內容。
2)佈局元素對浮動進行自動清理:常見的一個例子是文字圍繞圖片,如果文字段落擁有佈局,則文字不再圍繞圖片。
3)相對定位的元素沒有佈局
4)在擁有佈局的元素之間外邊距不會疊加
5)在沒有佈局的塊級鏈接上,單擊區域只覆蓋文本
6)在滾動中,列表項上的背景圖片間歇性的顯示和消失
2、hack和過濾器
1)IE條件註釋
a)適用於IE5及其更高版本
<!-- [if IE]
<link rel="stylesheet" type="text/css" href="ie.css" />
-->
b)適用於IE6
<!-- [if IE 6]
<link rel="stylesheet" type="text/css" href="ie.css" />
-->
c)低於IE6
<!-- [if lt IE 6]
<link rel="stylesheet" type="text/css" href="ie.css" />
-->
2)應用星號HTML hack
在IE6及其更低版本中,有一個匿名的根元素,包圍着html元素,因此可以利用該匿名根元素來講特定的規則應用在IE6及其更低版本的瀏覽器上,如
* html { width: 1px; }
3)應用子選擇器hack
利用子選擇器不被IE老版本所理解的特性,創建只適用於現代瀏覽器的規則
html>body { background-image: url(bg.png); }
只有支持子選擇器的瀏覽器才能應用該規則
3、常見BUG及其修復方法
1)雙外邊距浮動bug——IE6及其更低版本
修復:將元素的display屬性設置爲inline
2)3像素文本偏移bug——IE6及其更低版本
bug:當一個非浮動元素與一個浮動元素相鄰時,兩個元素之間會自動添加一個3像素的間隙
修復:方法一:將非浮動元素設置爲浮動;方法二:爲非浮動元素設置規則:_zoom: 1; margin-left: value; _margin-left: value-3px; (注:zoom是觸發佈局,而下劃線是針對IE7更低版本的hack)
3)IE6的躲貓貓bug
bug:一個浮動元素跟着一個非浮動元素,之後再跟着一個清除浮動元素,所有元素都包含在一個有背景顏色或背景圖片的父元素中。非浮動元素會被父元素覆蓋,重新加載纔會出現。
修復:方法一:去掉父元素的背景顏色或圖片;方法二:避免清除浮動元素與浮動元素接觸;方法三:給父元素指定一個行高;方法四:將浮動元素和父元素的position屬性設置爲relative。
4)相對定位的元素中絕對定位錯誤——IE6及其更低版本
bug:相對定位的父元素中包含絕對定位的子元素,子元素定位時的參照物不是父元素而是視口。(IE6中相對定位的元素沒有擁有佈局)
修復:迫使相對定位父元素擁有佈局(設置width或height,如 _height: 1%;)