CSS 在不同瀏覽器的兼容性問題大集合

CSS

在不同瀏覽器的兼容性問題

 

一、

 

爲什麼會出現兼容性問題

 

所謂的瀏覽器兼容性問題,

是指因爲不同的瀏覽器對同一段代碼有不同的解析,

造成頁

面顯示效果不統一的情況。

在大多數情況下,

用戶用什麼瀏覽器來查看同一網站,

都應該是

統一的顯示效果。所以瀏覽器的兼容性問題是前端開發人員經常會碰到和必須要解決的問

題。

 

瀏覽器兼容問題一

:不同瀏覽器的標籤默認的外邊框和內邊框不同

 

 

問題症狀:

 

隨便寫幾個標籤,不加樣式控制的情況下,各自的

margin 

padding

差異

較大。

 

碰到頻率

: 100% 

解決方案:

 

css

 

 

 

 

*{margin:0;padding:0;} 

備註:

 

這個是最常見的也是最易解決的一個瀏覽器兼容性問題,幾乎所有的

css

文件

開頭都會用通配符

*

來設置各個標籤的內外邊框是

0

 

 

瀏覽器兼容問題二

塊屬性標籤

float

後,

又有橫行的

margin

情況下,

IE6

顯示

margin

比設置的大

 

 

問題症狀

常見症狀是

IE6

中後面的一塊被頂到下一行

 

碰到頻率:

 

90%

(稍微複雜點的頁面都會碰到,

float

佈局最常見的瀏覽器兼容問題)

 

解決方案:

 

float

的標籤樣式控制中加入

 

display:inline;

將其轉化爲行內屬性

 

備註:

 

我們最常用的就是

div+css

佈局了,而

div

就是一個典型的塊屬性標籤,橫向布

局的時候我們通常都是用

div 

float

實現的,橫向的間距設置如果用

margin

實現,這就是一

個必然會碰到的兼容性問題。

 

 

瀏覽器兼容問題三

:設置較小高度標籤(一般小於

10px

,在

IE6

IE7

,遨遊中高度超

出自己設置高度

 

 

問題症狀:

 

IE6

7

和遨遊裏這個標籤的高度不受控制,超出自己設置的高度

 

碰到頻率:

 

60% 

解決方案:

 

給超出高度的標籤設置

overflow:hidden;

或者設置行高

line-height 

小於你設

置的高度。

 

備註:

 

這種情況一般出現在我們設置小圓角背景的標籤裏。

出現這個問題的原因是

IE8

之前的瀏覽器都會給標籤一個最小默認的行高的高度。

即使你的標籤是空的,

這個標籤的高

度還是會達到默認的行高。

 

 

瀏覽器兼容問題四

:行內屬性標籤,設置

display:block

後採用

float

佈局,又有橫行的

margin

的情況,

IE6

間距

bug

(類似第二種)

 

 

問題症狀:

 

IE6

裏的間距比超過設置的間距

 

碰到機率:

 

20% 

解決方案:

 

display:block;

後面加入

display:inline;display:table; 

備註:

 

行內屬性標籤,爲了設置寬高,我們需要設置

display:block;(

除了

 

input

標籤比

較特殊

)

。在用

float

佈局並有橫向的

margin

後,在

IE6

下,他就具有了塊屬性

float

後的橫

margin

bug

。不過因爲它本身就是行內屬性標籤,所以我們再加上

display:inline

的話,

它的高寬就不可設了。這時候我們還需要在

display:inline

後面加入

display:talbe

 

 

瀏覽器兼容問題五

:圖片默認有間距

 

 

問題症狀:

 

幾個

img

標籤放在一起的時候,有些瀏覽器會有默認的間距,加了問題一

中提到的通配符也不起作用。

 

碰到機率

 

20% 

解決方案:

 

使用

float

屬性爲

img

佈局

 

備註:

 

因爲

img

標籤是行內屬性標籤,所以只要不超出容器寬度,

img

標籤都會排在

一行裏,但是部分瀏覽器的

img

標籤之間會有個間距。去掉這個間距使用

float

是正道。

(使

用負

margin

,雖然能解決,但負

margin 

本身就是容易引起瀏覽器兼容問題的用法,所以不

建議使用)

 

 

瀏覽器兼容問題六

:標籤最低高度設置

min-height

不兼容

 

 

問題症狀:

 

因爲

min-height

本身就是一個不兼容的

css

屬性,

所以設置

min-height

時不

能很好的被各個瀏覽器兼容

 

 

碰到機率

 

5% 

解決方案:

 

如果我們要設置一個標籤的最小高度

200px

,需要進行的設置爲:

{min-height:200px; height:auto !important; height:200px; overflow:visible;} 

備註:

 

B/S

系統前端開時,

 

有很多情況下我們又這種需求。

當內容小於一個值(如

300px

)時。容器的高度爲

300px

;當內容高度大於這個值時,容器高度被撐高,而不是出

現滾動條。這時候我們就會面臨這個兼容性問題。

 

 

 

二、

 

如何應對兼容性問題

 

做兼容頁面的方法是:

每寫一小段代碼

(佈局中的一行或者一塊)

我們都要在不同的瀏

覽器中看是否兼容,

當然熟練到一定的程度就沒這麼麻煩了。

建議經常會碰到兼容性問題的

新手使用。

很多兼容性問題都是因爲瀏覽器對標籤的默認屬性解析不同造成的,

只要我們稍

加設置都能輕鬆地解決這些兼容問題。

如果我們熟悉標籤的默認屬性的話,

就能很好的理解

爲什麼會出現兼容問題以及怎麼去解決這些兼容問題

 

 

1.

 

 

css hack

技術

 

 

css hack 

技術是通過一些瀏覽器特殊支持或者不支持的語句,確定一個

css

樣式能給被

瀏覽器解析或者不能被瀏覽器解析。

css 

 

hack

技術針對不同瀏覽器的差異進行利用和設計,

使用它可以在最大限度的讓所以的瀏覽器下顯示同樣的風格和模式。

 

css hack 

技術是一種改善

CSS

在不同瀏覽器下的表現形式的技巧與方法。

 

CSS hack

術是通過一些瀏覽器特殊或者不支持的語句,使一個

CSS

樣式能夠被瀏覽器解析或者不能

解析的方法實現的。

 

CSS 

Hack

的原理只有兩條:

兼容性

順序

。就是利用書寫順序和不同瀏覽器對一些特

定書寫方法的解析方式不同而達到不同的效果。不管是什麼方法,書寫的順序都是

firefox

的寫在前面,

IE7

的寫在中間,

IE6

的寫在最後面。

(其順序正好是對

CSS2.0

標準執行的好

壞程度)

 

可把瀏覽器分爲

3

類:

IE6 

IE7

和遨遊;其他(

IE8 chrome ff safari opera

等)

IE6

識的

hacker 

是下劃線

和星號

 

*

IE7

和遨遊只認識的

hacker

是星號

 

;而其他瀏覽器下

劃線

_

和星號

*

都不認識。

 

比如有這樣一個

css

樣式設置

 

 

#exam{

height:300px; 

*height:200px; 

_height:100px;

 } 

IE6

瀏覽器在讀到

 

height:300px

的時候會認爲高度是

300px

;繼續往下讀,他也認識

*heihgt

,所以當

IE6

讀到

*height:200px

的時候會覆蓋掉前一條的相沖突設置,認爲高度是

200px

。繼續往下讀,

IE6

還認識

_height

,所以他又會覆蓋掉

200px

高的設置,把高度設置

100px

IE7

和遨遊也是一樣的從高度

300px

的設置往下讀。當它們讀到

*height200px

時候就停下了,因爲它們不認識

_height

。所以它們會把高度解析爲

200px

;剩下的瀏覽器只

認識第一個

height:300px;

所以他們會把高度解析爲

300px

。因爲優先級相同且相沖突的屬性

設置後一個會覆蓋掉前一個,所以書寫的次序是很重要的。

 

DIV

CSS

網頁佈局這是一種趨勢,

不過在使用

DIV

CSS

網站設計的時候,

應該注意

css

樣式兼容不同瀏覽器問題,

特別是對完全使用

DIV+CSS

設計的網頁,

就應該更注意

IE6

 

IE7 

FF

CSS

樣式的兼容。

 

什麼是瀏覽器兼容:當我們使用不同的瀏覽器(

Firefox

IE7

IE6

)訪問同一個網站,

或者頁面的時候,

會出現一些不兼容的問題,

在這種瀏覽器下顯示正常,

在另一種下就亂了,

目前解決這個瀏覽器的問題,最直接的方法就是利用

CSS 

hack

技術爲每個瀏覽器各寫一段

css

讓它們各執行各的,

這就是

CSS hack

技術解決

CSS

在不同瀏覽器中的兼容性問題的核

心。

 

 

2.

 

!important 

 

!important

是被

Firefox

瀏覽器所支持的一種用於確定優先級的技術。

隨着

IE7

!important

的支持,

 

!important 

方法現在只針對

IE6

的兼容性問題。注意:

!important

算是

hack

的一種。不過實用性較小。

 

例如

#example { 

 

width: 100px !important; /* IE7+FF */ 

 

width: 200px; /* IE6 */ 

 

 

三、

 

CSS HACK

的常用方法

 

首先需要知道的是:

 

所有瀏覽器

 

通用

 

height: 100px; 

 

IE6 

專用

 

_height: 100px; 

 

IE7 

專用

 

*+height: 100px; 

IE6

IE7 

共用

 

*height: 100px; 

IE7

FF 

共用

 

height: 100px !important; 

 

 

例如:

 

 

#example { height:100px; } /* FF */ 

* html #example { height:200px; } /* IE6 */ 

*+html #example { height:300px; } /* IE7 */ 

/*

注意:這個範例中區別符號在樣式名前面,並且加了

html*/ 

 

下面的這種方法比較簡單

 

舉幾個例子:

 

1

IE6 - IE7+FF

-

爲區別,

+

爲共同)

 

#example { 

 

height:100px; /* FF+IE7 */ 

_height:200px; /* IE6 */ 

其實這個用上面說的第一種方法也可以

 

#example { 

 

height:100px !important; /* FF+IE7 */ 

height:200px; /* IE6 */ 

 

2

IE6+IE7 - FF 

#example { 

 

height:100px; /* FF */ 

*height:200px; /* IE6+IE7 

 

 

IE7

的後一次應用將第一次覆蓋了

*/ 

 

3

IE6+FF - IE7 

#example { 

 

height:100px; /* IE6+FF 

 

但兩者效果可能不同

*/ 

*+height:200px; /* IE7 */ 

 

4

IE6 IE7 FF 

各不相同

 

 

 

 

 

 

 

 

#example { 

 

height:100px; /* FF */ 

_height:200px; /* IE6 */ 

*+height:300px; /* IE7 */ 

或:

 

#example { 

 

height:100px; /* FF */ 

*height:300px; /* IE7 */ 

_height:200px; /* IE6 */ 

 

需要注意的是,代碼的順序一定不能顛倒了,要不又前功盡棄了。因爲瀏覽器在解釋

程序的時候,如果重名的話,會用後面的覆蓋前面的,就象給變量賦值一個道理,所以我

們把通用的放前面,越專用的越放後面。

 

 

解釋一下

4

的代碼:讀代碼的時候,第一行

height:100px; 

大家都通用,

IE6 

IE7 

FF 

顯示

100px

。到了第二行

*height:300px; FF

不認識這個屬性,

IE6 IE7

都認,所以

FF

還顯示

100px

,而

IE6 

IE7

把第一行得到的

height

屬性給覆蓋了,都顯示

300px

。到了第三行

_height:200px;

只有

IE6

認識,

所以

IE6

就又覆蓋了在第二行得到的

height

最終顯示

200px

這樣,三個瀏覽器都有自己的

height

屬性了。

 

 

需要說明的是:

*+html 

IE7

的兼容

 

必須保證

HTML

頂部有如下聲明:

 

 

<!DOCTYPE 

HTML 

PUBLIC 

"-//W3C//DTD 

HTML 

4.01 

Transitional//EN"

 

http://www.w3.org/TR/html4/loose.dtd "> 

 

 

 

四、

 

使用

IE

專用的條件註釋

 

條件註釋是

IE

特有的一種功能,能對

IE

系列產品進行單獨的

XHTML

代碼處理,注意,主要

是針對

XHTML,

而非

CSS

 

條件註釋能被

IE

判斷是什麼版本的瀏覽器,

並在符合條件的情況下顯示其中的內容,

IE5.0

7.0

都支持註釋功能,而且版本號精確到小數點後

4

位。

 

如:

<!--[if IE 6.0]>

此內容只有

IE6.0

可見

<![endif]-->

 

 

IE

條件註釋還支持感嘆號非操作:

 

如:

<!--[if !IE 6.0]>

此內容除了

IE6.0

版本之外都可見

<![endif]--> 

 

<!--

其他瀏覽器

 

--> 

<link rel="stylesheet" type="text/css" href="css.css" /> 

<!--[if IE 7]> 

<!-- 

適合於

IE7 --> 

<link rel="stylesheet" type="text/css" href="IE7.css" /> 

<![endif]--> 

<!--[if lte IE 6]> 

<!-- 

適合於

IE6

及以下

 

--> 

<link rel="stylesheet" type="text/css" href="IE.css" /> 

<![endif]--> 

 

IE

if

條件

Hack 

 

 

1. <!--[if 

 

!IE]><!--> 

IE

外都可識別

 

<!--<![endif]--> 

2. <!--[if 

 

IE]> 

所有的

IE

可識別

 

<![endif]--> 

3. <!--[if 

 

IE 5.0]> 

只有

IE5.0

可以識別

 

<![endif]--> 

4. <!--[if 

 

IE 5]> 

IE5.0

IE5.5

可以識別

 

<![endif]--> 

5. <!--[if 

 

gt 

 

IE 5.0]> IE5.0

以上版本都可以識別

 

<![endif]--> 

6. <!--[if 

 

IE 6]> 

IE6

可識別

 

<![endif]--> 

7. <!--[if 

 

lt 

 

IE 6]> IE6

以及

IE6

以下版本可識別

 

<![endif]--> 

8. <!--[if 

 

gte 

 

IE 6]> IE6

以及

IE6

以上版本可識別

 

<![endif]--> 

9. <!--[if 

 

IE 7]> 

IE7

可識別

 

<![endif]--> 

10. <!--[if 

 

lt 

 

IE 7]> IE7

以及

IE7

以下版本可識別

 

<![endif]--> 

11. <!--[if 

 

gte 

 

IE 7]> IE7

以及

IE7

以上版本可識別

 

<![endif]--> 

 

 

gt = Great Then 

大於

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章