PC端瀏覽器兼容淺談

代碼兼容:IE7及以上,360璃弄,chrome要销,firefox,opera夏块,搜狗

1. 什么是瀏覽器兼容問(wèn)題:

由于不同瀏覽器的內(nèi)核不同疏咐,同一瀏覽器的不同版本對(duì)CSS的支持及解析結(jié)果不一樣,因此渲染的效果也不相同脐供。

2. 需注意的問(wèn)題

  • 寫(xiě)好標(biāo)準(zhǔn)頭: <!DOCTYPE html>
  • 首先引入初始化css浑塞,保證消除不同瀏覽器默認(rèn)樣式
  • PC端H5新標(biāo)簽盡量不用,比如header政己,footer酌壕,nav等
  • 不使用css選擇器nth-of-type
  • jquery只有1.x版本兼容ie678,目前官方只做bug維護(hù)歇由,不再增加新功能卵牍,最終版本是jquery1.12.4

3. 解決方式

1). 讓低版本兼容h5標(biāo)簽引入html5shiv.js,讓低版本兼容媒體查詢引入respond.js

實(shí)現(xiàn)方式:

 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
 <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
 <!--[if lt IE 9]>
 <script src="scripts/respond/html5shiv.min.js"></script>
 <script src="scripts/respond/respond.min.js"></script>
 <![endif]-->
2). 讓低版本兼容css3的box-sizing標(biāo)簽引入boxsizing.htc

只需在css代碼box-sizing標(biāo)簽下邊引入文件的當(dāng)前路徑即可

 box-sizing: border-box;
 *behavior: url(./scripts/box-sizing-polyfill/boxsizing.htc);
3). 讓低版本ie8兼容border-radius標(biāo)簽引入ie-css3.htc

ie-css3.htc下載

-moz-border-radius: 1px;
-webkit-border-radius: 1px;
border-radius: 1px;
behavior: url(./scripts/ie-css3.htc/ie-css3.htc);
4). 低版本瀏覽器點(diǎn)擊事件不兼容處理方法沦泌,及addEventListener attachEvent解決IE 6 7 8 this指向錯(cuò)誤問(wèn)題

在IE678中糊昙,使用attachEvent或detachEvent后事件處事函數(shù)里this指向window對(duì)象,而addEventListener或removeEventListener中this指向事件對(duì)象元素

var oBtn = $(".groupTitle");
/*兼容寫(xiě)法*/
EventListen = {
    addEvent: function(str, fn, ele) {
        if (ele.addEventListener) {
            ele.addEventListener(str, fn);      //火狐谷歌IE9+支持addEventListener
        } else if (ele.attachEvent) {
            ele.attachEvent("on" + str, fn);       //IE678支持attachEvent
        } else {
            ele["on" + str] = fn;
        }
    }
};
for (var i = 0; i < oBtn.length; i++) {
    EventListen.addEvent("click", funShow, oBtn[i]);
}

function funShow(e) {
    //事件處理函數(shù)中this指window,使用事件源代替this關(guān)鍵字
    e = e || window.event;
    var _this = e.srcElement || e.target;
    $(_this).next().slideToggle().parent("li").siblings("li").children("div").hide();
};
5). CSS hack方式

CSS hack簡(jiǎn)單講是指各版本瀏覽器對(duì)CSS解析后出現(xiàn)網(wǎng)頁(yè)內(nèi)容誤差的處理谢谦。它通過(guò)在CSS樣式中加入一些特殊符號(hào)释牺,讓不同瀏覽器識(shí)別不同符號(hào)(不同瀏覽器識(shí)別什么樣的符號(hào)是有標(biāo)準(zhǔn)的萝衩,CSS hack就是讓你記住這個(gè)標(biāo)準(zhǔn)),以達(dá)到應(yīng)用不同CSS樣式的目的船侧。


從上圖可分析出以下幾種情況:

  • 大部分特殊字符IE瀏覽器支持,其他主流瀏覽器firefox厅各、chrome镜撩、opera、safari不支持(opera可識(shí)別除外)
  • \9:所有IE瀏覽器都支持
  • \0:IE8队塘、IE9支持袁梗,opera部分支持
  • \9\0:IE8部分支持、IE9支持
  • \0\9:IE8憔古、IE9支持
  • *:IE6遮怜、IE7支持
  • _和-:僅IE6支持
css Hack表現(xiàn)形式
(1).CSS屬性前綴法
  • Trident內(nèi)核:主要代表為IE瀏覽器,前綴為-ms
  • Gecko內(nèi)核:主要代表為Firefox鸿市,前綴為-moz
  • Presto內(nèi)核:主要代表為Opera锯梁,前綴為-o
  • Webkit內(nèi)核:產(chǎn)要代表為Chrome和Safari,前綴為-webkit
(2).選擇器前綴法

針對(duì)一些頁(yè)面表現(xiàn)不一致或需特殊對(duì)待的瀏覽器焰情,在CSS選擇器前加一些只有某些特定瀏覽器才能識(shí)別的前綴進(jìn)行hack陌凳。


(3).IE條件注釋法
注:IE10+已不再支持注釋,這類hack不僅對(duì)css生效内舟,對(duì)寫(xiě)在判斷語(yǔ)句里的所有代碼都生效                                                                                                                   
各種css Hack情況介紹
(1).區(qū)別IE和非IE瀏覽器
.tip{                                                                               
background:blue;     //非IE背景藍(lán)色  因?yàn)樗袨g覽器都能解釋
background:red\9;   //IE6789背景紅色合敦,因?yàn)閈9在IE6789中可識(shí)別,覆蓋上面樣式 IE10跟11應(yīng)該不識(shí)別验游,IE11測(cè)試確定                            
}
(2).區(qū)別IE6充岛、7、8耕蝉、Firefox
.tip{                                                                         
background:blue;       //Firefox背景變藍(lán)色 所有瀏覽器都支持
background:red\9;      // IE8背景變紅色 IE6崔梗、7、8垒在、9支持覆蓋上面樣式 
*background:black;      // IE7背景變黑色 IE6炒俱、7支持又一次覆蓋上面樣式    
_background:orange;  //IE6背景變橘色 IE6支持又一次覆蓋上面樣式 
}      

【說(shuō)明】:IE7可辨識(shí)「」和「!important」,但I(xiàn)E6只可辨識(shí)「」爪膊,至于Firefox可以讀取「!important」但不能辨識(shí)「*」因此可透過(guò)這樣的差異來(lái)有效區(qū)隔IE6权悟、7、Firefox推盛。

(3).區(qū)分IE6峦阁、7、8耘成、9 (“:root”偽類IE只有IE9支持榔昔,其他主流瀏覽器均支持驹闰,opera部分支持**)
element{                                                                                          
color: #999\9\0;            //IE9專用                                                        
color: #999\9;            //IE6 7 8 9共用                                                 
color: #666\0;          //IE8、9共用                                                     
*color: #999;           //IE6撒会、7共用                                                    
*+color: #999;          //IE7專用                                                         
_color: #999;         //IE6專用                                                                     
 }                                                                                                              
:root element{ color: #666\9; }    //IE9

建議:實(shí)際開(kāi)發(fā)事先如果不是很清楚可以先寫(xiě)布局代碼嘹朗,寫(xiě)一個(gè)階段用瀏覽器測(cè)試工具(常用工具推薦IETEST)測(cè)試各個(gè)版本瀏覽器的布局效果,如有問(wèn)題針對(duì)有問(wèn)題的瀏覽器單獨(dú)調(diào)試诵肛。

css Hack弊病

一般情況下屹培,盡量避免使用CSS hack,但有些情況為顧及用戶體驗(yàn)實(shí)現(xiàn)向下兼容怔檩,不得已才使用hack褪秀。比如由于IE8及以下版本不支持CSS3,而我們的項(xiàng)目頁(yè)面使用大量CSS3新屬性薛训。在IE9/Firefox/Chrome下正常渲染媒吗,這種情況下如果不使用css3pie或htc或條件注釋等方法,可能就得讓IE8-的專屬hack出馬了乙埃。使用hack雖然對(duì)頁(yè)面表現(xiàn)的一致性有好處闸英,但過(guò)多的濫用會(huì)造成html文檔混亂不堪,增加管理和維護(hù)的負(fù)擔(dān)介袜。

常見(jiàn)問(wèn)題
  1. 背景透明問(wèn)題

     IE: filter: alpha(opacity=10);                                                      
     FF: -moz-opacity:0.10;                    
     .box{filter:alpha(opacity=50);-moz-opacity:0.5; opacity:0.5;}
    
  2. 圖片默認(rèn)有間距

     問(wèn)題癥狀:
     幾個(gè)img標(biāo)簽放一起時(shí)自阱,有些瀏覽器會(huì)有默認(rèn)間距,加通配符也不起作用米酬。                  
     解決方案:使用float屬性為img布局                           
    
  3. IE浮動(dòng) margin產(chǎn)生雙邊距

    .box {                                                                                           
    float:left;                                                                                  
    width:100px;                                                                                 
    margin:0 0 0 100px;          //這種情況之下IE會(huì)產(chǎn)生200px距離
    display:inline;      //使浮動(dòng)忽略                                                            
    }
    
  4. Margin不一致問(wèn)題:
    當(dāng)有多張圖片需排在一行時(shí)沛豌,通常使用“Float:Left”來(lái)實(shí)現(xiàn),這樣一來(lái)赃额,瀏覽器就存在兼容性問(wèn)題加派。導(dǎo)致圖片與后面的內(nèi)容存在margin不一致問(wèn)題。對(duì)此解決方法就是給圖片添加“Display:inline”項(xiàng)即可跳芳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芍锦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子飞盆,更是在濱河造成了極大的恐慌娄琉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吓歇,死亡現(xiàn)場(chǎng)離奇詭異孽水,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)城看,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)女气,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人测柠,你說(shuō)我怎么就攤上這事炼鞠≡道模” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵谒主,是天一觀的道長(zhǎng)朝扼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)霎肯,這世上最難降的妖魔是什么擎颖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮姿现,結(jié)果婚禮上肠仪,老公的妹妹穿的比我還像新娘肖抱。我一直安慰自己备典,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布意述。 她就那樣靜靜地躺著提佣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荤崇。 梳的紋絲不亂的頭發(fā)上拌屏,一...
    開(kāi)封第一講書(shū)人閱讀 48,954評(píng)論 1 283
  • 那天,我揣著相機(jī)與錄音术荤,去河邊找鬼倚喂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瓣戚,可吹牛的內(nèi)容都是我干的端圈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼子库,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舱权!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起仑嗅,我...
    開(kāi)封第一講書(shū)人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宴倍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后仓技,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鸵贬,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年脖捻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恭理。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡郭变,死狀恐怖颜价,靈堂內(nèi)的尸體忽然破棺而出涯保,到底是詐尸還是另有隱情,我是刑警寧澤周伦,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布夕春,位于F島的核電站,受9級(jí)特大地震影響专挪,放射性物質(zhì)發(fā)生泄漏及志。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一寨腔、第九天 我趴在偏房一處隱蔽的房頂上張望速侈。 院中可真熱鬧,春花似錦迫卢、人聲如沸倚搬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)每界。三九已至,卻和暖如春家卖,著一層夾襖步出監(jiān)牢的瞬間眨层,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工上荡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趴樱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓酪捡,卻偏偏與公主長(zhǎng)得像叁征,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沛善,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 做前端多年航揉,雖然不是經(jīng)常需要hack,但是我們經(jīng)常會(huì)遇到各瀏覽器表現(xiàn)不一致的情況金刁∷浚基于此,某些情況我們會(huì)極不情愿的...
    大女表哥閱讀 1,088評(píng)論 0 9
  • 一尤蛮、如何調(diào)試 IE 瀏覽器 IE7以上版本自帶的開(kāi)發(fā)者工具媳友,IE6可以用border的方法;例:IE11的開(kāi)發(fā)者工...
    __Qiao閱讀 1,121評(píng)論 2 17
  • 一产捞、問(wèn)答部分 1. 如何調(diào)試 IE 瀏覽器 IE7及以上版本有調(diào)試臺(tái)醇锚,可以按F12啟動(dòng)。Paste_Image.p...
    _hello__world_閱讀 457評(píng)論 0 1
  • CSS Hack 不同的瀏覽器對(duì)某些CSS代碼解析會(huì)存在一定的差異,因此就會(huì)導(dǎo)致不同瀏覽器下給用戶展示的頁(yè)面效果不...
    zx9426閱讀 378評(píng)論 0 0
  • 是的,最近很忙赶促,忙得跟頭絆子液肌,可是我還不想放棄。那么鸥滨,問(wèn)題來(lái)了嗦哆,持續(xù)了七個(gè)月的運(yùn)動(dòng),為什么放棄了婿滓?為什么暫停了老速?難...
    行動(dòng)就是生產(chǎn)力閱讀 199評(píng)論 0 5