浏览器兼容性探讨

浏览器兼容性探讨


关于浏览器兼容的大致思路

  1. 首先要考虑的就是有没有必要做

    • 产品的角度(产品的受众、受众的浏览器比例、效果优先还是基本功能优先)
    • 成本的角度 (有无必要做某件事)
  2. 如果要做兼容,那么做到什么程度

    • 让哪些浏览器支持哪些效果
  3. 如何做

    • 根据兼容需求选择技术框架/库(jquery)
    • 根据兼容需求选择兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr)
      postCSS
  • 条件注释、CSS Hack、js 能力检测做一些修补

什么是CSS hack

CSS hack,是一种用属性前缀、选择器前缀、以及IE条件注释法等hack技术,由于不同厂商,不同浏览器,不同版本中,对CSS的支持程度不同,表现方式也有差异。
因此为了,尽可能的缩小差异,达到不同浏览器中,都有较为一致的体验,因此需要用到CSS hack技术。
www.caniuse.com 网站中,可以查看各种HTML CSS 的浏览器兼容支持情况。


ie6、7的 hack 写法是?

  1. 首先所有的IE 10以下的浏览器browser(不含10)都支持HTML条件注释法,

  2. IE6能识别下划线" _ "和星号" * ",IE7能识别星号" * ",但不能识别下划线" _ ",IE6~IE10都认识"\9"。
    因此:
    比如关于color 的hack写法:
    .box{
    color: red;
    _color: blue; /* IE6中,color是正常识别的,但是_color也能识别,因为产生后者覆盖前者,IE6中颜色便是blue了。 /
    color: pink; /IE6、7都能识别, 所以如果继续添加这一行,那么IE 6中,会在此被pink覆盖,如果是在IE 7中,由于不能识别之前的_color, 所以第一次渲染成了color: red; 第二次被
    color: pink; 覆盖。 /
    color: yellow\9; /
    ie/edge 6-8*/
    }

  3. 另外就是使用条件注释法,在HTML写入:

  <!--[if IE 6]>
  <p>You are using Internet Explorer 6.</p>
  <![endif]-->

这代表如果是IE 6 浏览器,那么则有如上的p段落。


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

这代表,如果是IE 7 浏览器,那么引入如上的css样式表。


5种以上的浏览器兼容写法

  1. 条件注释
<!–-[if IE 7]>
<link rel="stylesheet" href="ie7.css" type="text/css" />
<![endif]–->
  1. 属性前缀
.box{
  color: red;
  _color: blue; /*ie6*/
  *color: pink; /*ie67*/
  color: yellow\9;  /*ie/edge 6-8*/
}
  1. 选择器前缀
span{ /仅ie6/
display: block;
}
  1. 使用Modernizr工具
<div class="no-textshadow"></div>
.no-textshadow{border:1px solid red;}
  1. 条件注释和兼容工具相结合
 <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  <![endif]-->

以下工具/名词是做什么的

  • 条件注释
    条件注释 (conditional comment) 是于HTML源码中被IE有条件解释的语句。条件注释可被用来向IE提供及隐藏代码。IE10已经不再支持条件注释

  • IE Hack
    是针对IE 兼容的特殊写法,比如 IE6能识别下划线""和星号" ",IE7能识别星号" ",但不能识别下划线"",IE6~IE10都认识"\9",但firefox前述三个都不能认识

  • js 能力检测
    各个版本的浏览器有许多不一致性,和各种怪癖,因此需要用js对浏览器是否支持某种特定的能力,做检测。确定之后,就可以给出相关的方案。

  • html5shiv.js
    针对不支持HTML5标签的浏览器,创建并模拟HTML5的标签的效果并使相应的CSS生效。(html5shiv is an HTML5 JavaScript shim for IE to recognise and style the HTML5 elements)

  • respond.js
    为不支持CSS3媒体查询的浏览器(IE6-8)(以及其他可能不支持的浏览器)模拟CSS3的媒体查询。

  • css reset
    早起浏览器支持和理解的css规范不同,导致渲染页面时效果不一致, 会出现很多兼容性问题。因此需要在样式表一开始的地方,进行一些样式重置,最开始是最暴力的方式, * {margin:0; padding:0;}.后来发现,过于画蛇添足,回头又要用到很多默认样式,再回头贱贱地添加回来,因此css reset经过了不同阶段的发展,各方提出了自己的css reset方案。

  • normalize.css
    直到 normalize.css出现,颠覆css reset 的理念。reset的目的,是将所有浏览器自带样式重置掉,这样易于保持各方浏览器渲染的异质性。
    而normalize的理念则是尽量保持浏览器的默认样式,不进行太多的重置。比css reset更高明的地方在于,normalize 项目研究了各种浏览器默认元素风格之间的差异,精确定位需要重置的样式。

  • Modernizr
    是一个JS类库,用来检测浏览器的CSS3和HTML5能力,从而解决浏览器的兼容问题。

  • postCSS
    一个用js插件对样式进行转换的工具


常见属性的兼容情况

属性 兼容情况
inline-block: >=ie8
min-width/min-height >=ie8
:before,:after >=ie8
div:hover >=ie7
background-size >=ie9
圆角 >= ie9
阴影 >= ie9
动画/渐变 >= ie10

参考

caniuse.com 查CSS属性兼容
browserhacks 查 Hack 的写法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 一、问答部分 1. 如何调试 IE 浏览器 IE7及以上版本有调试台,可以按F12启动。Paste_Image.p...
    _hello__world_阅读 455评论 0 1
  • 一、如何调试 IE 浏览器 IE7以上版本自带的开发者工具,IE6可以用border的方法;例:IE11的开发者工...
    __Qiao阅读 1,120评论 2 17
  • 一、如何调试 IE 浏览器? 在IE7以上的版本中可以通过按快捷键F12调出开发人员调试框,如下图IE7以上调试工...
    dengpan阅读 543评论 0 2
  • CSS Hack 不同的浏览器对某些CSS代码解析会存在一定的差异,因此就会导致不同浏览器下给用户展示的页面效果不...
    zx9426阅读 378评论 0 0
  • 我记得我推开了那扇门。 门边,一双碧蓝色的两侧基本上要撑开的凉鞋,静静地呆在那里,一道很深的裂缝刻在鞋跟处,一...
    羽洛轩阅读 148评论 0 3