CSS中常見的BUG調試

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及其更低版本

bug:任何浮動元素的外邊距加倍

修復:將元素的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%;)




    <link rel="stylesheet" type="text/css" href="ie.css" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章