1. 程式人生 > >CSS瀏覽器兼容問題集(一)

CSS瀏覽器兼容問題集(一)

屬性 背景 cli 存在 oct 指定 產生 自適應高度 web2.0

CSS對瀏覽器的兼容性有時讓人非常頭疼,也許當你了解其中的技巧跟原理,就會認為也不是難事,從網上收集了IE7,6與Fireofx的兼容性處理方法並整理了一下.對於web2.0的過度,請盡量用xhtml格式寫代碼,並且DOCTYPE 影響 CSS 處理,作為W3C的標準,一定要加DOCTYPE聲名


CSS技巧

1.div的垂直居中問題


vertical-align:middle; 將行距添加到和整個DIV一樣高 line-height:200px; 然後插入文字,就垂直居中了。

缺點是要控制內容不要換行

2. margin加倍的問題

設置為float的div在ie下設置的margin會加倍。這是一個ie6都存在的bug。解決方式是在這個div裏面加上display:inline;
比如:
<#div id=”imfloat”>
對應的css為
#IamFloat{
float:left;
margin:5px;/*IE下理解為10px*/
display:inline;/*IE下再理解為5px*/}

3.浮動ie產生的雙倍距離



#box{ float:left; width:100px; margin:0 0 0 100px; //這樣的情況之下IE會產生200px的距離 display:inline; //使浮動忽略}
這裏細說一下block與inline兩個元素:block元素的特點是,總是在新行上開始,高度,寬度,行高,邊距都能夠控制(塊元素);Inline元素的特點是,和其它元素在同一行上,不可控制(內嵌元素);
#box{ display:block; //能夠為內嵌元素模擬為塊元素 display:inline; //實現同一行排列的效果 diplay:table;

4 IE與寬度和高度的問題

IE不認得min-這個定義。但實際上它把正常的width和height當作有min的情況來使。這樣問題就大了,假設僅僅用寬度和高度。正常的瀏覽器裏這兩個值就不會變。假設僅僅用min-width和min-height的話。IE以下根本等於沒有設置寬度和高度。


比方要設置背景圖片,這個寬度是比較重要的。要解決問題,能夠這樣:
#box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}

5.頁面的最小寬度

min-width是個很方便的CSS命令,它能夠指定元素最小也不能小於某個寬度,這樣就能保證排版一直正確。但IE不認得這個,而它實際上把width當做最小寬度來使。

為了讓這一命令在IE上也能用,能夠把一個<div> 放到 <body> 標簽下。然後為div指定一個類,然後CSS這樣設計:
#container{ min-width: 600px; width:expression(document.body.clientWidth < 600?

"600px": "auto" );}
第一個min-width是正常的;但第2行的width使用了Javascript。這僅僅有IE才認得。這也會讓你的HTML文檔不太正規。它實際上通過Javascript的推斷來實現最小寬度。

6.DIV浮動IE文本產生3象素的bug

左邊對象浮動,右邊採用外補丁的左邊距來定位,右邊對象內的文本會離左邊有3px的間距.
#box{ float:left; width:800px;}
#left{ float:left; width:50%;}
#right{ width:50%;}
*html #left{ margin-right:-3px; //這句是關鍵}
<div id="box">
<div id="left"></div>
<div id="right"></div>
</div>

7.IE捉迷藏的問題

當div應用復雜的時候每一個欄中又有一些鏈接。DIV等這個時候easy發生捉迷藏的問題。


有些內容顯示不出來。當鼠標選擇這個區域是發現內容確實在頁面。 解決的方法:對#layout使用line-height屬性 或者給#layout使用固定高和寬。頁面結構盡量簡單。

8.float的div閉合;清除浮動;自適應高度;

①比如:<#div id=”floatA” ><#div id=”floatB” >&lt;#div id=”NOTfloatC” >這裏的NOTfloatC並不希望繼續平移。而是希望往下排。(當中floatA、floatB的屬性已經設置為float:left;)
這段代碼在IE中毫無問題。問題出在FF。原因是NOTfloatC並不是float標簽,必須將float標簽閉合。

在 <#div class=”floatB”> <#div class=”NOTfloatC”>之間加上 &lt;#div class=”clear”>這個div一定要註意位置。並且必須與兩個具有float屬性的div同級,之間不能存在嵌套關系。否則會產生異常。 並且將clear這樣的樣式定義為為例如以下就可以: .clear{ clear:both;}

②作為外部 wrapper 的 div 不要定死高度,為了讓高度能自己主動適應,要在wrapper裏面加上overflow:hidden; 當包括float的box的時候,高度自己主動適應在IE下無效。這時候應該觸發IE的layout私有屬性(萬惡的IE啊!)用zoom:1;能夠做到,這樣就達到了兼容。


比如某一個wrapper例如以下定義:
.colwrapper{ overflow:hidden; zoom:1; margin:5px auto;}

③對於排版,我們用得最多的css描寫敘述可能就是float:left.有的時候我們須要在n欄的float div後面做一個統一的背景,譬如:
<div id=”page”>
<div id=”left”></div>
<div id=”center”></div>
<div id=”right”></div>
</div>
比方我們要將page的背景設置成藍色,以達到全部三欄的背景顏色是藍色的目的,可是我們會發現隨著left center right的向下拉長,而page竟然保存高度不變,問題來了,原因在於page不是float屬性,而我們的page因為要居中,不能設置成float,所以我們應該這樣解決
<div id=”page”>
<div id=”bg” style=”float:left;width:100%”>
<div id=”left”></div>
<div id=”center”></div>
<div id=”right”></div>
</div>
</div>
再嵌入一個float left而寬度是100%的DIV解決之

④萬能float 閉合(很重要!)
關於 clear float 的原理可參見 [How To Clear Floats Without Structural Markup],將下面代碼增加Global CSS 中,給須要閉合的div加上 class="clearfix" 就可以,屢試不爽.
/* Clear Fix */
.clearfix:after { content:"."; display:block; height:0; clear:both; visibility:hidden; }
.clearfix { display:inline-block; }
/* Hide from IE Mac */
.clearfix {display:block;}
/* End hide from IE Mac */
/* end of clearfix */
或者這樣設置:.hackbox{ display:table; //將對象作為塊元素級的表格顯示}

CSS瀏覽器兼容問題集(一)