浏览器兼容问题总结

1、浏览器兼容性

      浏览器的兼容性问题,每每是个别浏览器(没错,就是那个不同凡响的浏览器)对于一些标准的定义不一致致使的。俗话说:没有IE就没有伤害。javascript

2、进行浏览器兼容性以前分析

      1.根据用户群体使用的浏览器版本,是采用优雅降级,仍是渐进加强。css

      优雅降级:一开始就构建站点的完整功能,而后针对浏览器测试和修复。好比一开始使用 CSS3 的特性构建了一个应用,而后逐步针对各大浏览器进行 hack 使其能够在低版本浏览器上正常浏览。html

      渐进加强:一开始就针对低版本浏览器进行构建页面,完成基本的功能,而后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。前端

       2.分析市场上主要浏览器的市场份额,决定是否有必要进行兼容html5

         可访问浏览器市场份额网站:statcounter,查看当前浏览器对特定CSS3和HTML5特性的支持成都:caniusejava

3、浏览器兼容处理

       浏览器的兼容性主要是样式兼容性(css),交互兼容性(javascript),浏览器 hack 三个方面。web

       1.样式兼容性(css)方面          

  • 不一样的浏览器样式存在差别,能够经过 Normalize.css 抹平差别,也能够定制本身的 reset.css,重置浏览器的默认样式
  • 在还原设计稿的时候咱们经常会须要用到透明属性,因此解决 IE9 如下浏览器不能使用 opacit。
    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脚本。

       2.交互兼容性(javascript)

  • 事件兼容的问题
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;
        }
    }
};

 

 

      3.浏览器 hack

  • IE 条件注释

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]-->

 

  • IE 属性过滤器(较为经常使用的hack方法)
字符 例子 说明
_ _color:red; 只有IE6能够识别
* *color:red; IE6/7能够识别
\9 color:red\9; IE8及如下能够识别




 

参考文章:1.如何机智地回答浏览器兼容性问题ide

                  2. 浏览器兼容性问题解决方案 · 总结

                  3.JS进阶篇--前端的瑞士军刀Modernizr.js

相关文章
相关标签/搜索