严格来说,style
代码是否需要位于HTML文档的head
内? 4.01标准意味着,但没有明确说明:
STYLE元素允许作者 将样式表规则放在首位 该文件。 HTML允许任何数字 HEAD部分中的STYLE元素 一份文件。
我说“严格说来”因为我有一个应用程序将样式元素放在正文中,而我测试过的所有浏览器似乎都使用了样式元素。我只是想知道这是否合法。
答案 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
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
元素的唯一允许父级是head
或noscript
元素。 (同一索引的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+支持它:
答案 8 :(得分:1)
答案 9 :(得分:-1)
您可以在头部或身体部分内使用样式标记,也可以在html标记之外使用样式标记(不建议使用外侧html)。实时项目很多时候你可以看到他们在html标签旁边使用样式标签