我正在使用HTML5 Boilerplate,直到现在,当我开始使用Selectivizr时,它才出现问题。由于某种原因,我不明白,IE8产生了一个Javascript错误。
经过一些测试,我注意到当我停止使用条件浏览器注释(在Boilerplate中)时,错误消失了,该注释根据您使用的浏览器向html
添加类:
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
正如我所说的,当我删除上面的代码并用<html>
替换它时,一切都很好。
因为我不想完全删除条件注释(它们帮助我编写浏览器特定的css),我想做同样的事情,但不是将其应用于html
,而是将其应用于<body>
:
<!--[if lt IE 7]> <body class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <body class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <body class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <body class="no-js" lang="en"> <!--<![endif]-->
一切似乎工作正常,但因为我是一个新手,我只是想验证这个解决方案是好的?还是有不利的一面?
还有一个离题的问题:当用户使用Firefox或Chrome访问网站时,将"使用"哪些body
?我猜它会"使用"body
没有一个类?
我的逻辑会告诉我写另一个条件注释,以确保在所有其他浏览器中"使用"body
,然而在官方的Boilerplate模板中没有这样的注释存在,因此我想它不需要…为什么不呢?
我们实际上最初在<body
>标签上有它们。:)
我们移动它们有两个小原因:
- IE6中的多个类名错误
- 使用body元素的CMS。
您可以将类移动到<body>
,没有太多问题。您也可以将lang=en
保留在HTML元素上,以清理内容。
更多细节在这里:https://github.com/h5bp/html5-boilerplate/issues/44