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

普及:浏览器的兼容性问题,往往是个别浏览器(没错,就是那个与众不同的浏览器)对于一些标准的定义不一致导致的。俗话说:没有IE就没有伤害。

贴士:内容都是自己总结的,不免会出现错误或者bug,欢迎更正和补充,本帖也会不断更新。

Normalize.css

不同浏览器的默认样式存在差异,可以使用 Normalize.css 抹平这些差异。当然,你也可以定制属于自己业务的 reset.css

<link href="https://cdn.bootcss.com/normalize/7.0.0/normalize.min.css" rel="stylesheet">

简单粗暴法

* { margin: 0; padding: 0; }

html5shiv.js

解决 ie9 以下浏览器对 html5 新增标签不识别的问题。

<!--[if lt IE 9]><script type="text/javascript" src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<![endif]-->

respond.js

解决 ie9 以下浏览器不支持 CSS3 Media Query 的问题。

<script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>

picturefill.js

解决 IE 9 10 11 等浏览器不支持 <picture> 标签的问题

<script src="https://cdn.bootcss.com/picturefill/3.0.3/picturefill.min.js"></script>

IE 条件注释

IE 的条件注释仅仅针对IE浏览器,对其他浏览器无效


IE 属性过滤器(较为常用的hack方法)

针对不同的 IE 浏览器,可以使用不同的字符来对特定的版本的 IE 浏览器进行样式控制

image

image

浏览器 CSS 兼容前缀

-o-transform:rotate(7deg); // Opera-ms-transform:rotate(7deg); // IE-moz-transform:rotate(7deg); // Firefox-webkit-transform:rotate(7deg); // Chrometransform:rotate(7deg); // 统一标识语句

a 标签的几种 CSS 状态的顺序

很多新人在写 a 标签的样式,会疑惑为什么写的样式没有效果,或者点击超链接后,hoveractive 样式没有效果,其实只是写的样式被覆盖了。

正确的a标签顺序应该是:==love hate==

  • link:平常的状态
  • visited:被访问过之后
  • hover:鼠标放到链接上的时候
  • active:链接被按下的时候

完美解决 Placeholder

<input type="text" value="Name *" onFocus="this.value = '';" onBlur="if (this.value == '') {this.value = 'Name *';}">

清除浮动 最佳实践

.fl { float: left; }
.fr { float: right; }
.clearfix:after { display: block; clear: both; content: ""; visibility: hidden; height: 0; }
.clearfix { zoom: 1; }

BFC 解决边距重叠问题

当相邻元素都设置了 margin 边距时,margin 将取最大值,舍弃小值。为了不让边距重叠,可以给子元素加一个父元素,并设置该父元素为 BFC:overflow: hidden;

<div class="box" id="box"><p>Lorem ipsum dolor sit.</p><div style="overflow: hidden;"><p>Lorem ipsum dolor sit.</p></div><p>Lorem ipsum dolor sit.</p>
</div>

IE6 双倍边距的问题

设置 ie6 中设置浮动,同时又设置 margin,会出现双倍边距的问题

display: inline;

解决 IE9 以下浏览器不能使用 opacity

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

解决 IE6 不支持 fixed 绝对定位以及IE6下被绝对定位的元素在滚动的时候会闪动的问题

/* IE6 hack */
*html, *html body {background-image: url(about:blank);background-attachment: fixed;
}
*html #menu {position: absolute;top: expression(((e=document.documentElement.scrollTop) ? e : document.body.scrollTop) + 100 + 'px');
}

IE6 背景闪烁的问题

问题:链接、按钮用 CSSsprites 作为背景,在 ie6 下会有背景图闪烁的现象。原因是 IE6 没有将背景图缓存,每次触发 hover 的时候都会重新加载

解决:可以用 JavaScript 设置 ie6 缓存这些图片:

document.execCommand("BackgroundImageCache", false, true);

解决在 IE6 下,列表与日期错位的问题

日期<span> 标签放在标题 <a> 标签之前即可


解决 IE6 不支持 min-height 属性的问题

min-height: 350px;
_height: 350px;

IE7 IE8 支持 CSS3 background-size属性

由于 background-size 是 CSS3 新增的属性,所以 IE 低版本自然就不支持了,但是老外写了一个 htc 文件,名叫 background-size polyfill,使用该文件能够让 IE7、IE8 支持 background-size 属性。其原理是创建一个 img 元素插入到容器中,并重新计算宽度、高度、left、top 等值,模拟 background-size 的效果。

html {height: 100%;
}
body {height: 100%;margin: 0;padding: 0;background-image: url('img/37.png');background-repeat: no-repeat;background-size: cover;-ms-behavior: url('css/backgroundsize.min.htc');behavior: url('css/backgroundsize.min.htc');
}

IE6-7 line-height 失效的问题

问题:在ieimg 与文字放一起时,line-height 不起作用

解决:都设置成 float

width:100%

width:100% 这个东西在 ie 里用很方便,会向上逐层搜索 width 值,忽视浮动层的影响.

Firefox 下搜索至浮动层结束,如此,只能给中间的所有浮动层加 width:100%才行,累啊。

opera 这点倒学乖了,跟了 ie

cursor:hand

显示手型 cursor: hand,ie6/7/8、opera 都支持,但是safari 、 ff 不支持

cursor: pointer;

td 自动换行的问题

问题:table 宽度固定,td 自动换行

解决:设置 Tabletable-layout: fixedtdword-wrap: break-word

让层显示在 FLASH 之上

想让层的内容显示在 flash 上,把 FLASH 设置透明即可

1、<param name=" wmode " value="transparent" />
2、<param name="wmode" value="opaque"/>

键盘事件 keyCode 兼容性写法

var inp = document.getElementById('inp')
var result = document.getElementById('result')function getKeyCode(e) {e = e ? e : (window.event ? window.event : "")return e.keyCode ? e.keyCode : e.which
}inp.onkeypress = function(e) {result.innerHTML = getKeyCode(e)
}

求窗口大小的兼容写法

// 浏览器窗口可视区域大小(不包括工具栏和滚动条等边线)
// 1600 * 525
var client_w = document.documentElement.clientWidth || document.body.clientWidth;
var client_h = document.documentElement.clientHeight || document.body.clientHeight;// 网页内容实际宽高(包括工具栏和滚动条等边线)
// 1600 * 8
var scroll_w = document.documentElement.scrollWidth || document.body.scrollWidth;
var scroll_h = document.documentElement.scrollHeight || document.body.scrollHeight;// 网页内容实际宽高 (不包括工具栏和滚动条等边线)
// 1600 * 8
var offset_w = document.documentElement.offsetWidth || document.body.offsetWidth;
var offset_h = document.documentElement.offsetHeight || document.body.offsetHeight;// 滚动的高度
var scroll_Top = document.documentElement.scrollTop||document.body.scrollTop;

DOM 事件处理程序的兼容写法(能力检测)

var eventshiv = {// event兼容getEvent: function(event) {return event ? event : window.event;},
// <span class="hljs-built_in">type</span>兼容
getType: <span class="hljs-keyword">function</span>(event) {<span class="hljs-built_in">return</span> event.type;
},// target兼容
getTarget: <span class="hljs-keyword">function</span>(event) {<span class="hljs-built_in">return</span> event.target ? event.target : event.srcelem;
},// 添加事件句柄
addHandler: <span class="hljs-keyword">function</span>(elem, <span class="hljs-built_in">type</span>, listener) {<span class="hljs-keyword">if</span> (elem.addEventListener) {elem.addEventListener(<span class="hljs-built_in">type</span>, listener, <span class="hljs-literal">false</span>);} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (elem.attachEvent) {elem.attachEvent(<span class="hljs-string">'on'</span> + <span class="hljs-built_in">type</span>, listener);} <span class="hljs-keyword">else</span> {// 在这里由于.与<span class="hljs-string">'on'</span>字符串不能链接,只能用 []elem[<span class="hljs-string">'on'</span> + <span class="hljs-built_in">type</span>] = listener;}
},// 移除事件句柄
removeHandler: <span class="hljs-keyword">function</span>(elem, <span class="hljs-built_in">type</span>, listener) {<span class="hljs-keyword">if</span> (elem.removeEventListener) {elem.removeEventListener(<span class="hljs-built_in">type</span>, listener, <span class="hljs-literal">false</span>);} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (elem.detachEvent) {elem.detachEvent(<span class="hljs-string">'on'</span> + <span class="hljs-built_in">type</span>, listener);} <span class="hljs-keyword">else</span> {elem[<span class="hljs-string">'on'</span> + <span class="hljs-built_in">type</span>] = null;}
},// 添加事件代理
addAgent: <span class="hljs-keyword">function</span> (elem, <span class="hljs-built_in">type</span>, agent, listener) {elem.addEventListener(<span class="hljs-built_in">type</span>, <span class="hljs-keyword">function</span> (e) {<span class="hljs-keyword">if</span> (e.target.matches(agent)) {listener.call(e.target, e); // this 指向 e.target}});
},// 取消默认行为
preventDefault: <span class="hljs-keyword">function</span>(event) {<span class="hljs-keyword">if</span> (event.preventDefault) {event.preventDefault();} <span class="hljs-keyword">else</span> {event.returnValue = <span class="hljs-literal">false</span>;}
},// 阻止事件冒泡
stopPropagation: <span class="hljs-keyword">function</span>(event) {<span class="hljs-keyword">if</span> (event.stopPropagation) {event.stopPropagation();} <span class="hljs-keyword">else</span> {event.cancelBubble = <span class="hljs-literal">true</span>;}
}
};

转载自– 掘金-白小名

浏览器兼容性问题解决方案 · 总结相关推荐

  1. 我所碰到的面试题之------前端常见浏览器兼容性问题解决方案---

    我所碰到的面试题之------前端常见浏览器兼容性问题解决方案--- 参考文章: (1)我所碰到的面试题之------前端常见浏览器兼容性问题解决方案--- (2)https://www.cnblog ...

  2. JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案

    JS组件系列--Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案 参考文章: (1)JS组件系列--Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案 (2) ...

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

    浏览器兼容性问题解决方案 · 总结 javascript/jquery 浏览数:536 2017-9-2 普及:浏览器的兼容性问题,往往是个别浏览器(没错,就是那个与众不同的浏览器)对于一些标准的定义 ...

  4. 浏览器兼容性问题解决方案之CSS,已在IE、FF、Chrome测试

    最近在跟一个同学共同整理一个关于浏览器兼容性问题的文档,我们主要是找出在主流浏览器中出现哪些问题,如何解决这个问题,并给出实例.在这之前,需要明白一下几个问题. 什么是浏览器兼容问题? 所谓的浏览器兼 ...

  5. 浏览器兼容性及其解决方案整理

    一.了解浏览器 主流浏览器:IE(Trident内核).Firefox(火狐:Gecko内核).Safari(苹果:webkit内核).Google Chrome(谷歌:Blink内核).Opera( ...

  6. 浏览器兼容性问题解决方案之CSS——已在IE、FF、Chrome测试

    在浏览器兼容之JavaScript篇--已在IE.FF.Chrome测试和浏览器兼容性问题解决方法,已在IE.FF.Chrome测试中已经对浏览器中存在的CSS的兼容性和JS的兼容性进行了简单说明,现 ...

  7. PC端浏览器兼容性问题解决方案

    1.Normalize.css 不同浏览器的默认样式存在差异,可以使用 Normalize.css 抹平这些差异.当然,你也可以定制属于自己业务的 reset.css <link href=&q ...

  8. angular浏览器兼容性问题解决方案

    问题:edge浏览器下,固定列的边框消失 原因:ng-zorro-antd表格组件使用nzLeft和nzRight指令固定的表格列,这两个指令的实现css3中的标签: position: -webki ...

  9. html 布局兼容性,HTML+CSS入门 浏览器兼容性问题及解决方案

    本篇教程介绍了HTML+CSS入门 浏览器兼容性问题及解决方案,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题现象: ...

  10. 常见的浏览器兼容性问题与解决方案——CSS篇

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

最新文章

  1. ASP.net session 使用总结(2)
  2. Android UI Button 和GridView 的设计--优化(2)
  3. HDLBits 系列(44)状态机补录
  4. 图解GitHub和SourceTree入门教程
  5. lombok @Builder 是如何实现的
  6. python计算每月工资多少钱_[Python]CCF——工资计算(201612-2)
  7. C#常见编码方式总结
  8. 使用jOOQ和JavaFX将SQL数据转换为图表
  9. vba 执行网页javascript_JavaScript秘密笔记 第一集
  10. BZOJ.4909.[SDOI2017]龙与地下城(正态分布 中心极限定理 FFT Simpson积分)
  11. Maven-dependencyManagement与import
  12. 如何让你的 x86 openwrt虚拟机上网
  13. 冒烟测试、回归测试、随机测试、探索性测试和安全测试
  14. 【基于机器学习/深度学习的睡眠信号分类】主题必读论文推荐
  15. 【杂】Excel中匹配筛选操作VLOOKUP 函数使用问题排查
  16. swoole 连接池php fpm,【转】swoole4实现数据库连接池
  17. PHP之Smarty
  18. 如何实现局域网时间同步
  19. 角度逼近圆弧插补法插补与仿真
  20. 梦想经不起等待,今天起就行动吧!

热门文章

  1. linux系统下安装oracle客户端
  2. 树莓派搭建transmission下载机
  3. NI CompactRIO9035与elmo电机驱动联合仿真系统搭建教程(二)
  4. 从零开始的明日方舟python脚本创作(六)鼠标点击模块
  5. JaxWsProxyFactoryBean调用WebService实例
  6. 怎么获取股票大数据接口的方法介绍
  7. linux制作虚拟机镜像,为OpenStack制作CoreOS虚拟机镜像(基于CoreOS官方提供镜像)
  8. 【GlobalMapper精品教程】003:影像裁剪、批量影像分幅案例详解
  9. Win10升级要卸载virtualbox virtualbox怎么办
  10. 机器学习特征工程之皮尔森相关系数 pearson correlation of features