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 学习笔记(十六) js事件
Feb 01 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
Jan 15 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
跟我学习javascript的this关键字
May 28 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
JS实现按钮控制计时开始和停止功能
Jul 27 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
Aug 06 Javascript
关于jquery layui弹出层的使用方法
Apr 21 jQuery
微信小程序获取位置展示地图并标注信息的实例代码
Sep 01 Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 Javascript
JQuery发送ajax请求时中文乱码问题解决
Nov 14 jQuery
vue实现购物车功能(商品分类)
Apr 20 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 gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
Python脚本实现下载合并SAE日志
2015/02/10 Python
微信跳一跳python代码实现
2018/01/05 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
庆七一活动总结
2014/08/27 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
会计出纳岗位职责
2015/03/31 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
mysql如何能有效防止删库跑路
2021/10/05 MySQL
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android