<style>必须位于HTML文档的<HEAD>中吗?</style>

时间:2009-08-20 00:52:08

标签: html coding-style html-head

严格来说,style代码是否需要位于HTML文档的head内? 4.01标准意味着,但没有明确说明:

  

STYLE元素允许作者   将样式表规则放在首位   该文件。 HTML允许任何数字   HEAD部分中的STYLE元素   一份文件。

我说“严格说来”因为我有一个应用程序将样式元素放在正文中,而我测试过的所有浏览器似乎都使用了样式元素。我只是想知道这是否合法。

10 个答案:

答案 0 :(得分:98)

style应该仅包含在文档的head中。

除了验证点之外,在style上使用body时可能感兴趣的一个警告是flash of unstyled content。浏览器会在显示后显示样式的元素,使它们在大小/形状/字体和/或闪烁上移动。这通常是工艺糟糕的表现。一般情况下,您可以将style放在任何您想要的地方,但尽可能避免使用它。

HTML 5引入了scoped属性,允许style标记包含在正文的任何​​位置,但随后又将其删除。

答案 1 :(得分:19)

虽然其他答案都是正确的,但我很惊讶没有人解释哪里标准不允许head之外的样式。

实际上是in the section on The head Element(并在DTD中):

<!-- %head.misc; defined earlier on as "SCRIPT|STYLE|META|LINK|OBJECT" -->
<!ENTITY % head.content "TITLE & BASE?">

<!ELEMENT HEAD O O (%head.content;) +(%head.misc;) -- document head -->

是的,我知道。 DTD难以阅读。

这是STYLE元素出现的唯一地方,因此隐含地在其他地方无效。

答案 2 :(得分:18)

根据最新的WhatWG和W3C规范,是的,style元素必须始终位于head。有一段时间,规范包含scoped元素的style属性,当存在时,允许将它们放置在正文中的元素内,以仅设置该元素的后代的样式...但该特征从不使它成为任何真正的浏览器(至少不需要通过开发人员标志启用)并从两个规范"due to lack of implementer interest"中删除。因此,style元素现在只允许在允许元数据内容的上下文中使用,而元数据内容只是头部。

(好吧,相当是真的 - 您可以合法地将元数据内容(包括style元素)放在body内的template元素中,但它如果你在支持模板的浏览器中,它实际上不会生效。这实际上只是一个愚蠢的技术性。)

WhatWG spec有这样说:

  

4.2.6。 style元素

     

Categories

     

Metadata content

     

Contexts in which this element can be used

     

预计metadata content的位置   在<noscript>元素中,该元素是<head>元素的子元素。

CTRL-Fing single-page spec显示内容模型包含元数据内容的唯一元素是head元素。

同时,latest W3C draft spec包含完全相同的措辞,但它们还列出了template元素的内容模型中的元数据内容。 (WhatWG以不同的方式概括template并将其内容模型列为nothing。)

WhatWG规范中的非规范性index of elements确认style元素的唯一允许父级是headnoscript元素。 (同一索引的W3版本错误地指出流内容可以包含<style>个元素,但这是W3C在删除scoped属性时引入的错误。我有{{3}打开来解决它。)

答案 3 :(得分:14)

他们不应该超越头脑,但无论如何他们都会工作;虽然你可能会注意到快速闪烁。该网站不应该使用头部以外的样式标签进行验证,但这真的很重要吗?此外,链接标签也可以在头部以外工作,即使它们不应该也是如此。

答案 4 :(得分:4)

与其他回复一样,它实际上并不需要在那里。但是,它不会验证。在这种情况下,这可能或不重要,但请记住,html的渲染完全取决于浏览器。据我所知,今天使用的所有浏览器都支持将它置于脑外,但是你不能保证将来的浏览器和未来的浏览器版本。

坚持标准,你就更安全了。非常讨论会有多安全。

答案 5 :(得分:3)

<head>内的任何地方的样式标记都不会使用W3C规则进行验证。

答案 6 :(得分:3)

HTML5.2 W3C建议,2017年12月14日(不是上面提到的早期草案)说,您可以加入<style>

  

“在体内,预期流量的位置。”   (section 4.2.6)

答案 7 :(得分:2)

根据此网站,HTML5.1(草案中)和WHATWG允许将<style>标记放入正文中:

http://www.html.am/tags/html-style-tag.cfm

浏览器似乎也支持了很长一段时间。根据StackOverflow的回答,Firefox 3 +,IE6 +,Safari 2+和Chrome 12+支持它:

https://stackoverflow.com/a/10989663/297793

答案 8 :(得分:1)

根据HTML 5.2规范(草案中),样式标记仅允许在文档的头部。

HTML 5.2 Draft on Style Tag (Aug 18, 2016)

  

样式元素仅限于出现在头部   文档。

答案 9 :(得分:-1)

您可以在头部或身体部分内使用样式标记,也可以在html标记之外使用样式标记(不建议使用外侧html)。实时项目很多时候你可以看到他们在html标签旁边使用样式标签