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变量声明的知识点
Oct 28 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
Sep 20 Javascript
JS实现类似百叶窗下拉菜单效果
Dec 30 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
JS运动特效之链式运动分析
Jan 24 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 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
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
js常用排序实现代码
2010/12/28 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python2包含中文报错的解决方法
2018/07/09 Python
对python:print打印时加u的含义详解
2018/12/15 Python
django从后台返回html代码的实例
2020/03/11 Python
python selenium xpath定位操作
2020/09/01 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
任课老师推荐信范文
2013/11/24 职场文书
家长给老师的道歉信
2014/01/13 职场文书
护士辞职信模板
2014/01/20 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
销售辞职信范文
2015/03/02 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
Go并发4种方法简明讲解
2022/04/06 Golang