css 相容IE和FF的寫法

2021-08-31 02:20:32 字數 3817 閱讀 6160

ie和火狐的css相容性問題歸總

css對瀏覽器器的相容性具有很高的價值,通常情況下ie和firefox存在很大的解析差異,這裡介紹一下相容要點。

1、doctype 影響 css 處理

2、ff: div 設定 margin-left, margin-right 為 auto 時已經居中, ie 不行

3、ff: body 設定 text-align 時, div 需要設定 margin: auto(主要是 margin-left,margin-right) 方可居中

4、ff: 設定 padding 後, div 會增加 height 和 width, 但 ie 不會, 故需要用 !important 多設乙個 height 和 width

5、ff: 支援 !important, ie 則忽略, 可用 !important 為 ff 特別設定樣式,值得注意的是,一定要將***x !important 這句放置在另一句之上

6、div 的垂直居中問題: vertical-align:middle; 將行距增加到和整個div一樣高 line-height:200px; 然後插入文字,就垂直居中了。缺點是要控制內容不要換行

7、cursor: pointer 可以同時在 ie ff 中顯示游標手指狀, hand 僅 ie 可以

8、ff: 鏈結加邊框和背景色,需設定 display: block, 同時設定 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設定高度是為了避免底邊顯示錯位, 若不設 height, 可以在 menubar 中插入乙個空格。

9、在mozilla firefox和ie中的box模型解釋不一致導致相差2px解決方法:div

注意這兩個margin的順序一定不能寫反,據阿捷的說法!important這個屬性ie不能識別,但別的瀏覽器可以識別。所以在ie下其實解釋成這樣:div

重複定義的話按照最後乙個來執行,所以不可以只寫margin:xxpx!important;

10、ie5 和ie6的box解釋不一致

ie5下div

div的寬度會被解釋為300px-10px(右填充)-10px(左填充)最終div的寬度為280px,而在ie6和其他瀏覽器上寬度則是以 300px+10px(右填充)+10px(左填充)=320px來計算的。這時我們可以做如下修改div

關於這個/**/是什麼我也不太明白,只知道ie5和firefox都支援但ie6不支援,如果有人理解的話,請告訴我一聲,謝了!:)

11、ul標籤在mozilla中預設是有padding值的,而在ie中只有margin有值所以先定義ul

就能解決大部分問題

注意事項:

1、float的div一定要閉合。

例如:(其中floata、floatb的屬性已經設定為float:left;)<#div id=/」floata/」 >

<#div id=/」floatb/」 >

<#div id=/」notfloatc/」 >

這裡的notfloatc並不希望繼續平移,而是希望往下排。

這段**在ie中毫無問題,問題出在ff。原因是notfloatc並非float標籤,必須將float標籤閉合。

在<#div class=/」floatb/」>

<#div class=/」notfloatc/」>

之間加上<#div class=/」clear/」>

這個div一定要注意宣告位置,一定要放在最恰當的地方,而且必須與兩個具有float屬性的div同級,之間不能存在巢狀關係,否則會產生異常。

並且將clear這種樣式定義為如下即可:.clear

當包含float的box的時候,高度自動適應在ie下無效,這時候應該觸發ie的layout私有屬性(萬惡的ie啊!)用zoom:1;可以做到,這樣就達到了相容。

overflow:hidden;

zoom:1;

margin:5px auto;}

2、margin加倍的問題。

設定為float的div在ie下設定的margin會加倍。這是乙個ie6都存在的bug。

解決方案是在這個div裡面加上display:inline;

例如:<#div id=/」imfloat/」>

相應的css為

#iamfloat

3、關於容器的包涵關係

很多時候,尤其是容器內有平行布局,例如兩、三個float的div時,寬度很容易出現問題。在ie中,外層的寬度會被內層更寬的div擠破。一定要用photoshop或者firework量取畫素級的精度。

4、關於高度的問題

如果是動態地新增內容,高度最好不要定義。瀏覽器可以自動伸縮,然而如果是靜態的內容,高度最好定好。(似乎有時候不會自動往下撐開,不知道具體怎麼回事)

5、最狠的手段 - !important;

如果實在沒有辦法解決一些細節問題,可以用這個方法.ff對於」!important」會自動優先解析,然而ie則會忽略.如下.tabd1

值得注意的是,一定要將***x !important 這句放置在另一句之上,上面已經提過;

ie7.0出來了,對css的支援又有新問題。瀏覽器多了,網頁相容性更差了,疲於奔命的還是我們 ,為解決ie7.0的相容問題,找來了下面這篇文章:

現在我大部分都是用!important來hack,對於ie6和firefox測試可以正常顯示,但是ie7對!important可以正確解釋,會導致頁面沒按要求顯示!搜尋了一下,找到乙個針對ie7不錯的hack方式就是使用「*+html」,現在用ie7瀏覽一下,應該沒有問題了。

現在寫乙個css可以這樣:

#example /* moz */

* html #example /* ie6 */

*+html #example /* ie7 */

那麼在firefox下字型顏色顯示為#333,ie6下字型顏色顯示為#666,ie7下字型顏色顯示為#999,他們都互不干擾。

先溫習一下對於ie的box-model的破解

ie box-model這個臭名昭著的bug存在於ie6/win以前的每乙隻版本,這個蟲子直到tantak發布了流傳最為廣泛的那個hack才開始被馴服

ie5.x/win對box-model的解析是一樣的,他們認為width包括了邊框(border)和補白(padding),幸運的是這個情況在ie6中有了好轉

但是ie6在向後相容的同時也包容了以前的錯誤,ie6其實有兩個核心,在舊的頁面前他仍舊表現出對錯誤的寬容,只有在文件中嚴格地加上文件型別(doctype)宣告,ie6才能夠接受正確的box-model

所以,tantak的hack必須和正確的doctype同時包含在文件中才能夠正常工作

quote

div.content /""; 忽略了"/"}/""後的內容

voice-family:inherit;

width:300px; //包括ie6/win在內的部分瀏覽器讀到這句,新的數值(300px)覆蓋掉了舊的

html>body .content 。但是ie7.0把這個bug給修復了,所以問題又出現了,怎麼相容 ie.7.0的同時又能相容ie6.0和firefox?

3. box model的改變

在ie7中,為了適應css2.1 box model修改了溢位的行為。

4. ie7.0中一些css filter將不再可用

ie7中修改了許多潛在解析錯誤,這些可能會阻止filter在以前的ie版本中正常工作。如:*html filter,下劃線filter和/**/注釋filter等等。

5. ie7.0對很多不規範的css不再支援,對js語法要求更嚴格規範。

很多在ie6下正常顯示的js頁面,在ie7下均不能正常顯示,並且還沒有提示錯誤。ie7.0對js語法要求更嚴格規範,只是這個規範似乎並沒有說明,也沒有明白的告訴大家,他們是怎麼「規」怎麼「範」的。

相容IE6 IE7 IE8 FF的CSS寫法

注意 html 對ie7的hack 必須保證html頂部有如下宣告 二 萬能 float 閉合 非常重要 關於 clear float 的原理可參見 how to clear floats without structural markup 將以下 加入global css 中,給需要閉合的div加...

css相容ie寫法

width auto 是寬度自動的意思。9是hack css 的一種寫法,這種在正常css 後面加 9 的方式,只有ie瀏覽器才能識別,其他瀏覽器會忽略這條語句。這樣就能做到差異化瀏覽器,來達到相容瀏覽器的目的。對此,還有其他hack css的寫法。如 color red 一般瀏覽器識別,字型顏色為...

完美相容FF與IE的列表寫法

前幾天朋友一直在搞這個列表的樣式與相容問題,有序列表可能是初學者最煩的問題,做出來總是不哪麼順心,今天我這裡發乙個我的寫法,以下這些在firefox ie7 ie6這三種瀏覽器下都完美相容,沒有一點差距,可以看一下css的寫法.重點是css裡面我標註紅色哪一段,其實就是display block這個...