浏览器的兼容性问题,每每是个别浏览器(没错,就是那个不同凡响的浏览器)对于一些标准的定义不一致致使的。俗话说:没有IE就没有伤害。javascript
1.根据用户群体使用的浏览器版本,是采用优雅降级,仍是渐进加强。css
优雅降级:一开始就构建站点的完整功能,而后针对浏览器测试和修复。好比一开始使用 CSS3 的特性构建了一个应用,而后逐步针对各大浏览器进行 hack 使其能够在低版本浏览器上正常浏览。html
渐进加强:一开始就针对低版本浏览器进行构建页面,完成基本的功能,而后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。前端
2.分析市场上主要浏览器的市场份额,决定是否有必要进行兼容html5
可访问浏览器市场份额网站:statcounter,查看当前浏览器对特定CSS3和HTML5特性的支持成都:caniusejava
浏览器的兼容性主要是样式兼容性(css),交互兼容性(javascript),浏览器 hack 三个方面。web
opacity: 0.5; filter: alpha(opacity = 50); //IE6-IE8咱们习惯使用filter滤镜属性来进行实现
内核 | 主要表明浏览器 | 前缀 |
Trident | IE浏览器 | -ms |
Gecko | Firefox | -moz |
Presto | Opera | -o |
Webkit | Chrome和Safari | -webkit |
Modernizr.js
既能给老版本浏览器打补丁,又能保证新浏览器渐进加强的用户体验。它是帮助咱们提升开发实践的,使用一个很是时髦的方法来帮助探测浏览器是否支持某种新特性,甚至能够加载额外的script脚本。var eventshiv = { // event兼容 getEvent: function(event) { return event ? event : window.event; }, // type兼容 getType: function(event) { return event.type; }, // target兼容 getTarget: function(event) { return event.target ? event.target : event.srcelem; }, // 添加事件句柄 addHandler: function(elem, type, listener) { if (elem.addEventListener) { elem.addEventListener(type, listener, false); } else if (elem.attachEvent) { elem.attachEvent('on' + type, listener); } else { // 在这里因为.与'on'字符串不能连接,只能用 [] elem['on' + type] = listener; } }, // 移除事件句柄 removeHandler: function(elem, type, listener) { if (elem.removeEventListener) { elem.removeEventListener(type, listener, false); } else if (elem.detachEvent) { elem.detachEvent('on' + type, listener); } else { elem['on' + type] = null; } }, // 添加事件代理 addAgent: function (elem, type, agent, listener) { elem.addEventListener(type, function (e) { if (e.target.matches(agent)) { listener.call(e.target, e); // this 指向 e.target } }); }, // 取消默认行为 preventDefault: function(event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } }, // 阻止事件冒泡 stopPropagation: function(event) { if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; } } };
IE 的条件注释仅仅针对IE浏览器,对其余浏览器无效segmentfault
操做符 | 含义 |
lt | 小于 |
gt | 大于 |
lte | 小于等于 |
gte | 大于等于 |
! | 不等于 |
html5shiv.js:解决 ie9
如下浏览器对 html5
新增标签不识别的问题。
respond.js:解决 ie9
如下浏览器不支持 CSS3 Media Query
的问题
picturefill.js:解决 ie9
如下浏览器不支持 CSS3 Media Query
的问题浏览器
<!--[if lt IE 9]>
<script type="text/javascript" src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
<script src="https://cdn.bootcss.com/picturefill/3.0.3/picturefill.min.js"></script>
<![endif]-->
字符 | 例子 | 说明 |
_ | _color:red; | 只有IE6能够识别 |
* | *color:red; | IE6/7能够识别 |
\9 | color:red\9; | IE8及如下能够识别 |
参考文章:1.如何机智地回答浏览器兼容性问题ide