由于市場上瀏覽器種類眾多,而不同瀏覽器其內(nèi)核亦不盡相同,所以各個瀏覽器對網(wǎng)頁的解析就有一定出入,這也是導(dǎo)致瀏覽器兼容問題出現(xiàn)的主要原因,我們的網(wǎng)頁需要在主流瀏覽器上正常運行,就需要做好瀏覽器兼容。
常見的瀏覽器:
使用Trident內(nèi)核的瀏覽器:IE、Maxthon、TT;
使用Gecko內(nèi)核的瀏覽器:Netcape6及以上版本、FireFox;
使用Presto內(nèi)核的瀏覽器:Opera7及以上版本;
使用Webkit內(nèi)核的瀏覽器:Safari、Chrome
常說的兼容性問題,主要是說IE與幾個主流瀏覽器如firefox,google等。而對IE瀏覽器來說,IE7又是個跨度,因為之前的版本更新甚慢,bug甚多。從IE8開始,IE瀏覽器漸漸遵循標(biāo)準(zhǔn),到IE9后由于大家都一致認(rèn)為標(biāo)準(zhǔn)很重要,可以說在兼容性上比較好了,但是在中國來說,由于xp的占有率問題,使用IE7以下的用戶仍然很多,所以我們不得不考慮低版本瀏覽器的兼容。
對瀏覽器兼容問題,一般分,HTML,Javascript兼容,CSS兼容。 其中html相關(guān)問題比較容易處理,無非是高版本瀏覽器用了低版本瀏覽器無法識別的元素,導(dǎo)致其不能解析,所以平時注意一點就是。特別新的結(jié)束出現(xiàn)帶來高更好開發(fā)效率,但是老版本的適應(yīng)性格就會出現(xiàn)問題.
問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)丁和內(nèi)補(bǔ)丁不同
問題癥狀:隨便寫幾個標(biāo)簽,不加樣式控制的情況下,各自的margin 和padding差異較大。
碰到頻率:100%
解決方案:css里 *{margin:0;padding:0;}
備注:這個是最常見的也是最易解決的一個瀏覽器兼容性問題,幾乎所有的css文件開頭都會用通配符*來設(shè)置各個標(biāo)簽的內(nèi)外補(bǔ)丁是0。
問題二:塊屬性標(biāo)簽float后,又有橫行的margin情況下,在ie6顯示margin比設(shè)置的大
問題癥狀:常見癥狀是ie6中后面的一塊被頂?shù)较乱恍?/p>
碰到頻率:90%(稍微復(fù)雜點的頁面都會碰到,float布局最常見的瀏覽器兼容問題)
解決方案:在float的標(biāo)簽樣式控制中加入 display:inline;將其轉(zhuǎn)化為行內(nèi)屬性
備注:我們最常用的就是div+css布局了,而div就是一個典型的塊屬性標(biāo)簽,橫向布局的時候我們通常都是用div float實現(xiàn)的,橫向的間距設(shè)置如果用margin實現(xiàn),這就是一個必然會碰到的兼容性問題。
問題三:設(shè)置較小高度標(biāo)簽(一般小于10px),在ie6,ie7,遨游中高度超出自己設(shè)置高度
問題癥狀:ie6、7和遨游里這個標(biāo)簽的高度不受控制,超出自己設(shè)置的高度
碰到頻率:60%
解決方案:給超出高度的標(biāo)簽設(shè)置overflow:hidden;或者設(shè)置行高line-height 小于你設(shè)置的高度。
備注:這種情況一般出現(xiàn)在我們設(shè)置小圓角背景的標(biāo)簽里。出現(xiàn)這個問題的原因是ie8之前的瀏覽器都會給標(biāo)簽一個最小默認(rèn)的行高的高度。即使你的標(biāo)簽是空的,這個標(biāo)簽的高度還是會達(dá)到默認(rèn)的行高。
問題四:行內(nèi)屬性標(biāo)簽,設(shè)置display:block后采用float布局,又有橫行的margin的情況,ie6間距bug(類似第二種)
問題癥狀:ie6里的間距比超過設(shè)置的間距
總結(jié):隨著版本以及使用的新技術(shù), 我們盡著最大的解決問題的原則去適應(yīng)一些老的版本, 新舊技術(shù)相沖突的話,也是需要有所舍棄的,我們主要迎合的還是大部分用戶的瀏覽器。