HTML5 shiv也需要在IE9中使用,以支持HTML5元素。

10

我在网页中使用以下HTML5元素:header、article、section和nav。 现在,我已将所有上述的HTML5元素设置为display: block,并在头部包含了一个带有条件语句的HTML5 shiv:

<!--[if lt IE 9]>
<script src="dist/html5shiv.js"></script>
<![endif]-->

这个网站在IE7和IE8中工作正常 - 这表明html5shiv确实发挥了它的作用。 然而,当我在IE9中测试该网站时,所有HTML5元素内部的内容都缺少样式。

只要我将条件语句更改为:

<!--[if IE]>
<script src="dist/html5shiv.js"></script>
<![endif]-->

现在对html5元素及其子元素应用了正确的样式。我检查了我的IE版本,它显示我有IE 9.0.8112.16421版本。

我也应该提到这些网站是用PHP构建的,并使用PEAR的Cache_Lite进行缓存。但是,在一个简单的静态HTML页面上进行的测试对我来说给出了相同的结果。

有什么想法吗?


你的HTML文件的doctype是什么? 你使用 X-UA-COMPATIBLE 吗? 顺便说一下,我认为在第二个例子中你的意思是 <!--[if lte IE 9]> - t.niese
<!DOCTYPE html> 是 HTML5 推荐的写法。在 head 元素下,我使用了 <meta charset="utf-8">。感谢您的注意,我已更新了我的问题 - 我使用了 [if IE]。 - am_
你确定你没有使用 <meta http-equiv="X-UA-Compatible" 或发送 X-UA-Compatible: 标头吗?(http://www.sitepoint.com/html5-shim-ie-emulation-mode/) - t.niese
2
你还没有将IE设置为IE7/8兼容模式吗? - JJJ
没错,我还没有将它设置为兼容模式。但是如果我将其设置为兼容模式并刷新页面,它将正常呈现(因为使用了HTML5 shiv)。 - am_
没有发送 X-UA-Compatible 的标头,meta 标签也是一样的。 - am_
2个回答

29

我终于成功地找出了问题所在。 在DOCTYPE HTML标签之前,我有一条注释。这似乎会破坏IE9识别HTML5元素的能力。

这就是我之前的代码:

<!-- Served From Cache: Wednesday 13th of February 2013 03:02:22 PM -->
<!DOCTYPE html>
<html>
    <head>

所以我随后把注释移到了文档类型下面,就解决了这个问题。


12
回到这里并告知社区,给你点赞。你可能也想将此标记为正确答案。一般来说,文档类型声明之前不应该有任何内容,因为正如你所注意到的,会出现奇怪的问题! - Michael Giovanni Pumo

0

试试这段代码

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

3
这该如何解决IE9的问题? - JJJ
2
你读了问题吗?他已经在使用shiv了。 "当我将条件语句更改为:......html5元素及其子元素现在会应用正确的样式。" OP想知道为什么IE9不会对没有shiv的元素进行样式设置,因为IE9应该本地支持HTML5元素。无论如何,在IE9中编写“<!--[if lt IE 9]>”都不会有任何作用。 - JJJ
html5shiv代码不再托管在googlecode上。它已经迁移到Github - Agi Hammerthief

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接