<STYLE>是否必须位于HTML文档的<HEAD>中?
严格来说, style
标签需要在HTML文档的head
吗? 4.01标准暗示着,但没有明确说明:
STYLE元素允许作者将样式表规则放在文档的头部。 HTML允许文档的HEAD部分中包含任意数量的STYLE元素。
我说“严格来说”是因为我有一个将样式元素放在body中的应用程序,而且我testing过的所有浏览器似乎都使用样式元素。 我只是想知道这是否合法。
style
应该只包含在文档的head
。
除了validation点之外,在body
上使用style
时可能会感兴趣的一个警告是无格式内容的闪烁 。 浏览器会在显示元素后显示样式,使他们在大小/形状/字体和/或闪烁上移动。 这通常是工艺不好的标志。 一般来说,只要有可能,就可以随时随地放置style
,但是尽量避免使用style
。
HTML 5引入了一个scoped
属性,允许style
标签被包含在主体中的任何地方,但是随后他们又将其删除。
虽然其他答案是正确的,我很惊讶没有人解释标准在哪里不允许风格。
它实际上在元素head
(和DTD中 ):
<!-- %head.misc; defined earlier on as "SCRIPT|STYLE|META|LINK|OBJECT" --> <!ENTITY % head.content "TITLE & BASE?"> <!ELEMENT HEAD OO (%head.content;) +(%head.misc;) -- document head -->
是的我知道。 DTD很难阅读。
这是STYLE
元素发生的唯一地方,所以隐含地在其他地方是无效的。
根据最新的WhatWG和W3C规范,是的, style
元素必须始终在head
。 有一段时间,规范包含了style
元素的scoped
属性,当存在的时候,允许它们被放置在body中的一个元素中,以仅仅风格化该元素的后代…但是这个特性从来没有将它变成真正的浏览器至less不是不需要通过开发者标志来启用)并且由于缺乏实施者兴趣而被从两个规格中移除。 因此, style
元素现在只允许在允许元数据内容的上下文中使用,而元数据内容只是头部。
(好吧,这不是真的 – 你可以合法地将元数据内容(包括style
元素)放在template
元素内部,但是如果你在支持模板的浏览器中,它实际上不会生效。愚蠢的技术性。)
WhatWG规范有这样的说法:
4.2.6。
style
元素类别 :
元数据内容 。
可以使用这个元素的上下文 :
预期元数据内容 。
在作为<noscript>
<head>
元素的子元素的<noscript>
元素中。
通过单页规范的 CTRL-Fing揭示了其内容模型包括元数据内容的唯一元素是head
元素。
同时, 最新的W3C草案规范包含完全相同的措辞,除了它们还在template
元素的内容模型中列出元数据内容。 (WhatWG对template
不同的概念化,并将其内容模型列为空白)。
WhatWG规范中的元素的非规范索引确认style
元素的唯一允许的父项是head
或无noscript
元素。 (同一个索引的W3版本错误地指出,stream内容可以包含<style>
元素,但这是W3C在删除scoped
属性时引入的一个错误,我打开了一个拉取请求来解决这个问题。
他们不应该走出头顶,但他们仍然工作; 尽pipe你可能会注意到一个快速的闪烁。 该网站不应该用头部外的样式标签进行validation,但这真的很重要吗? 而且,链接标签也在头部外面工作,即使它们不应该。
就像其他答复所说,实际上并不需要在那里。 但是,它不会validation。 在这种情况下,这可能也可能不重要,但请记住,html的呈现完全取决于浏览器。 据我所知,今天所有使用过的浏览器都将支持将其放在首位,但是您不能保证将来的浏览器和未来的浏览器发布。
坚持标准,你更安全。 非常多的辩论要安全多less。
除了<head>
任何地方,样式标签都不会使用W3C规则进行validation。
根据这个网站,HTML5.1(草案)和WHATWG允许<style>
标签被放在正文中:
http://www.html.am/tags/html-style-tag.cfm
它似乎也被浏览器支持了很长一段时间。 根据这个StackOverflow答案,Firefox 3 +,IE6 +,Safari 2+和Chrome 12 +支持它:
根据HTML 5.2规范(草案),样式标签只允许在文档的头部。
HTML 5.2风格标签草案(2016年8月18日)
样式元素被限制在文档的头部。
你也可以在head部分或body部分使用style标签,也可以在html标签之外使用(不推荐使用out html)。 实时项目很多时候你可以看到他们使用html标签的样式标签