html5大行其道的时代已经到来。如果你还在等待浏览器兼容,说明你已经与web脱节几条街了。当然,这得益于移动客户端的蓬勃发展。如果还在纠 结于,是否应该掌握html5和css3技术时,请狠狠的抽自己几个嘴巴,然后,苦学吧!因为前端的春天已经到来,而且不止一个春天。如果你不信,我只能 说:爱信不信!
下面我们来看一个标准的html5标签结构:(我这里只是说标签,其它概不涉及)
html5
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文件,你只需要引入既可,像这样:
也有写作
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!
内容测试...
但如果类似于这样的结构,用用也无防:
3、IE条件注释
......
再看一遍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文档中的。
这是xhtml原有的命名空间,到了html5以后被简化了,。
来自Elco Klingen日志的方法一开始引起了广泛的关注。该技术包含了一个XML形式的命名空间,并使用了含有namespace前缀的元素,例如:
:html5这个前缀并不是一个标准的写法,你也可以用其它字符代替:hl5也是可以的。有了前缀之后,IE会识别新的元素,从而可以应用样式。在其他浏览器中一样有效,那么最后,你就成功地在各个浏览器中构建了一样的元素和一样的样式。
这个方法很明显有个缺陷:你必须在HTML文档中使用XML格式的命名空间,同样,你也需要在css中这么做:
html5\:section {
display: block;
}
那么对js的兼容性如何呢?下面是个测试deml
;html5
内容
测试结果,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上html5shim和html5shiv站点由Remy Sharp维护,与本
html5shiv
项目有着完全一致的分发点。 - Modernizr被和
html5shiv
同样的人发展着,因此modernizr.com包含最新版本的任何创建的自定义。 -
html5shiv
repo现在包含针对上面库所寻找的所有边界情况的测试,无论在开发和生产中,都经过了广泛的测试。
html5shiv详细更新日志可访问。
为什么叫做shiv?
shiv这个术语来自John Resig, 其使用这个术语是因为其地方意思:一个尖锐的对象,就像刀那样的武器,针对IE浏览器的。现在,有点小改变的是John实际上拼写错误了,其本想使用shim这个词,在计算机用语中,表示一个兼容的应用环境。不过从后来也可以理解的解释来看,John是个众所周知的“顽童”。
本文转自:IE6,IE7和8浏览器兼容HTML5标签的解决方案