HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法


Posted in Javascript onNovember 25, 2015

HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单。

HTML5的新标签元素有:

<header>定义页面或区段的头部;
<footer>定义页面或区段的尾部;
<nav>定义页面或区段的导航区域;
<section>页面的逻辑区域或内容组合;
<article>定义正文或一篇完整的内容;
<aside>定义补充或相关内容;

HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

使用他们能让代码语义化更直观,而且更方便SEO优化。但是此HTML5新标签在IE6/IE7/IE8上并不能识别,需要进行JavaScript处理。以下就介绍几种方式。
方式一:Coding JavaScript

<!--[if lt IE9]> 
<script> 
  (function() {
   if (! 
   /*@cc_on!@*/
   0) return;
   var e = "abbr, article, aside, audio, canvas, datalist, details, dialog, eventsource, figure, footer, header, hgroup, mark, menu, meter, nav, output, progress, section, time, video".split(', ');
   var i= e.length;
   while (i--){
     document.createElement(e[i])
   } 
})() 
</script>
<![endif]-->

如果是IE9以下的IE浏览器将创建HTML5标签, 这样非IE浏览器就会忽视这段代码,也就不会有无谓的http请求了。

第二种方法:使用Google的html5shiv包(推荐)

<!--[if lt IE9]> 
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

由于国内google的服务器访问卡,建议调用国内的cdn

<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->

但是不管使用以上哪种方法,都要初始化新标签的CSS.因为HTML5在默认情况下表现为内联元素,对这些元素进行布局我们需要利用CSS手工把它们转为块状元素方便布局

/*html5*/

article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}

但是如果ie6/7/8 禁用脚本的用户,那么就变成了无样式的"白板"网页,我们该怎么解决呢?

我们可以参照facebook的做法,即引导用户进入带有noscript标识的 “/?_fb_noscript=1”页面,用 html4 标签替换 html5 标签,这要比为了保持兼容性而写大量 hack 的做法更轻便一些。

<!--[if lte IE 8]> 
<noscript>
   <style>.html5-wrappers{display:none!important;}</style>
   <div class="ie-noscript-warning">您的浏览器禁用了脚本,请<a href="">查看这里</a>来启用脚本!或者<a href="/?noscript=1">继续访问</a>.
   </div>
</noscript>
<![endif]-->

这样可以引导用户开启脚本,或者直接跳转到HTML4标签设计的界面。

Javascript 相关文章推荐
javascript静态的url如何传递
May 03 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
Jan 14 Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 Javascript
将form表单中的元素转换成对象的方法适用表单提交
May 02 Javascript
Javascript图片上传前的本地预览实例
Jun 16 Javascript
JS实现文字放大效果的方法
Mar 03 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
May 17 Javascript
jquery与js实现全选功能的区别
Jun 11 jQuery
Angular实现搜索框及价格上下限功能
Jan 19 Javascript
原生js实现贪食蛇小游戏的思路详解
Nov 26 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 #Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 #Javascript
基于jQuery实现响应式圆形图片轮播特效
Nov 25 #Javascript
jquery+css实现动感的图片切换效果
Nov 25 #Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 #Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 #Javascript
Prototype框架详解
Nov 25 #Javascript
You might like
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
php 邮件发送问题解决
2014/03/22 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
浅谈javascript的调试
2015/01/28 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
python回调函数的使用方法
2014/01/23 Python
python 全局变量的import机制介绍
2017/09/07 Python
python浪漫表白源码
2019/04/05 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
python使用Geany编辑器配置方法
2020/02/21 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
活动策划邀请函
2014/02/06 职场文书
企业后勤岗位职责
2014/02/28 职场文书
美术学专业求职信
2014/07/23 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
遗嘱格式范本
2015/08/07 职场文书
Python基础之pandas数据合并
2021/04/27 Python
Nginx 常用配置
2022/05/15 Servers