我想开始使用一些HTML5标签,但担心它会如何在不支持HTML5的浏览器上呈现。似乎html5shiv是我可以用于IE浏览器的解决方案< 9。
但是,如果浏览器不支持HTML5并且不是IE,该怎么办?然后怎样呢?为什么html5shiv是IE的东西?
答案 0 :(得分:8)
首先,为了清楚起见,html5shiv只是使它能够正确设置某些HTML5标签(section
,article
等)的样式。它没有给浏览器" HTML5支持"在任何更一般意义上的术语。
考虑到这一点,请注意IE< 9是唯一不允许正确设置这些HTML5标签样式的浏览器,这就是html5shiv仅适用于它们的原因。
其他浏览器(即使是非常旧的浏览器,如Netscape Communicator 4)仍会正确解析无法识别的标签,并允许CSS按照您的预期应用于它们。
正如zzzzBov在他的回答中指出的那样,他们可能没有正确的默认样式(在大多数(所有?)情况下都是display: block
或者没有),所以你甚至需要添加它们非oldIE浏览器。但这样做在非oldIE浏览器中运行良好,而在oldIE中,添加这些默认样式---或任何样式 - 只有在使用html5shiv时才有效。
答案 1 :(得分:4)
元素的display
属性的初始值为inline
(ref)。内置的用户代理样式表将属性更改为已知元素的合理值;例如,标题和段落将更改为阻止。
HTML5引入了新的元素,如页眉,页脚,文章和部分(HTML5分区元素)。由于旧版浏览器不了解它们,因此它们将这些元素视为内联。因此,您必须手动为这些元素添加CSS规则:
header, footer, article, section { display: block; }
但正如the Story of the HTML5 Shiv中提到的那样:
... Internet Explorer 6-8因为无法识别而出现问题 未知元素;新元素无法容纳孩子 不受CSS影响
该文章中还提到了IE 6-8的解决方法:
顺便说一句,如果你想要CSS规则应用于IE中的未知元素,你 只需要做document.createElement(elementName)。以某种方式让 CSS引擎知道具有该名称的元素存在
现在,关于你的问题:html5shiv使用一些JavaScript技巧在IE 6-8中制作未知元素 styleable 。对于不支持HTML5的其他浏览器,如果需要,html5shiv会添加正确呈现HTML5元素所需的默认样式,这样您就不必自己定义CSS规则(如上所述)上文)。
请注意,html5shiv 不会使浏览器支持HTML5 。例如,它无法使IE7播放通过HTML5 <video>
标签嵌入的视频。
答案 2 :(得分:2)
其他浏览器只需设置其css display
属性即可支持非标准元素:
header,
footer,
article,
section,
...etc... {
display: block;
}
对于旧版本的Firefox和基于webkit的浏览器(HTML5之前版本),这就是必要的。
答案 3 :(得分:0)
htmlshiv是一个'IE'的东西,因为某些版本的IE [仍然]缺少许多HTML5功能。在chrome或其他webkit浏览器中有效的方法可能无法在IE中运行,因此htmlshiv TRIES可以对javascript的缺失功能进行调整。它也是一种polyfill,确切地说。