`
天梯梦
  • 浏览: 13733731 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

IE6,IE7和8浏览器兼容HTML5标签的解决方案

 
阅读更多

html5大行其道的时代已经到来。如果你还在等待浏览器兼容,说明你已经与web脱节几条街了。当然,这得益于移动客户端的蓬勃发展。如果还在纠 结于,是否应该掌握html5和css3技术时,请狠狠的抽自己几个嘴巴,然后,苦学吧!因为前端的春天已经到来,而且不止一个春天。如果你不信,我只能 说:爱信不信!

下面我们来看一个标准的html5标签结构:(我这里只是说标签,其它概不涉及)

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>html5</title>
</head>

<body>
    <header>
        <nav></nav>
    </header>
    <article>
        <section>
            <h2></h2>
            <p></p>
        </section>
    </article>
    
    <footer></footer>
</body>
</html>

 

html5标签的进步之处当然于它的语义化更直观。当然,这只是html5的进步的九牛之一毛,有人建议说:不要说html5的进步是革命性的,而是发展性的!我不反对此说法,但某方面的确是革命性的。这里不想跑题,我们只说标签。


当然,兴奋于如此美妙的语义化标签时,不仅仍要追问:IE支持吗?很不幸,答案是否定的。如果你已经被IE搞怕了,你只得继续忍受它无尽的折磨。(IE9和IE10已经兼容支持html5和css3.0)

不过你要庆幸,你生活的这个时代有很多天才。有人已经帮你把这个问题解决了!虽然,不能称上完美!

 

下面我们来看几个解决兼容IE6\7\8不支持html5标签的几个方法:

 

1、javascript: document.createElenment("......")

IE6\7\8不支持的部分原因是,它们不认为footer是一个有效的html标签。那么我们把它“制造”成一个标签不就行了吗?最直接的办法当然是,javascript 的方式创建:document.createElenment("......")!

(function(){
            var element=['header','footer','article','aside','section','nav','menu','hgroup','details','dialog','figure','figcaption'],
                len=element.length;
            while(len--){
                document.createElement(element[i])
            }
 })();

 

这只是简单创建几典型的html5标签,让它们在IE6\7\8可以成为标签。
有人已经写了一个完整的js文件,你只需要引入既可,像这样:

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

 

也有写作

<!--[if lte IE 9]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
< ![endif]-->

 

html5shiv和html5shim的区别只有"m"和"v",没有其它区别!当然这不是我说的。原文是:...the only difference is that "one has an m and one has a v - that's it."

 

这里要做一个特别的说明:就是IE特有的注释判断:

lte:就是Less than or equal to的简写,也就是小于或等于的意思。

lt :就是Less than的简写,也就是小于的意思。

gte:就是Greater than or equal to的简写,也就是大于或等于的意思。

gt :就是Greater than的简写,也就是大于的意思。

! : 就是不等于的意思,跟javascript里的不等于判断符相同

因为IE9虽然支持html5标签,但支持的不是很完整,所以,也可以写"lte",这取决于你的选择!

当然,不要忘了指定新建标签的display属性,大多情况下我希望标签是block的:

header,footer,article,aside,section,nav,menu,hgroup,details,dialog,figure,figcaption{display:block}

 

2、嵌套标签的方法

其实说白了就是在,语义化的html5标签内嵌套div等可用标签,然后只给div写样式,我是不赞成这样的写法的。这样做还不如,给标签一个有语义化的id或者class!

<!--[if lt IE 9]>
<style>
body > * .section {
    color: #ff0;
}
</style>
<![endif]-->
<style>
section .section {    color: #f00;
}
</style>
<section><div class="section">内容测试...</div></section>

 

但如果类似于这样的结构,用用也无防:

<nav >
        <ul class="test">
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </nav>

 

3、IE条件注释

<!--[if lt IE 9]><div class="section"><![endif]-->
<!--[if IE 9]><section class="section"><![endif]-->
<!--[if !IE]><!--><section class="section"><!--<![endif]-->
    ......
<!--[if lt IE 9]></div><![endif]-->
<!--[if IE 9]></section><![endif]-->
<!--[if !IE]><!--></section><!--<![endif]-->

 

再看一遍IE特有的注释判断:

lte:就是Less than or equal to的简写,也就是小于或等于的意思。

lt :就是Less than的简写,也就是小于的意思。

gte:就是Greater than or equal to的简写,也就是大于或等于的意思。

gt :就是Greater than的简写,也就是大于的意思。

! : 就是不等于的意思,跟javascript里的不等于判断符相同

相信大家都明白,这是怎么回事!这是一个更加蛋疼的办法!大量的html代码使原本想语义化的代码更加混乱不堪。而且要对样式的书写也不利。

 

4、使用xmlns定义文档的命我空间

xmlns 即是XHTML namespace的缩写,也就是所谓的“命名空间”。与DOCTYPE声明一样,xmlns也属于一种声明。与HTML文档中仍然存在DOCTYPE声 明不一样的是,在HTML文档是不存在xmlns的,我们平常所见到的xmlns都是出现在XHTML文档中的。

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

 

这是xhtml原有的命名空间,到了html5以后被简化了,。

<html lang="en">

 

来自Elco Klingen日志的方法一开始引起了广泛的关注。该技术包含了一个XML形式的命名空间,并使用了含有namespace前缀的元素,例如:

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html5="http://www.w3.org/html5/">
<body>
 <html5:section>
 <!-- content -->
 </html5:section>
</body>
</html>

 

:html5这个前缀并不是一个标准的写法,你也可以用其它字符代替:hl5也是可以的。有了前缀之后,IE会识别新的元素,从而可以应用样式。在其他浏览器中一样有效,那么最后,你就成功地在各个浏览器中构建了一样的元素和一样的样式。

 

这个方法很明显有个缺陷:你必须在HTML文档中使用XML格式的命名空间,同样,你也需要在css中这么做:

html5\:section {
 display: block;
}

 

那么对js的兼容性如何呢?下面是个测试deml

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html5="http://www.w3.org/html5/">
<head>
<title>;html5</title>
<meta charset="gb2312">
<style>
    html5\:section { display: block; width:100px; height:50px; background:#f00; border: 1px solid blue; color: #ff0; }
</style>
<script>
  window.onload = function(){
     alert(document.getElementById("test").innerHTML + "---id")
     alert(document.getElementsByTagName("section")[0].innerHTML + "---TagName")
     alert(document.getElementsByTagName("SECTION")[0].innerHTML + "---大写")
  }
</script>
</head>
<body>
    <html5:section id="test">内容</html5:section>
</body>
</html>

 

测试结果,IE6\7\8均测试通过,但fixfox和chrome里只有id能获取到,所以这种方法同样不是一个可取的方法!

 

目地址:https://github.com/aFarkas/html5shiv

下载:html5shiv-master

 

HTML5 Shiv已知问题及限制

  • shivMethods选项(覆盖document.createElement)以及html5.createElement创建元素,不是分离的,其公用父节点(另请参阅问题#64)。
  • 节点克隆问题目前HTML5 Shiv未处理。HTML5元素可以被动态创建,但是在所有情况下都不能被克隆。
  • 打印版本的HTML5 Shiv在打印的时候不得不修改了打印样式以及整个DOM. 在复杂站点,或很多打印样式的情况下,可能会造成性能以及/或样式问题。一个可行的解决方案是HTML5 Shiv的htc-branch, 其使用了其他技术实现IE8下的打印样式。

 

其他的HTML5元素项目

  • 最初的概念以及项目协作故事已经在“HTML5 Shiv的前世今生”中提及。
  • Jon Neal的IEPP(IE print project), 解决了最初html5shiv的打印问题。其被并入了html5shiv.
  • Shimprove, 2010年4月,修补cloneNode以及createElement,后来并入了html5shiv.
  • innerShiv, 2010年8月JD Barlett推出,解决了DOM中动态添加HTML5元素问题。jQuery增加了支持,使得innerShiv显得多余,加上html5shiv解决了相同的问题,因此,这个项目就到头了~
  • Google Code上html5shimhtml5shiv站点由Remy Sharp维护,与本html5shiv项目有着完全一致的分发点。
  • Modernizr被和html5shiv同样的人发展着,因此modernizr.com包含最新版本的任何创建的自定义。
  • html5shiv repo现在包含针对上面库所寻找的所有边界情况的测试,无论在开发和生产中,都经过了广泛的测试。

html5shiv详细更新日志可访问。

 

为什么叫做shiv?

shiv这个术语来自John Resig, 其使用这个术语是因为其地方意思:一个尖锐的对象,就像刀那样的武器,针对IE浏览器的。现在,有点小改变的是John实际上拼写错误了,其本想使用shim这个词,在计算机用语中,表示一个兼容的应用环境。不过从后来也可以理解的解释来看,John是个众所周知的“顽童”

 

 

本文转自:IE6,IE7和8浏览器兼容HTML5标签的解决方案

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    能够兼容IE8以下浏览器的H5 Video标签播放插件,测试可用

    标签中提到的"IE8"、"Html5"、"Video"和"网页"为我们指明了这个话题的核心。HTML5的`&lt;video&gt;`标签是现代网页中用于嵌入视频的标准方式,但IE8不支持这一特性。因此,这个插件解决了这个痛点,使得开发者可以使用标准...

    解决各种IE兼容问题_IE6_IE7_IE8_IE9_IE10

    这是一个JavaScript库,其目的是让旧版的IE(如IE5、IE6)的行为更接近符合Web标准的浏览器,支持更多的W3C标准,包括CSS2、CSS3选择器,并修复HTML和CSS的问题。例如: - 使IE5、IE6兼容到IE7模式:`&lt;!--[if lt IE ...

    IE7,IE8兼容H5标签

    本文将深入探讨如何使IE7和IE8兼容H5标签,并介绍相应的JavaScript解决方案。 一、H5新特性与IE浏览器的兼容性问题 HTML5的新特性包括离线存储、拖放功能、媒体元素、Canvas绘图、SVG矢量图、Geolocation定位、...

    ie6_ie7_ie8_ff(火狐)浏览器兼容性

    在IT行业的前端开发领域,浏览器兼容性一直是一个关键议题,特别是在处理旧版浏览器如IE6、IE7、IE8以及火狐(Firefox)时。本文将深入探讨这些浏览器的兼容性问题,以及如何通过特定的技术手段来实现跨浏览器的一致...

    Firefox, IE5, IE5.5, IE6, IE7, IE8多种浏览器兼容的问题

    ### Firefox, IE5, IE5.5, IE6, IE7, IE8 多种浏览器兼容的问题 在早期的Web开发阶段,不同的浏览器之间存在显著的技术差异,这导致了跨浏览器兼容性问题的出现。本篇文章将针对Firefox、IE5、IE5.5、IE6、IE7以及...

    完美解决IE(IE6/IE7/IE8)不兼容HTML5

    HTML5是现代网页开发的标准,它引入了许多...然而,需要注意的是,随着技术的发展,IE8及更早版本的市场占有率已经大大降低,开发者应优先考虑支持现代浏览器,同时为少量仍使用旧版IE的用户提供必要的兼容性解决方案。

    如何让div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器.pdf

    针对标题提及的"如何让div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器",这里将详细讨论一些关键的CSS兼容性问题及解决方案。 1. **DOCTYPE的影响**: DOCTYPE声明会影响浏览器进入何种文档模式。在HTML4或...

    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10

    使IE5,IE6,IE7,IE8兼容到IE9模式 &lt;!–[if lt IE 9]&gt; ”http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js”&gt;&lt;/script&gt; &lt;![endif]–&gt; 解决PNG显示问题 只需将透明png图片命名为*-trans.png 需要注意...

    ie8兼容h5css3解决方案

    针对这种情况,开发者通常需要寻找特定的解决方案来实现对这些新特性的模拟,以便在IE8上也能正常显示和运行。以下将详细介绍标题"ie8兼容h5css3解决方案"中涉及的知识点以及压缩包中的文件如何帮助实现这一目标。 ...

    ie9以下老浏览器不支持HTML5的解决方法

    对于那些使用IE9及以下版本的老用户来说,由于这些浏览器对HTML5的支持非常有限甚至不支持,这将直接影响到网站的功能性和用户体验。本文将探讨如何解决这一问题,并提供一些实用的方法。 #### 一、理解HTML5与IE9...

    常见浏览器兼容性问题与解决方案

    问题三是对于设置较小高度的标签(通常小于10px),在IE6、IE7以及遨游浏览器中,标签高度会超出预设值。为解决这个问题,可以使用`overflow: hidden;`或设置合适的`line-height`值,使其小于标签高度。 问题四是...

    浏览器兼容 谷歌IE8.js,IE9.js下载

    谷歌(Google)为了解决这个问题,推出了针对旧版Internet Explorer(IE)的兼容性解决方案,如`IE8.js`和`IE9.js`。这两个文件主要是为了帮助开发者在IE8和IE9中实现与现代浏览器更一致的行为和功能。 `IE8.js`和`...

    让IE兼容 HTML5的canvas标签

    然而,由于历史原因,早期版本的Internet Explorer(IE6到IE9)并不支持HTML5的新特性,包括canvas。为了使这些旧版IE浏览器能够兼容HTML5的canvas标签,开发者通常会利用名为"excanvas"的JavaScript库。 Excanvas...

    ie6浏览器下载

    为了在不卸载其他浏览器的情况下使用IE6,可能会有虚拟化或模拟解决方案,比如描述中提到的“VirtIE6.exe”,这可能是一个虚拟IE6环境,允许用户在隔离的环境中运行IE6,以测试网站在该浏览器下的兼容性,而不会影响...

    ie8以下浏览器不兼容jquery解决方案

    在实际开发中,根据项目需求和用户群体,可能需要权衡性能、兼容性和维护成本,选择最合适的解决方案。同时,随着技术的发展,逐渐放弃对过时浏览器的支持,转向现代浏览器,也是行业发展的趋势。

    jsp浏览器的兼容性

    浏览器兼容性解决方案 在 Web 开发中,浏览器兼容性是一个常见的问题,对于 JSP 开发人员来说尤其重要。本文档旨在帮助 JSP 开发人员解决浏览器之间的兼容性问题,提出解决方法,涵盖 Firefox、谷歌、百度和 IE6/7/...

    IE9之前的版本兼容HTML5标签

    在IT行业中,HTML5是网页...对于开发者来说,理解这些兼容性问题和解决方案是创建跨浏览器兼容网页的关键技能。在实际项目中,应始终考虑用户的浏览器环境,以确保网站或应用能在尽可能多的设备和浏览器上正常运行。

    2016年度最全整理浏览器兼容性问题与解决方案

    本文将针对标题和描述中提到的常见浏览器兼容性问题及其解决方案进行详细阐述。 首先,浏览器的解析差异是导致兼容性问题的主要原因。每个浏览器都有自己的内核,如Internet Explorer的 Trident、Firefox的 Gecko、...

    浏览器兼容代码大全

    ##### IE6 双边距 Bug 解决方案 ```css .float { margin: 10px; float: left; display: inline; /* 解决双边距问题 */ } ``` IE6存在一个双边距Bug,在某些情况下,浮动元素的左边距会比预期的大一倍。通过将...

Global site tag (gtag.js) - Google Analytics