首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >html5shiv -为什么它只适用于IE?

html5shiv -为什么它只适用于IE?
EN

Stack Overflow用户
提问于 2012-05-02 12:44:52
回答 4查看 4.1K关注 0票数 4

我想开始使用一些HTML5标记,但担心它如何在不支持HTML5的浏览器上呈现。看起来html5shiv是一个我可以用在IE浏览器< 9上的解决方案。

但是,如果浏览器不支持HTML5并且不是IE怎么办?然后呢?为什么html5shiv是IE的东西?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-02 12:47:24

首先,要明确的是,html5shiv只是为了让您可以样式化某些HTML5标记(sectionarticle等)。正确无误。它没有为浏览器提供任何更一般意义上的"HTML5支持“。

考虑到这一点,请注意,IE <9是唯一不允许正确设置这些HTML5标记样式的浏览器,这就是为什么html5shiv只适用于它们。

其他浏览器(甚至像Netscape Communicator 4这样的非常老的浏览器)仍然会正确地解析无法识别的标签,并允许CSS应用于它们,正如您所期望的那样。

正如zzzzBov在他的回答中指出的那样,它们可能没有正确的默认样式(大多数(所有?)大小写要么为display: block,要么为nothing),因此即使对于非旧浏览器,也需要添加这些大小写。但这样做在非旧浏览器中工作得很好,而在oldIE中,添加这些默认样式-或任何样式-只有在使用html5shiv时才有效。

票数 8
EN

Stack Overflow用户

发布于 2012-05-02 16:02:30

元素的display属性的初始值为inline (ref)。内置的用户代理样式表将属性更改为已知元素的合理值;例如,标题和段落更改为块。

HTML5引入了新的元素,如页眉、页脚、文章和节( HTML5部分元素)。由于较老的浏览器不知道这些元素,因此它们将这些元素视为内联元素。因此,您必须手动为这些元素添加CSS规则:

代码语言:javascript
复制
header, footer, article, section { display: block; }

但正如在the Story of the HTML5 Shiv中提到的

...Internet Explorer6-8存在问题,因为它们不能识别未知元素;新元素不能保存子元素,并且不受CSS影响

该文章还提到了IE 6-8的解决方法:

顺便说一句,如果你想让

规则应用于IE中的未知元素,你只需要做document.createElement(elementName)。这以某种方式让CSS引擎知道具有该名称的元素存在

现在,关于你的问题: html5shiv使用了一些JavaScript技巧来使未知元素在IE6-8中可样式化。对于其他不支持HTML5的浏览器,如果需要,html5shiv会添加正确呈现HTML5元素所需的默认样式,这样您就不必自己定义HTML5规则(如上所述)。

请注意,html5shiv不会使浏览器支持HTML5。例如,不能让IE7播放通过HTML5 <video>标签嵌入的视频。

票数 4
EN

Stack Overflow用户

发布于 2012-05-02 12:47:26

其他浏览器只需设置它们的css display属性即可支持非标准元素:

代码语言:javascript
复制
header,
footer,
article,
section,
...etc... {
    display: block;
}

对于老版本的火狐和基于webkit的浏览器(在HTML5之前),这是所有需要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10407853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档