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 DOM学习第四章 getElementByTagNames
Feb 19 Javascript
读jQuery之四(优雅的迭代)
Jun 20 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
Apr 10 Javascript
JavaScript中对象property的删除方法介绍
Dec 30 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
Aug 08 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
浅析上传头像示例及其注意事项
Dec 14 Javascript
Google 爬虫如何抓取 JavaScript 的内容
Apr 07 Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 Javascript
vue+element+Java实现批量删除功能
Apr 08 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 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
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
python中私有函数调用方法解密
2016/04/29 Python
python去掉行尾的换行符方法
2017/01/04 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
信息部岗位职责
2013/11/12 职场文书
安全教育演讲稿
2014/05/09 职场文书
门面房租房协议书
2014/08/20 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
爱晚亭导游词
2015/02/09 职场文书
个人收入证明格式
2015/06/24 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
源码安装apache脚本部署过程详解
2022/09/23 Servers