前端页面兼容ie8解决方法
一、通用兼容文件的引用:
1、HTML5标签兼容方案:html5shiv.js
GitHub地址:https://github.com/aFarkas/html5shiv/
IE8不支持HTML5的新标签,如<header>、<nav>等标签在IE8无法渲染。html5shiv.js可帮助IE6-8浏览器兼容HTML5语义化标签。
使用方法:在页面中引用html5shiv.js文件。必须添加在页面的<head>元素内,因为IE浏览器必须在元素解析前知道这个元素,所以这个js文件不能在页面底部引用。
2、CSS3媒体查询兼容方案:Respond.js
GitHub地址:https://github.com/scottjehl/Respond
IE8不支持CSS媒体查询,对响应式设计大大不利。Respond.js可帮助IE6-8兼容“min/max-width”媒体查询条件。
使用方法:在页面中所有css文件的引用位置之后引用Respond.js。而且Respond.js的引用得越早,用户看到页面闪烁的机会越小。
3、CSS3字体单位“rem”兼容方案:rem.js
GitHub地址:https://github.com/chuckcarpenter/REM-unit-polyfill
CSS3引入了新的字体大小单位rem,与em的“相对于其父元素来设置字体大小”的功能不同,rem是相对于根元素<html>的字体大小比率单位,成了目前主流的单位之一。IE9+开始支持,IE8就只能通过引入js库来支持了。
使用方法:在页面中引用rem.js文件。需要引用在页脚,也就是<body>末尾,在所有css文件引用和DOM元素之后。
4、CSS3“background-size”属性的“cover”和“contain”属性值兼容方案:background-size polyfill
GitHub地址:https://github.com/louisremi/background-size-polyfill
“background-size”是CSS3新引入的属性,其中有两个属性值非常常用,分别为“cover”和“contain”。“cover”可以把背景图像扩展至足够大,以使背景图像完全覆盖背景区域,背景图像的某些部分也许无法显示在背景定位区域中。“contain”可以把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域。IE8同样不支持,非常不方便。这时可以引用“background-size polyfill”库来兼容。
使用方法:与以上几个库不同,“background-size polyfill”的代码文件需要在css中引用。在所有用到这两个“background-size”属性值的地方,加一行“-ms-behavior”属性:
.selector {
background-size: cover;
/* 以下相对路径是相对于文档,而非css文件! */
/* 使用绝对路径可以避免混淆 */
-ms-behavior: url(/backgroundsize.min.htc);
}
5、JS数组的forEach方法兼容方案:自行实现
IE8的数组对象没有forEach方法,晕。所以自行声明即可,代码如下:
if ( !Array.prototype.forEach ) {
Array.prototype.forEach = function forEach( callback, thisArg ) {
var T, k;
if ( this == null ) {
throw new TypeError( "this is null or not defined" );
}
var O = Object(this);
var len = O.length >>> 0;
if ( typeof callback !== "function" ) {
throw new TypeError( callback + " is not a function" );
}
if ( arguments.length > 1 ) {
T = thisArg;
}
k = 0;
while( k < len ) {
var kValue;
if ( k in O ) {
kValue = O[ k ];
callback.call( T, kValue, k, O );
}
k++;
}
};
}
此外,IE8不支持的js特性不止forEach一种,等以后遇到了再作补充。
6、SVG图形兼容方案:优雅降级
参考文章:http://www.zhangxinxu.com/wordpress/2013/09/svg-fallbacks/
对于svg图形是真的无法直接兼容了,因此使用优雅降级,在IE8下显示替代的jpg、png或gif图片。有三种比较实用的方法:一是用js修改<img>的src属性,这里省略;二是用HTML的hack实现优雅降级,类似于如下代码:
<svg width="96" height="96">
<image xlink:href="svg.svg" src="svg.png" width="96" height="96" />
</svg>
支持<svg>标签的浏览器会显示svg.svg,老版本浏览器会无视<svg>标签,渲染<image>标签,从而显示svg.png。
此外,还有一种比较巧妙的方法:
<img src="data:image.svg" onerror="this.src='image.png'">
此法有弊端:当image.png出现问题无法载入时,会陷入死循环。
7、Canvas兼容方案:Excanvas.js
下载地址:http://code.google.com/p/explorercanvas/downloads/list
Canvas的功能非常强大,兼容IE8的工作也很繁巨。可能有很大一部分情况要用优雅降级,但是一些情况下可以使用Google出的Excanvas.js库。它是利用IE支持的VML对象来模拟Canvas的绘图的,有些情况下可用,但无法穷尽Canvas的所有功能。
使用方法:在页面中引用Excanvas.js文件,最好在<head>标签中。
具体注意事项可以参考文章:http://rockyuse.iteye.com/blog/1618298
8、Canvas+WebGL兼容方案:优雅降级
最近WebGL库——Three.js越来越流行了,但它只支持IE11+,IE8的兼容好像无解……所以只能优雅降级,但是效果肯定大打折扣。如有兼容方案,还请不吝赐教!
前端页面兼容ie8解决方法的更多相关文章
- IE8 浏览器文本模式变为杂项(quirks)页面变形的解决方法
IE8 浏览器文本模式(document.documentMode)变为杂项(quirks)页面变形的解决方法. 正常情况下 document.documentMode 输出为8,而变为杂项之后doc ...
- 用easyui从servlet传递json数据到前端页面的两种方法
用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 p ...
- VMware workstation虚拟机配置文件不兼容无法使用解决方法
VMware workstation虚拟机配置文件不兼容无法使用解决方法打开VMware workstation虚拟机提示:配置文件"--.vmx"是由Vmware产品创建,但该产 ...
- 前端页面禁止调试debugger方法汇总
打开控制台直接跳转页面 //debug调试时跳转页面 var element = new Image(); Object.defineProperty(element,'id',{get:functi ...
- Loadrunner11不能调用IE8解决方法大全
刚安装了英文版的Loadrunner 11, 用的是IE8, 开始录制时没有启动IE, 试了网上很多的方法,最终解决了问题.总结一般产生问题的原因如下. 1.当你主机上有多个浏览器时,loadrunn ...
- html-javascript前端页面刷新重载的方法汇总
记得我在兴安得力实习要转正的时候,我领导象征性的给我出了一套测试题目,里面就有js闭包和页面刷新等题目.今天把很久之前的测试题目之一,js页面刷新的方法以及页面自动刷新跳转和返回上一页和下一页等方法总 ...
- Easyui datebox控件打开页面就验证解决方法
问题描述: datebox时间控件有些场景下默认值需要为空,但是为空的情况下打开页面会自动验证,十分影响美观. 实现原理: <input class="easyui-databox&q ...
- 聊天界面使用IQKeyboardManager导航栏及整个页面上移的解决方法
问题: 使用第三方库IQKeyboardManager时会使整个页面上移,导航栏页偏移出了显示范围.在聊天界面就会使得上面的消息看不到. 解决方法: 首先说明:在聊天界面使用IQKeyboardMan ...
- Bootstrap Modal 关闭时右侧滚动条消失,页面左移的解决方法
问题描述:页面在打开Modal之前右侧有滚动条,Modal关闭之后,body中的class="modal-open"和style="padding-right: 17px ...
随机推荐
- C#题目及答案(2)
1. NET和C#有什么区别 答:.NET一般指 .NET FrameWork框架,它是一种平台,一种技术. C#是一种编程语言,可以基于.NET平台的应用. 2.一列数的规则如下: 1.1.2.3. ...
- HttpDns原理
什么是 DNS DNS(Domain Name System,域名系统),DNS 服务用于在网络请求时,将域名转为 IP 地址.能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数 ...
- python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...
- Servlet快速入门
servlet是运行在服务端的java小程序,用来处理客户端请求,响应给浏览器的动态资源 servlet规范:包含3个技术点 1.servlet技术 2.filter技术 3.listener技术 s ...
- iterrows(), iteritems(), itertuples()对dataframe进行遍历
iterrows(): 将DataFrame迭代为(insex, Series)对. itertuples(): 将DataFrame迭代为元祖. iteritems(): 将DataFrame迭 ...
- [osg]OSG使用更新回调来更改模型
使用回调类实现对场景图形节点的更新.本节将讲解如何使用回调来实现在每帧的更新遍历(update traversal)中进行节点的更新. 回调概览 用户可以使用回调来实现与场景 ...
- vue生命周期钩子
转载自:https://segmentfault.com/a/1190000008010666?utm_source=tag-newest https://segmentfault.com/a/119 ...
- vue-cli webpack打包不.map文件,iview 项目打包完,图标路径有问题
vue 项目打包出来有时候体积有点大,其实基本都是.map文件比较大,这些文件对项目没什么影响,可以直接在打包时候就不生成.map文件这样就不用每次删那么麻烦了, 做法: config中知道 inde ...
- JavaScript 第三章总结
Getting functional function的特点 function can be reused over and over much more readable function is p ...
- [Win10]安装msi时2503,2502错误及其解决
简述 刚安装了win10系统,在安装TortoiseGit和TortoiseSvn时,这两个软件是.msi后缀的安装文件,在点击安装时老是提示2503,2502错误,因此无法安装上 搜索了下一般都提到 ...