如何让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实现同时执行倾斜和旋转的动画效果
Oct 27 HTML / CSS
CSS3实现头像旋转效果
Mar 13 HTML / CSS
CSS3之transition实现下划线的示例代码
May 30 HTML / CSS
纯CSS3实现鼠标滑过按钮动画第二节
Jul 16 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
Jan 03 HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
Mar 07 HTML / CSS
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
Apr 26 HTML / CSS
h5调用摄像头的实现方法
Jun 01 HTML / CSS
HTML5新增加的功能详解
Sep 05 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
Jan 10 HTML / CSS
奇妙的 CSS shapes(CSS图形)
Apr 05 HTML / CSS
HTTP中的Content-type详解
Jan 18 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP学习之PHP运算符
2006/10/09 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
深入PHP magic quotes的详解
2013/06/17 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
vue实现登录功能
2020/12/31 Vue.js
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
python批量创建指定名称的文件夹
2019/03/21 Python
python3实现微型的web服务器
2019/09/03 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
tensorflow 实现数据类型转换
2020/02/17 Python
python collections模块的使用
2020/10/16 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
如何定义一个可复用的服务
2014/09/30 面试题
学生党员思想汇报
2013/12/28 职场文书
婚礼主持结束词
2014/03/13 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书