瀏覽器兼容性問題及解決方案(CSS部分)

可畏的前端
可畏的前端

瀏覽器兼容性問題是指因?yàn)椴煌臑g覽器對(duì)同一段CSS代碼或者JS代碼解析不同導(dǎo)致頁面顯示效果不統(tǒng)一或者腳本執(zhí)行錯(cuò)誤的情況。一般情況下,我們希望用戶無論使用什么瀏覽器來查看網(wǎng)頁效果都應(yīng)該是一樣的。瀏覽器的兼容性問題是Web前端開發(fā)人員經(jīng)常會(huì)碰到的和必須要解決的問題。

瀏覽器兼容的部分一般分為CSS部分和JS部分掀亥,JS部分請(qǐng)參考這里

相關(guān)的問題已近在前端界整理的很充分了妥色,大致的問題可總結(jié)如下:

  • 瀏覽器的初始化樣式不同導(dǎo)致兼容性的問題
  • 局部樣式解析不同導(dǎo)致的bug

有些文章把樣式使用技巧也放到兼容性的問題里面搪花,這有失偏頗,關(guān)于常用樣式使用技巧在另一邊文章敘述嘹害,這里不重復(fù)撮竿。

1. 瀏覽器的初始化樣式不同導(dǎo)致兼容性的問題

對(duì)于這個(gè)問題可以一上來就是用*{margin:0;padding:0;},不過這個(gè)代碼的殺傷力有些大笔呀,如果用戶自定義樣式未加載進(jìn)來幢踏,則整個(gè)頁面的布局毫無結(jié)構(gòu)可言。

所以這里出現(xiàn)兩個(gè)瀏覽器默認(rèn)樣式重置庫:Normalize.cssreset.css许师,上面的鏈接是項(xiàng)目的介紹房蝉。

關(guān)于這兩個(gè)庫的對(duì)比介紹也比較詳細(xì),簡(jiǎn)單的說:Normalize 的理念則是盡量保留瀏覽器的默認(rèn)樣式枯跑,不進(jìn)行太多的重置惨驶;而Reset的目的,是將所有的瀏覽器的自帶樣式重置掉敛助,這樣更易于保持各瀏覽器渲染的一致性。

瀏覽器默認(rèn)樣式重置就像是貼墻紙前先上一遍膩?zhàn)訉δㄖ笤儋N屋确。Normalize.css或者Reset.css需要在所有樣式引用前引用纳击。就我個(gè)人而言续扔,使用Normalize.css比較多一些。

2. 局部樣式解析不同導(dǎo)致的bug

其實(shí)焕数,這里主要是IE瀏覽器非IE瀏覽器之間的解析區(qū)別纱昧。如果使用了normalize或者reset后能處理大部分的問題,下面是剩余的部分:

2.1 透明度的兼容CSS設(shè)置

解決方式:

  • IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)堡赔。
  • 非IE:opacity:0.6识脆。

2.2 默認(rèn)的盒子解析模型

標(biāo)準(zhǔn) w3c 盒子模型的范圍包括 margin、border善已、padding灼捂、content,并且 content 部分不包含其他部分换团; IE盒子模型的范圍也包括 margin悉稠、border、padding艘包、content的猛。

和標(biāo)準(zhǔn) w3c 盒子模型不同的是:ie 盒子模型的 content 部分包含了 border 和 pading。

因此想虎,問題主要表現(xiàn)在css中的width是否計(jì)算border和padding的問題卦尊,這個(gè)是默認(rèn)的盒子解析模型不同導(dǎo)致的。

IE6:中包括border和padding(box-sizing: border-box;)
IE7和非IE:width寬度不包括border和padding(box-sizing: content-box;)

解決方式: 根據(jù)使用方式舌厨,寫好box-sizing屬性岂却。

2.3 浮動(dòng)問題

主要表現(xiàn)是子元素使用了浮動(dòng),而父元素沒有撐開盒子邓线,下面是解決的代碼淌友,加載父元素上就好。

解決技巧:

.clearfix:before,
.clearfix:after {
  content: " "; /* 1 */
  display: table; /* 2 */
}

.clearfix:after {
  clear: both;
}

2.4 高度不適應(yīng)

高度不適應(yīng)是當(dāng)內(nèi)層對(duì)象的高度發(fā)生變化時(shí)外層高度不能自動(dòng)進(jìn)行調(diào)節(jié)骇陈,特別是當(dāng)內(nèi)層對(duì)象使用margin 或padding時(shí)震庭。

例如:

#box {background-color:#eee; } 
#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } 
<div id="box">
<p>p對(duì)象中的內(nèi)容</p>
</div>

解決技巧:

  1. 在P對(duì)象上下各加2個(gè)空的div對(duì)象CSS代碼{height:0px;overflow:hidden;}
  2. 或者為DIV加上border屬性

2.5 滾動(dòng)條顏色設(shè)置

IE無法設(shè)置滾動(dòng)條顏色了, 解決辦法是將body換成html

解決技巧:

html { 
    scrollbar-face-color:#f6f6f6; 
    scrollbar-highlight-color:#fff; 
    scrollbar-shadow-color:#eeeeee; 
    scrollbar-3dlight-color:#eeeeee; 
    scrollbar-arrow-color:#000; 
    scrollbar-track-color:#fff; 
    scrollbar-darkshadow-color:#fff; 
} 

2.6 超鏈接訪問過后hover樣式就不出現(xiàn)的問題

被點(diǎn)擊訪問過的超鏈接樣式不在具有hover和active了,很多人應(yīng)該都遇到過這個(gè)問題,解決技巧是改變CSS屬性的排列順序: L-V-H-A

解決技巧:

a:link {} 
a:visited {} 
a:hover {} 
a:active {} 

2.7 條件注釋

在html中加入條件判斷,選擇激活哪些部分

解決技巧:

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

<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]-->

<!--[if lte IE 6]>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->

lte -- 小于等于
lt  -- 小于
gte --  大于等于
gt  --  大于
你雌! --  不等于

2.8 background-attachment:fixed在ios下失效的hack

ios系統(tǒng)和某些移動(dòng)端background-attachment:fixed不兼容性器联,沒有任何效果,但可以hack一下就可以了婿崭,代碼如下:

ps:想在哪個(gè)標(biāo)簽加背景拨拓,可以在它c(diǎn)lass后:before.

body:before {
  content: ' ';
  position: fixed;
  z-index: -1;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background: url(path/to/image) center 0 no-repeat;
  background-size: cover;
}

2.9 Calc使用

瀏覽器支持的不是很好,而且在使用的時(shí)候要加上廠商前綴氓栈,達(dá)到兼容性渣磷。另外,注意減號(hào)之間的空格授瘦。

width: calc(100% - 80px);

#formbox {
  width:  130px;
  /*加廠商前綴醋界,操作符(+竟宋,-,*形纺,/)兩邊要有空格)*/               
  width:  -moz-calc(100% / 6);   
  width:  -webkit-calc(100% / 6);   
  width:  calc(100% / 6);   
  border: 1px solid black;
  padding: 4px;
}

最后

除去以上的總結(jié)丘侠,還有很多是關(guān)于在IE6下的Hack,但是這個(gè)“老古董”在市面上的占有率已近相當(dāng)?shù)土酥鹧硗馕献郑凑沼缮系较碌拈_發(fā)模式(優(yōu)先兼容高級(jí)瀏覽器),IE8及以下的瀏覽器都可不用重點(diǎn)考慮脂新。因此挪捕,關(guān)于樣式兼容性的問題重點(diǎn)放到瀏覽器樣式重置flex布局戏羽、CSS 預(yù)處理器(SCSS/Less)担神、CSS后處理器(Autoprefixer/Postcss/Cssnano)上就可以解決大部分問題。

此外始花,關(guān)于Hack的問題不需要全部記住妄讯,只需要記住大概的問題點(diǎn),在做布局的時(shí)候盡量避免酷宵,遇到問題查問題亥贸。我認(rèn)為這部分問題會(huì)隨著技術(shù)或者瀏覽器的更迭而全部解決,因此不需要放太多精力浇垦。

參考連接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炕置,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子男韧,更是在濱河造成了極大的恐慌朴摊,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件此虑,死亡現(xiàn)場(chǎng)離奇詭異甚纲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)朦前,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門介杆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人韭寸,你說我怎么就攤上這事春哨。” “怎么了恩伺?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赴背,是天一觀的道長。 經(jīng)常有香客問我,道長癞尚,這世上最難降的妖魔是什么耸三? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任乱陡,我火速辦了婚禮浇揩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憨颠。我一直安慰自己胳徽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布爽彤。 她就那樣靜靜地躺著养盗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪适篙。 梳的紋絲不亂的頭發(fā)上往核,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音嚷节,去河邊找鬼聂儒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛硫痰,可吹牛的內(nèi)容都是我干的衩婚。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼效斑,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼非春!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缓屠,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤奇昙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后敌完,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體储耐,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蠢挡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弧岳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡业踏,死狀恐怖禽炬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勤家,我是刑警寧澤腹尖,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站伐脖,受9級(jí)特大地震影響热幔,放射性物質(zhì)發(fā)生泄漏乐设。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一绎巨、第九天 我趴在偏房一處隱蔽的房頂上張望近尚。 院中可真熱鬧,春花似錦场勤、人聲如沸戈锻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽格遭。三九已至嘴高,卻和暖如春涮因,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卸察。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工她倘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留璧微,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓帝牡,卻偏偏與公主長得像往毡,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靶溜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案开瞭? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • 一瓷炮、問題 (一)葱色、如何調(diào)試 IE 瀏覽器 1、對(duì)于IE7及以下版本可采用IETester(不能測(cè)腳本娘香,模擬出來的I...
    該帳號(hào)已被查封_才怪閱讀 1,374評(píng)論 0 8
  • 1.如何調(diào)試 IE 瀏覽器 IE7以上(包括Edge)自帶開發(fā)者工具苍狰。Edge: 安裝虛擬機(jī),安裝各種不同版本的I...
    26d608950683閱讀 1,618評(píng)論 0 5
  • 一烘绽、如何調(diào)試 IE 瀏覽器 IE7以上版本自帶的開發(fā)者工具淋昭,IE6可以用border的方法;例:IE11的開發(fā)者工...
    __Qiao閱讀 1,125評(píng)論 2 17
  • 神是祝福的神安接,每天神的祝福與恩典都不斷翔忽,神的恩典與祝福多多,神是應(yīng)當(dāng)稱頌的,他的慈愛永遠(yuǎn)長存歇式,今天晨禱特別看到約瑟...
    恩寵爸爸閱讀 562評(píng)論 0 0