10. 瀏覽器兼容

CSS hack

由于不同廠商的流覽器或某瀏覽器的不同版本對CSS的支持、解析不一樣,導致在不同瀏覽器的環(huán)境中呈現出不一致的頁面展現效果累铅。這時糕非,我們?yōu)榱双@得統一的頁面效果蒙具,就需要針對不同的瀏覽器或不同版本寫特定的CSS樣式球榆,我們把這個針對不同的瀏覽器/不同版本寫相應的CSS code的過程,叫做CSS hack禁筏。

瀏覽器兼容的思路

  • 要不要做
  • 產品的角度(產品受眾持钉、受眾的瀏覽器比例,效果優(yōu)先還是基本功能優(yōu)先等)
  • 成本的角度(有無必要去實現某個需求)
  • 做到什么程度
    ——讓瀏覽器支持哪些效果
  • 該怎么做
  • 根據兼容需求選擇技術框架/庫(jQuery)
  • 根據兼容需求選擇兼容工具(html5shiv.js篱昔、respond.js每强、css reset、normalize.css州刽、Modernizr)
  • post CSS(自動根據瀏覽器加前綴)
  • 條件注釋空执、CSS Hack、JS能力檢測 做一些修補

漸進增強和優(yōu)雅降級

  • 漸進增強(progressive enhancement):針對低版本瀏覽器進行構建頁面怀伦,保證最基本的功能脆烟,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗房待。
  • 優(yōu)雅降級(graceful degradation):一開始就構建完整的功能邢羔,然后再針對低版本瀏覽器進行兼容。

瀏覽器兼容的寫法

  • 合適的框架
框架 支持版本
Bootstrap ≥ IE8
jQuery 1._ ≥IE6
jQuery 2._ ≥IE9
Vue ≥IE9
  • 條件注釋
    條件注釋(conditional comment)是于HTML源碼中被IE有條件解釋的語句桑孩“莺祝可被用來向IE提供及隱藏代碼。
    使用了條件注釋的頁面在IE9中可正常工作流椒,但在IE10中就不行了敏簿。IE10不再支持條件注釋。
項目 支持版本 說明
! [if !IE] 非IE
lt [if lt IE5.5] (less than)小于IE5.5
lte [if lte IE6] (less than or equal)小于等于IE6
gt [if gt IE5] (great than)大于IE5
gte [if gte IE7 (great than or equal)大于等于IE7
豎線 [if (IE6)豎線(IE7)] IE6或IE7

PS:“非IE”的注釋比較特殊一些

<!-- [if !IE]><!-- >_____________<!-- <![end if]-->
  • 屬性前綴(即內部Hack)
    IE6能識別 _ 和 *
    IE7能識別 *
    IE6~IE10都能認 " \q "
    但是以上宣虾,FireFox都不認識惯裕。

  • 選擇器前綴
    比如IE6能識別html .class{ },IE7能識別+html .class{ }或者 *:first-child+html .class{ }绣硝。

  • 合適的工具

  • html5shiv.js

  • respond.js

  • css reset

  • normalize.css

  • Modernizr

一些常見的屬性和寫法

  • 常見寫法
.box {
  color: red;
  _color: blue; /* IE6 */
  *color: pink; /* IE6蜻势、7 */
  color: yellow\9; /* IE/Edge 6-8 */
}
  <!-- [if IE7] >
  <link rel="stylesheet" href="IE7.css" type="text/css" />
  <!-- [end if] -->
  • 常見屬性
屬性 兼容情況
inline-block ≥IE8
min-width / min-height ≥IE8
:before / :after ≥IE8
div:hover ≥IE7
background-size ≥IE9
圓角 ≥IE9
陰影 ≥IE9
動畫 / 漸變 IE10

名詞(工具)解釋

  • 條件注釋
    這是基于HTML源碼中被IE(IE≥9)有條件解釋的語句。條件注釋可被用來向IE提供及隱藏代碼鹉胖。
  • IE Hack
    針對IE瀏覽器編寫不同的CSS(屬性前綴法握玛、選擇器前綴法、IE條件注釋法)使得頁面效果在不同版本的IE瀏覽器中達到效果一致甫菠。
  • js 能力檢測
    瀏覽器的能力檢測目標不是檢測特定的瀏覽器挠铲,而是檢測瀏覽器的能力。這樣寂诱,只需要檢測瀏覽器是否支持特定的能力拂苹,就可以給出特定的解決方案。
  • 優(yōu)先檢測達到目的最常用的特性
  • 檢測實際用到的屬性
  • html5shiv.js
    針對不支持HTML5標簽的瀏覽器痰洒,創(chuàng)建并模擬HTML5的標簽的效果并使相應的CSS生效醋寝。
  • respond.js
    讓 IE6-8 也能實現 CSS3 中的 Media Query(媒體查詢)功能搞挣,實現響應式設計。
  • CSS Reset
  • CSS Reset 簡單地說就是重置瀏覽器的 CSS 默認屬性音羞。
  • 因為瀏覽器的品種很多囱桨,每個瀏覽器的默認樣式也是不同的,比如 標簽嗅绰,在 IE 瀏覽器舍肠、Firefox 瀏覽器以及 Safari 瀏覽器中的樣式都是不同的,所以窘面,通過重置 button 標簽的 CSS 屬性翠语,然后再將它統一定義,就可以產生相同的顯示效果财边。
  • CSS Reset 內容方法不同肌括,但功能大同小異,都是起到重置的作用酣难,所以說 CSS Reset 是根據個人需求不同可以按需自定義的
  • Normalize.css
    一個很小的CSS文件谍夭,讓不同瀏覽器在渲染瀏覽器時形式更加統一,但它在默認的HTML元素樣式上提供了跨瀏覽器的高度一致性憨募。是一種CSS reset的替代方案紧索。
  • 保護有用的瀏覽器默認樣式:而不是完全去掉它們
  • 一般化的樣式:為大部分HTML元素提供
  • 修復瀏覽器自身的bug:并保證各瀏覽器的一致性
  • 優(yōu)化CSS可用性:用一些小技巧
  • 解釋代碼:注釋和詳細的文檔
  • Modernizr
    Modernizr 使你可以方便地為各種情況編寫 JavaScript 和 CSS,無論瀏覽器是否支持這些特性菜谣。這是處理漸進增強的完美方案珠漂。
    Modernizr 會在頁面加載后立即檢測特性;然后創(chuàng)建一個包含檢測結果的 JavaScript 對象尾膊,同時在 html 元素加入方便你調整 CSS 的 class 名媳危。
  • PostCSS
    PostCSS是一個使用 JavaScript 插件來轉換CSS的工具,通過PostCSS這個平臺冈敛,我們自己也能夠開發(fā)一些插件济舆,來處理CSS。

相關查詢

瀏覽器市場份額
查詢CSS屬性兼容
查詢Hack的寫法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末莺债,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子签夭,更是在濱河造成了極大的恐慌齐邦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件第租,死亡現場離奇詭異措拇,居然都是意外死亡,警方通過查閱死者的電腦和手機慎宾,發(fā)現死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門丐吓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浅悉,“玉大人,你說我怎么就攤上這事券犁∈踅。” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵粘衬,是天一觀的道長荞估。 經常有香客問我,道長稚新,這世上最難降的妖魔是什么勘伺? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮褂删,結果婚禮上飞醉,老公的妹妹穿的比我還像新娘。我一直安慰自己屯阀,他們只是感情好缅帘,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹲盘,像睡著了一般股毫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上召衔,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天铃诬,我揣著相機與錄音,去河邊找鬼苍凛。 笑死趣席,一個胖子當著我的面吹牛,可吹牛的內容都是我干的醇蝴。 我是一名探鬼主播宣肚,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悠栓!你這毒婦竟也來了霉涨?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惭适,失蹤者是張志新(化名)和其女友劉穎笙瑟,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體癞志,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡往枷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错洁。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡秉宿,死狀恐怖,靈堂內的尸體忽然破棺而出屯碴,到底是詐尸還是另有隱情描睦,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布窿锉,位于F島的核電站酌摇,受9級特大地震影響,放射性物質發(fā)生泄漏嗡载。R本人自食惡果不足惜窑多,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洼滚。 院中可真熱鬧埂息,春花似錦、人聲如沸遥巴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铲掐。三九已至拾弃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摆霉,已是汗流浹背豪椿。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留携栋,地道東北人搭盾。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像婉支,于是被迫代替她去往敵國和親鸯隅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案向挖? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,754評論 1 92
  • 什么是 CSS hack CSS hack是通過在CSS樣式中加入一些特殊的符號蝌以,讓不同的瀏覽器識別不同的符號(什...
    怎么昵稱閱讀 387評論 0 1
  • 做前端多年,雖然不是經常需要hack何之,但是我們經常會遇到各瀏覽器表現不一致的情況跟畅。基于此帝美,某些情況我們會極不情愿的...
    大女表哥閱讀 1,092評論 0 9
  • CSS Hack 不同的瀏覽器對某些CSS代碼解析會存在一定的差異,因此就會導致不同瀏覽器下給用戶展示的頁面效果不...
    zx9426閱讀 386評論 0 0
  • R: 30秒快速吸引法(用SCQA瞬間抓取注意力) 序言的講故事結構包含4個要素:S是情景、C是沖突悼潭、Q是疑問庇忌、A...
    藍翼馬閱讀 355評論 0 0