不同浏览器的内核不尽相同,所以各个浏览器对网页的解析存在一定的差异。
浏览器内核主要分为两种,一是渲染引擎,另一个是js 引擎
所以浏览器兼容性问题一般指:css兼容js兼容

一、样式初始化

由于各大浏览器会有自身的默认样式,并且不尽相同,所以为了尽可能的保证样式的统一性,前端在开发项目之前都会先进行样式格式化,最常见的分为以下几个方面。

1.pandding 值和 margin 值均设置为 0

将html、body、a、li、ol、input、textarea、select、button 等标签的 padding 值和 margin 值设置为 0。

2.html 标签

设置统一的字体,如果使用 rem 单位,则 html 需要设置合适的字号。

3.a 标签

设置统一的颜色,将 text-decoration 属性设置为 none。

4.ol 和 li 标签

list-style 统一设置为 none。

5.input、textarea、select、button 等标签初始化

border 设置为 none;

根据需要设置颜色和背景色。

二、使用不同类型的浏览器内核前缀

  • 1.Chrome(谷歌浏览器) 与 Safari(苹果浏览器) 内核:Webkit (中译无) 前缀:-webkit-

  • 2.IE (IE浏览器) 内核:Trident (中译三叉戟) 前缀:-ms-

  • 3.Firefox (火狐浏览器) 内核:Gecko(中译壁虎) 前缀:-moz-

  • 4.Opera (欧朋浏览器) 内核:Presto(中译迅速) 前缀:-o-

例:

-webkit-border-radius: 10px; /谷歌浏览器/
-ms-border-radius: 10px; /IE浏览器/
-moz-border-radius: 10px; /火狐浏览器/
-o-border-radius: 10px; /欧朋浏览器/
border-radius: 10px;

三、针对IE浏览器不同版本的解决方案

1.对于低版本的 IE 浏览器使用 CSS hack( 即给特点前缀)

注:以下符号是写在属性名前面。

兼容 IE6 的 hack 符号:- 或 _

兼容 IE6 、7 的 hack 符号:` ~ ! @ # $ % ^ & * ( ) + = [ ] | < > , . 任意一个符号

兼容 IE6、7、8 的 hack 符号:.

注:以下符号是写在属性值与分号直接,中间不留空格。

兼容 IE8 的 hack 符号:\0/

兼容 IE8、9、10 的 hack 符号:\0

兼容 IE6、7、8、9、10 的 hack 符号:\9

例:

/hack符号在前/
_border-radius: 10px; /IE6/
+border-radius: 10px; /IE6\7/
.border-radius: 10px; /IE6\7\8//hack符号在后/
border-radius: 10px\0/; /IE8/
border-radius: 10px\0; /IE8\9\10/
border-radius: 10px\9; /IE6\7\8\9\10/

2.为不同的版本编写独立的样式,其他浏览器识别不到。

例:大于 IE9 的浏览器使用这个单独的 style9.css 样式

例:只有 IE6 浏览器使用的 style6.css 样式

四、其他特殊样式

1.cursor 属性的 hand 值和 pointer 值

问题:firefox 浏览器不支持 hand 值,但其他浏览器均支持 pointer 值。
解决: 统一使用 cursor 属性的 pointer 值。

2.水平居中

问题:IE8 及IE8 以下版本浏览器不可通过设置 margin:0 auto 实现水平居中。

解决: 可通过设置父级 text-align:center 实现。

3.属性值 “inherit”

问题:IE8 及IE8 以下版本浏览器不支持属性值 “inherit”。

解决:谨慎使用属性值 “inherit”。

五、JS兼容性

1.ES6语法

问题:IE11 不支持箭头函数、class 语法等(报 SCRIPT1002: 语法错误),不支持 Set 和 Map 数据结构(不报错)及 Promise 对象,支持 let 和 const,IE10 及以下不支持任何 ES6 语法。

解决:如果要兼容IE浏览器的项目请使用 ES5 语法或者使用 Babel 进行转换。

2.操作 tr 标签

问题:IE9 及 IE9 以下版本浏览器,不能操作 tr 标签的 innerHTML 属性。

解决:可以操作 td 标签的 innerHTML 属性。

3.Ajax

问题:IE9 及 IE9 以下版本浏览器无法使用 Ajax 获取接口数据。

解决:在使用 Ajax 请求之前设置 jQuery.support.cors=true。

4.event 对象的 srcElement 属性

问题:IE8 及 IE8 以下版本浏览器 event 对象只有 srcElement 属性,没有 target 属性。

解决:obj = event.target?event.target:event.srcElement。

5.DOM 事件绑定

问题:IE8 及 IE8 以下版本浏览器是用 attachEvent() 方法,而其他浏览器是 addEventListener() 方法。

解决:判断 IE 浏览器版本,如果是 IE8 及以下 事件绑定则使用 attachEvent() 方法,注意 attachEvent() 方法的用法,第一个参数为“onclick” 而不是“click”。并且没有第三个参数。

常见的兼容性问题:

1、不同浏览器的标签默认的外边距( margin )和内边距(padding)不同

解决方案: css 里增加通配符 * { margin: 0; padding: 0; }

2、IE6双边距问题;在 IE6中设置了float , 同时又设置margin , 就会出现双边距问题

解决方案:设置display:inline;

3、当标签的高度设置小于10px,在IE6、IE7中会超出自己设置的高度

解决方案:超出高度的标签设置overflow:hidden,或者设置line-height的值小于你的设置高度

4、图片默认有间距

解决方案:使用float 为img 布局

5、IE9一下浏览器不能使用opacity

解决方案:

opacity: 0.5;filter: alpha(opacity = 50);filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 50);

6、边距重叠问题;当相邻两个元素都设置了margin 边距时,margin 将取最大值,舍弃最小值;

解决方案:为了不让边重叠,可以给子元素增加一个父级元素,并设置父级元素为overflow:hidden;

7、cursor:hand 显示手型在safari 上不支持

解决方案:统一使用 cursor:pointer

8、两个块级元素,父元素设置了overflow:auto;子元素设置了position:relative ;且高度大于父元素,在IE6、IE7会被隐藏而不是溢出;

解决方案:父级元素设置position:relative

前端常见的浏览器兼容问题相关推荐

  1. 常见的浏览器兼容问题

    来源于: http://developer.51cto.com/art/201008/218335.htm 浏览器兼容问题一:不同浏览器的标签默认的外边距和内边距不同 问题症状:随便写几个标签,不加样 ...

  2. CSS常见的浏览器兼容汇总

    CSS常见的浏览器兼容汇总 一.从浏览器内核的角度 来看,浏览器兼容性问题可分为以下三类: 1.渲染相关:和样式相关的问题,即体现在布局效果上的问题. 2.脚本相关:和脚本相关的问题,包括JavaSc ...

  3. 常见的浏览器兼容问题及解决方案

    1 浏览器内核 不同浏览器的内核也不尽相同,所以各个浏览器对网页的解析存在一定的差异. 常见的浏览器内核: 浏览器名称 内核 IE Trident内核,也称IE内核 Chrome(谷歌) 以前是Web ...

  4. Web前端开发之浏览器兼容问题

    1.居中问题 div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto; 2.高度问题 两上下排列或嵌套的div,上面的div设置高度(height),如果di ...

  5. 常见的浏览器兼容问题: html 方面

    之前有整理过一部分知识点, 一直没有发布, 因为都是有关 CSS 方面的零散内容; 现在想想无论分享什么内容都需要慢慢积累, 所以还是决定将之前整理的相关内容验证之后慢慢分享给大家, 不仅仅是 CSS ...

  6. WEB前端开发人员须知的常见浏览器兼容问题及解决技巧

    为什么会有兼容问题? 由于浏览器种类众多,不同的浏览器其内核亦不尽相同,故各个浏览器对网页的解析有一定出入,这也是导致浏览器兼容问题出现的主要原因,我们的网页需要在主流浏览器上正常运行,就需要做好浏览 ...

  7. 前端浏览器兼容知识点整理

    做前端,总会涉及到浏览器兼容的问题,之所以存在浏览器兼容的问题,是因为各个浏览器的内核不同, 相对应的同一套代码,不同的浏览器解析后,所呈现的页面效果也会存在一定的差异.一 浏览器内核差异 先来了解一 ...

  8. 前端开发中常见的浏览器兼容性问题及解决方案

    文章目录 前言 一.浏览器四大内核 二.主流兼容问题 (一)浏览器引擎 (二)兼容问题的原因 (三) 为什么浏览器会存在兼容性问题? (四)处理兼容问题的思路 1. 要不要做? 2. 做到什么程度? ...

  9. WEB前端浏览器兼容问题处理

    问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大. 碰到频率:100% 解决方案:css里 *{margi ...

最新文章

  1. 个人前端学习路线图与github优秀前端开发者的路线图推荐
  2. 007_JavaScript关键字和保留字
  3. win服务器系统程序原因分析
  4. android 开发环境 配置和说明
  5. implementation of CreateBindingContext
  6. 模块化加载_谈谈双亲委派模型的第四次破坏-模块化
  7. mysql面试关联查询语句_sql语句多表联查语句的练习(面试题)
  8. 在VsCode里编写和运行不同语言的程序
  9. 关于 django 的时区设置与MySQL 时间相差8小时
  10. 数值分析书籍以及Intel性能分析工具
  11. 在SQLServer2005中使用全文搜索
  12. 分别用switch语句和if语句实现键盘录入月份,输出对应的季节
  13. python水仙花数的代码_Python水仙花数的编程代码如何写
  14. 论文排版一步搞定之公式——(公式居中,编号居右)
  15. 20145322何志威《网络对抗技术》Exp6 信息搜集技术
  16. Lambda表达详细介绍、全的不能全了!!
  17. gom及gee小白架设黑屏的原因以及个别装备地图不显示怎么办?
  18. 《Gradient-based learning applied to document recognition》翻译
  19. 生活中我们如何增加多巴胺的分泌
  20. 【Java】JRE与JDK

热门文章

  1. Q-Q图原理详解及Python实现
  2. 以太坊 云养鱼 Fishbank
  3. dig批量逆向查询域名
  4. js input框只能输入大于0的正整数
  5. 我以前是数学老师,后来转行做了程序员
  6. c语言实现单字节反码,C语言之原码、反码和补码
  7. vsync 信号处理
  8. 【ArcGIS】数据框格网不显示
  9. IT 从业者必备的20个效率工具,速藏!
  10. JavaScript定时器示例