浏览器兼容性问题总结

浏览器兼容性问题总结

一、简介

浏览器内核主要包含两种引擎,一是渲染引擎,另一个是 js 引擎,常见的内核有 Trident(IE)、Gecko(Firefox 内核)、Blink(新的 chrome)、Webkit(Safari+老 chrome),国产的 360、猎豹、百度、QQ 浏览器大部分都是双内核(IE+Chrome)

在手机端 iso 系统都是内置的 WKWebview 内核,在安卓端内核差异较大,微信 6.1 版本以上的 android 用户,都是使用的 QQ 浏览器的 X5 内核(由开源 Webkit 优化的浏览器渲染引擎)。5.4-6.1 之间的版本,若用户安装了 QQ 浏览器就是使用的 X5 内核,若用户未安装浏览器,使用的是系统内核。

浏览器兼容问题主要分为样式兼容性(css)、交互兼容(js)、框架兼容(react、vue,主要是 babel 问题)。

二、css 兼容性问题

1、浏览器的初始化样式不同导致的兼容性问题

不同的浏览器默认很多样式不一致,最暴力的做法就是* {margin: 0; padding: 0;} 的方式,这种方式简单方便的一次性重置所有 HTML 网页元素的浏览器样式,但是也重置了很多有意义的默认样式。
Normalize.css 是研究了各种不同浏览器默认的差异,最终得出的,它的优势有:

保护有用的浏览器默认样式而不是完全去掉它们
一般化的样式:为大部分HTML元素提供
修复浏览器自身的bug并保证各浏览器的一致性
优化CSS可用性:用一些小技巧
解释代码:用注释和详细的文档来

Normalize.css 支持包括手机浏览器在内的超多浏览器,同时对 HTML5 元素、排版、列表、嵌入的内容、表单和表格都进行了一般化。

2、浏览器对 CSS3 的支持

浏览器前缀主要是解决各个浏览器的早期版本问题,通常,有 W3C 组织成员提出一个新属性,比如圆角 border-radius,大家都觉得好,但 W3C 制定标准,要走很复杂的程序。而浏览器商市场推广时间紧,如果一个属性已经够成熟了,就会在浏览器中加入支持。为避免日后 W3C 公布标准时有所变化,所以加入一个私有前缀.

-moz代表firefox浏览器私有属性
-ms代表IE浏览器私有属性
-webkit代表chrome、safari私有属性
-o代表opera私有属性

现在很多打包工具会解决浏览器前缀的问题,这个具体的往下看。

3、css hack

由于不同的浏览器和浏览器各版本对 CSS 的支持及解析结果不一样,以及 CSS 优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的 CSS;

CSS Hack 大致有 3 种表现形式:
  • CSS 属性前缀法
  • 选择器前缀法
  • IE 条件注释法(即 HTML 头部引用 if IE)Hack

实际项目中 CSS Hack 大部分是针对 IE 浏览器不同版本之间的表现差异而引入的

    只在IE下生效
    

    只在IE6下生效
    

    只在IE6以上版本生效
    

    只在IE8上不生效
    

    非IE浏览器生效
    
  • 常见用法:

1、解决 ie9 以下浏览器对 html5 新增标签的不识别,并导致 CSS 不起作用的问题

html5shiv

2、让不支持 css3 Media Query 的浏览器包括 IE6-IE8 等其他浏览器支持查询

html5shiv

4、Modernizr 使用

Modernizr 默认做的事情很少,除了(在你选择的情况下)给不支持 html5 的标签的浏览器,如 IE6,7,8 追加一点由 Remy Sharp 开发的 html5 垫片脚本,使其识别

你可能感兴趣的:(浏览器兼容性问题总结)