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 相关文章推荐
取键盘键位ASCII码的网页
Jul 30 Javascript
javascript 最常用的10个自定义函数[推荐]
Dec 26 Javascript
javascript 浏览器检测代码精简版
Mar 04 Javascript
编写Js代码要注意的几条规则
Sep 10 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
Dec 17 Javascript
js实现水平滚动菜单导航
Jul 21 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
Sep 19 Javascript
Angular4 Select选择改变事件的方法
Oct 09 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
Jun 16 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
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
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
javascript 写类方式之七
2009/07/05 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
python将时分秒转换成秒的实例
2019/12/07 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
某公司Java工程师面试题笔试题
2016/03/27 面试题
自我评价的正确写法
2013/09/19 职场文书
高三毕业生自我鉴定
2013/12/20 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
体育专业自荐书
2014/05/29 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
和谐社区口号
2014/06/19 职场文书
初中学校对照检查材料
2014/08/19 职场文书
廉洁自律个人总结
2015/02/14 职场文书
会计主管竞聘书
2015/09/15 职场文书
Python实现排序方法常见的四种
2021/07/15 Python
java实现面板之间切换功能
2022/06/10 Java/Android
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python