天天看點

CSS相容浏覽器(1)

1、浏覽器相容的前提是養成好的網頁開發習慣:

     本人在做了幾個月的前端浏覽器相容問題上,經常出現的不相容是标記寫法錯誤或簡略導緻的。例如Div的寫法,一定要遵循好的習慣。

推薦寫法:
<div></div>
不推薦的寫法:
<div/>
           

2、Div中的文字在不同浏覽器下換行問題

設定 style="white-space:normal;word- break : break -all;overflow:hidden; "           

3、!important不同浏覽器屬性寬度不一樣.

     IE7本身支援!important,針對不同浏覽器高度、寬度、内外邊距問題可采用如下方法解決

.button-gap{   
     margin-right: 0px!imprtant;  /*ie7及firefox支援*/ 
     margin-right: 4px;/*ie6支援*/ 
}           

4、*html和*+html問題

*+html 與 *html 是IE特有的标簽, firefox 暫不支援.而*+html 又為 IE7特有标簽. 
代碼: 
<style> 
#wrapper { width: 120px; } /* FireFox */ 
*html #wrapper { width: 80px;} /* ie6 fixed */ 
*+html #wrapper { width: 60px;} /* ie7 fixed, 注意順序 */ 
</style> 
注意: 
*+html 對IE7的相容 必須保證HTML頂部有如下聲明: 
代碼: 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
           

 5、height屬性問題

第一個相容,IE FF 所有浏覽器 公用(其實也不算是相容) 
height:100px; 
第二個相容 IE6專用 
_height:100px; 
第三個相容 IE6 IE7公用 
*height:100px; 

height:100px; 
*height:120px; 
_height:150px; 
在FF下,第2、3個屬性FF不認識,是以它讀的是 height:100px; 
在IE7下,第三個屬性IE7不認識,是以它讀第1、2個屬性,又因為第二個屬性覆寫了第一個屬性,是以IE7最終讀出的是第2個屬性 *height:120px; 
在IE6下,三個屬性IE6都認識,是以三個屬性都可以讀取,又因為第三個屬性覆寫掉前2個屬性,是以IE6最終讀取的是第三個屬性。 
           

6、Div設定padding問題

IE在解析padding的時候認為padding是在寬度裡面縮進,而firefox則認為是在寬度外邊縮進,是以下面是兩個等價的css設定。
IE下:
.i-div{width:800px;padding-left:12px;padding-right:12px;height:500px}
等同于火狐下的:
Div中不包含其他元素作為站位符使用的時候,如果該DIV隻是空的占位符,且高度小于12px時,ie解析錯位,因為IE預設認為是12px,解決方法是加入lineheight屬性高度等于height,同時font-size:0px;這樣在IE下才不會解析錯位。
.i-div{ height:6px;width:20px;}
要在ie下相容,應該為
.i-div{height:6px;line-height:6px;font-size:0px}

 .i-div{width:776px;padding-left:12px;padding-right:12px;height:500px}

為了相容兩個浏覽器,可采用如下方法:
.i-div{width:776px!important;width:800px;padding-left:12px;padding-right:12px;height:500px}
注意:順序一定不能變。火狐會取前者,而IE7兩者都識别,最終取後者,其他IE識别後者。


           

7、關于空的DIV站位問題

如果DIV隻是空的占位符,且高度小于12px時,ie在解析時,它預設是12px,解決方法是加入lineheight屬性高度等于height,同時font-size:0px;這樣在ie下才不會解析錯位.
.i-div{ height:6px;width:20px;}
要在ie下相容,應該為
.i-div{height:6px;line-height:6px;font-size:0px}
           

8、作為外部 wrapper 的 div 不要定死高度, 最好還加上 overflow: hidden.以達到高度自适應.防止頁面内容超過Div高度而是div撐開,同時,注意Div内部Div要自适應高度則需要設定overflow: auto

9、對齊問題

(1)DIV中文字的垂直居中問題
設定vertical-align:middle;同時設定 line-height屬性等于DIV的高度(不能換行)
(2)DIV水準居中問題
設定DIV的父容器style為text-align:center,然後将DIV的屬性設定如下即可:
margin-left:auto; margin-right:auto;
           

10、圖檔的背景的平鋪控制

1、隻平鋪一次
background-repeat:no-repeat;
2、水準平鋪一次
background-repeat:repeat-x;
1、垂直平鋪一次
background-repeat:repeat-y;           

11、段首縮進設定

Text-indent:2em; //em 字型的高度           

12、字間距的調整

letter-spacing屬性用于設定字型間的距離,負值表示縮小,正值表示增大。
對于英文,通過word-spacing屬性可以設定單詞間的距離。           

13、僞類的順序:LVHA(link,visited、hover、active)順序,違反該順序,浏覽器有些效果不支援。

14、文字和圖檔對齊

1、設定文字的外部屬性valign為middle,或設定css樣式中的text-align屬性為middle(兩個是等價的)
2、設定img元素的align屬性值為absmiddle即可。           

15.float屬性帶來的一些列問題

(1)、margin加倍的問題
 設定為float的div在ie下設定的margin會加倍。解決方案是在這個div裡面加上 display:inline;樣式如下:
#IamFloat{ 
float:left;
margin:5px;/*IE下了解為10px*/ 
display:inline;/*IE下再了解為5px*/
}
(2)、
<#div id=”floatA” >
<#div id=”floatB” >
<#div id=” NOTfloatC” >
已知floatA、floatB設定了float:left屬性,要求NOTfloatC不是水準排列,而是向下排列時,需要在<#div id=”floatB” >和<#div id=” NOTfloatC” >添加一個div,設定其class屬性為:clear:both;即可。
(3)、作為外部 wrapper 的 div 不要定死高度,為了讓高度能自動适應,要在wrapper裡面加上overflow:hidden; 
當包含float的 
box的時候,高度自動适應在IE下無效,這時候應該觸發IE的layout私有屬性(萬惡的IE啊!)用zoom:1;可以做到,這樣就達到了相容。 
   例如某一個wrapper如下定義:    .colwrapper{ overflow:hidden; zoom:1; margin:5px
 auto;}  

(4)、對于排版,我們用得最多的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%;background-color: #99CCCC”>   <div id=”left”></div>   
<div id=”center”></div>   <div id=”right”></div>
   </div>   </div>   再嵌入一個float left而寬度是100%的DIV解決之