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 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
用jquery实现等比例缩放图片效果插件
Jul 24 Javascript
23个超流行的jQuery相册插件整理分享
Apr 25 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
js鼠标及对象坐标控制属性详细解析
Dec 14 Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
node.js中的fs.lchmod方法使用说明
Dec 16 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
浅析Javascript中bind()方法的使用与实现
May 30 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
Sep 05 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
UserData用法总结 lanyu出品
2010/07/01 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
Python中用max()方法求最大值的介绍
2015/05/15 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
Python退火算法在高次方程的应用
2018/07/26 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
详解python的super()的作用和原理
2020/10/29 Python
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
初一英语教学反思
2014/01/11 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
给学校的建议书
2014/03/12 职场文书
商务代表岗位职责
2015/02/15 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
各种货币符号快捷输入
2022/02/17 杂记
Java详细解析==和equals的区别
2022/04/07 Java/Android