如何让IE9以下版本(ie6/7/8)认识html5元素


Posted in HTML / CSS onApril 01, 2013

每个浏览器都有一份清单列举自己所支持的HTML元素。不在清单上的元素都将被视为未知元素。浏览器不会给未知元素设定任何样式(不同浏览器对元素会有不同的默认样式)。在IE9之前的版本中,也不能对未知元素设定样式。未知元素的DOM也显示不正确,IE会在DOM中插入一个没有子元素的空节点。所有你原本认为将会成为这个未知元素的子元素的元素会成为其兄弟节点。

针对这个问题有一个弥补方案,在使用里如article标签之前先用js创建一个虚假的article元素,IE就会识别这个元素了,而支持用css设定样式。这个虚假元素甚至都不需要插入到DOM中。

请看如下的例子

复制代码
代码如下:

< !DOCTYPE HTML>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>unknown elements</title>
<style>
article{display:block;border:1px solid red}
</style>
</meta></head>
<body>
<article>
<h1>welcome to feimos's blog</h1>
<p>This is your <span>first time to visit this webSite.</span></p>
</article>
</body>
</html>

IE6不会识别article,所以也不会有红色边框。

如何让IE9以下版本(ie6/7/8)认识html5元素

但是如果我们在head中加入一句js,情况立马就不一样了。

复制代码
代码如下:

<script type="text/javascript">
document.createElement("article");
</script>

IE6假装它认识这个元素,正确显示了效果。

如何让IE9以下版本(ie6/7/8)认识html5元素

我们可以为所有新的HTML5元素都一次性创建一份虚假副本,以后就无需担心那些不能良好支持HTML5的浏览器了。Remy Sharp的HTML5 enabling script就是帮助我们做这些事情的,该脚本的基本想法如下:

复制代码
代码如下:

<!--[if lt IE 9]>
<script type="text/javascript">
var e=("abbr,article,aside,audio,canvas,datalist,details,"+
"figure,footer,header,hgroup,mark,menu,meter,nav,output,"+
"progress,section,time,video").split(',');
for(var i=0;i<e .length;i++){
document.createElement(e[i]);
}
</script>
< ![endif]-->

首先利用条件注释判断是不是IE9之前版本,如果是就执行js。先把所有新标签写入e数组中,然后遍历整个数组,并创建副本。

该脚本已经托管在Google Project Hosting上,你可以直接外链这个脚本:

复制代码
代码如下:

<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
< ![endif]-->

另外,这段脚本需要放在页面起始的部分,最好是head中,不要放在底部。这样IE在解析页面标签之前就会先运行这段代码。
HTML / CSS 相关文章推荐
css3实现波纹特效、H5实现动态波浪效果
Jan 31 HTML / CSS
css3 伪元素和伪类选择器详解
Sep 04 HTML / CSS
CSS3属性background-size使用指南
Dec 09 HTML / CSS
纯CSS3大转盘抽奖示例代码(响应式、可配置)
Jan 13 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
Sep 14 HTML / CSS
简单介绍HTML5中audio标签的使用
Sep 24 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
Sep 07 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
Sep 23 HTML / CSS
详解HTML5常用的语义化标签
Sep 27 HTML / CSS
总结html5自定义属性有哪些
Apr 01 HTML / CSS
html5拖拽应用记录及注意点
May 27 HTML / CSS
浅析HTML5 Landmark
Sep 11 HTML / CSS
html5 拖拽上传图片实例演示
Apr 01 #HTML / CSS
html5 跨文档消息传输示例探讨
Apr 01 #HTML / CSS
Html5实现如何在两个div元素之间拖放图像
Mar 29 #HTML / CSS
检测浏览器是否支持html5视频的代码
Mar 28 #HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
Mar 25 #HTML / CSS
HTML5中的Article和Section元素认识及使用
Mar 22 #HTML / CSS
纯html5+css3下拉导航菜单实现代码
Mar 18 #HTML / CSS
You might like
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
Web程序工作原理详解
2014/12/25 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
简单讲解Python中的闭包
2015/08/11 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
Python向excel中写入数据的方法
2019/05/05 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
linux系统都有哪些运行级别
2016/03/26 面试题
个人求职信范文分享
2013/12/13 职场文书
新闻专业个人求职信
2013/12/19 职场文书
工作说明书范文
2014/05/07 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
公司员工离职证明书
2014/10/04 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫