浏览器兼容

一、前言

做前端开发,必然少不了浏览器,然而不同的厂商有着各自版本的浏览器,不同的浏览器对css的理解和解析不一样。那用户使用不同厂商不同版本的浏览器,而我们要给用户一个统一的网页,那我们在写css时就必须考虑到网页在不同的浏览器展现所带来的问题。
  例如,一个css属性,在IE 8不可以使用,但是在IE 9可以使用,而我们又使用了这个css属性,又必须在IE 8上展示,那我们就需要解决这个属性在不同版本的展示,也就是浏览器的兼容问题。下面通过一些解决思路和方法来探讨如何解决浏览器的兼容问题。

二、什么是 CSS hack

不同版本或不同厂商的的浏览器(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持和解析存在着差异,我们为在不同的浏览器获得统一的页面展现效果,就需要针对不同的浏览器写特定的CSS样式。我们把针对不同的浏览器写相应的CSS样式的过程称为CSS hack。

三、浅谈解决浏览器兼容的思路
1、要不要做这个产品

如果我们要做一个产品,首先要从成本和回报的角度来考虑,这个产品是否有必要做。
  如果有必要,我们再从产品的角度思考又是为哪类用户做。用户会通过哪些浏览器来浏览网页,不同的浏览器使用的比例,以及是网页展示的功能优先还是网页展示的效果优先。这些问题我们都需要了解。
  在这里推荐一个网站,百度统计,我们可以从这个网站了解到不同的浏览器的市场份额。从这个网站我们也可以看到,依然有一部分人群,使用比较老版本的浏览器(如IE 7、8)。我们的用户是不是大部分使用这些老版本的浏览器的,一般安全性比较高的政府机关或者银行等单位,他们的浏览器一般都是比较老的。如果我们的用户是这些,那我们写CSS时,就要考虑属性兼容的问题。

2、做到什么程度

一般企业都会从成本和回报的角度去考虑,这个产品做到什么程度。假如产品的重要性我们已经了解,那我们要考虑让哪些浏览器来支持,需不需要老版本的浏览器支持,支持到哪个版本等等都要了解。了解这些过后,我们在做网页开发时,就会有一个清晰的思路,如何让不支持这个CSS属性的浏览器,获得同样支持的浏览器的页面统一。

3、常用解决兼容的方法

一般解决兼容有两个思路,渐进增强和优雅降级。
  渐进增强(progressive enhancement): 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
  优雅降级 (graceful degradation): 一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

二者区别:
  “优雅降级”观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 IE、Chrome等)的前一个版本。

在这种设计范例下,旧版的浏览器被认为仅能提供“简陋却无妨 ” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较大的错误之外,其它的差异将被直接忽略。

“渐进增强”观点则认为应关注于内容本身。内容是我们建立网站的诱因。有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得“渐进增强”成为一种更为合理的设计范例。

“优雅降级”和“渐进增强”都关注于同一网站在不同设备里不同浏览器下的表现程度。关键的区别则在于它们各自关注于何处,以及这种关注如何影响工作的流程。在实际的开发当中分析准确,具有什么功能或者效果的网页,将会给我们的开发工作减少很多弯路。

在具体的开发当中我们一般参考一下几个方法,获得较理想的兼容效果。
方法1:根据兼容需求选择技术框架/库(jquery)。
方法2:根据兼容需求选择兼容工具(html5shiv.jsrespond.jscss resetnormalize.cssModernizr)。
方法3:postCSS
方法4:条件注释、CSS Hack、js 能力检测做一些修补。

四、浏览器兼容的写法举例

以下包含但不限于

1、选择合适的框架

①、Bootstrap (>=ie8) :即IE 8及以上都可以使用。
②、jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9):jQuery2以下版本,IE6及以后浏览器都能识别;jQuery2以上IE9及以上都能使用。
③、Vue (>= ie9):IE9及以后版本都能使用。

2、条件注释 (conditional comment)

条件注释是于HTML源码中被 Microsoft Internet Explorer 有条件解释的语句。条件注释可被用来向 Internet Explorer 提供及隐藏代码。也称:IE hack。
  有两种“条件注释”:下层显示 (downlevel revealed)和下层隐藏(downlevel hidden)。
下层隐藏:
下层显示 :<![if expression]> HTML <![endif]>
如下是两个“下层隐藏”条件注释的示例。

或者

第一个示例中的指令将会让 IE 8 读取指定的CSS文件,而 IE 7 或者其它版本的 IE 将会忽略它。非 IE 的浏览器同样会把它忽略因为它看起来像一条标准的 HTML 注释。第二条示例里的标记将会让 IE 5 至 7 读取其内的 CSS 样式。通过对这种标记的不同的使用你也可以挑出 IE 6, IE 5 或者比指定版本更新(大)或更旧(小)版本的 IE。

这里解释一下标准 HTML 注释:标准 HTML 注释:
  注释标签用于在源代码中插入注释。注释不会显示在浏览器中。您可使用注释对您的代码进行解释,这样做有助于您在以后的时间对代码的编辑。当您编写了大量代码时尤其有用。
  使用注释标签来隐藏浏览器不支持的脚本也是一个好习惯(这样就不会把脚本显示为纯文本)。

3、CSS hack

CSS Hack大致有3种表现形式,CSS属性前缀法、选择器前缀法以及IE条件注释法(即HTML头部引用if IE)Hack,实际项目中CSS Hack大部分是针对IE浏览器不同版本之间的表现差异而引入的。browserhacks 查 Hack 的写法网站。

(1)属性前缀法(即类内部Hack):例如 IE6能识别下划线""和星号" * ",IE7能识别星号" * ",但不能识别下划线"",IE6~IE10都认识"\9",但firefox前述三个都不能认识。
示列:
background-color:red; /* All browsers */ background-color:blue !important;/* All browsers but IE6 */ *background-color:black; /* IE6, IE7 */ +background-color:yellow;/* IE6, IE7*/ background-color:gray\9; /* IE6, IE7, IE8, IE9, IE10 */ background-color:purple\0; /* IE8, IE9, IE10 */ background-color:orange\9\0;/*IE9, IE10*/ _background-color:green; /* Only works in IE6 */
(2)选择器前缀法(即选择器Hack)。
示例:
*html *前缀只对IE6生效 *+html *+前缀只对IE7生效 @media screen\9{...}只对IE6/7生效
(3)IE条件注释法(即HTML条件注释Hack):上文已谈到条件注释,此处不再赘述。

4、常见属性的兼容情况

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

五、一些和兼容相关的开发利器

1、html5shiv.js
HTML5 Shiv支持在旧版Internet Explorer中使用HTML5细分元素,并为Internet Explorer 6-9,Safari 4.x(和iPhone 3.x)和Firefox 3.x提供基本的HTML5样式。
2、respond.js
此脚本的目标是提供一个快速和轻量级(3kb缩小/ 1kb gzipped)脚本,以便
在不支持CSS3媒体查询的浏览器中启用响应式网页设计,特别是Internet Explorer 8及更低版本。
3、css reset:其目的是将所有的浏览器的自带样式重置掉,这样更易于保持各浏览器渲染的一致性。不过,由于出现了更加优秀的Normalize.css,所以css reset基本上被替代了。
4、normalize.css
Normalize.css只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性。相比于传统的CSS reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。
Normalize.css现在已经被用于Twitter BootstrapHTML5 BoilerplateGOV.UKRdioCSS Tricks 以及许许多多其他框架、工具和网站上。
5、Modernizr
Modernizr是一套JavaScript 库,用来侦测浏览器是否支持HTML5与CSS3等规格。如果浏览器不支持,Modernizr会使用其他的解决方法来进行模拟。
许多HTML5与CSS 3的功能已经在许多主流的浏览器中实现出来。Modernizr能够告诉开发者,浏览器是否已经实现他们想要的功能。这让开发者在浏览器上可以充分利用这些新功能,或者尝试制作解决方案来支持那些老旧的浏览器。
6、Postcss
PostCSS是一个使用JS插件转换样式的工具。这些插件可以删除您的CSS,支持变量和混合,透明未来的CSS语法,内联图像等。

六、task12完

保持饥饿保持学习
注:CSS所有的属性我们都可以在这个网站去查[caniuse.com]
参考资料:
1、 http://blog.csdn.net/freshlover/article/details/12132801
2、http://blog.csdn.net/xiongzhengxiang/article/details/7999525
3、https://zh.wikipedia.org/zh-hans/%E6%9D%A1%E4%BB%B6%E6%B3%A8%E9%87%8A
4、http://www.w3school.com.cn/tags/tag_comment.asp
5、http://jerryzou.com/posts/aboutNormalizeCss/
6、https://zh.wikipedia.org/wiki/Modernizr

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

推荐阅读更多精彩内容

  • 一、如何调试 IE 浏览器? IE调试的一般方法(css): 使用高版本IE控制台(对于IE7以上)IE11的开发...
    婷楼沐熙阅读 546评论 0 6
  • CSS Hack 不同的浏览器对某些CSS代码解析会存在一定的差异,因此就会导致不同浏览器下给用户展示的页面效果不...
    zx9426阅读 376评论 0 0
  • 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况。基于此,某些情况我们会极不情愿的...
    大女表哥阅读 1,085评论 0 9
  • 什么是 CSS hack 由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozill...
    阿鲁提尔阅读 259评论 0 2
  • 本文版权归饥人谷和本人所有 1.什么是 CSS hackCSS hack由于不同厂商的浏览器,比如Internet...
    饥人谷_xxxxx阅读 293评论 0 0