严格来说,style
标记是否需要head
位于HTML文档的内部?4.01标准暗示了这一点,但未明确说明:
STYLE元素允许作者将样式表规则放在文档的开头。HTML允许在文档的HEAD部分中使用任意数量的STYLE元素。
我说“严格来说”是因为我有一个将样式元素放入体内的应用程序,而我测试过的所有浏览器似乎都使用了样式元素。我只是想知道那是否合法。
style
中的body
,所以这对我来说已经足够好了,无论作者指南各节所暗示的是什么。
严格来说,style
标记是否需要head
位于HTML文档的内部?4.01标准暗示了这一点,但未明确说明:
STYLE元素允许作者将样式表规则放在文档的开头。HTML允许在文档的HEAD部分中使用任意数量的STYLE元素。
我说“严格来说”是因为我有一个将样式元素放入体内的应用程序,而我测试过的所有浏览器似乎都使用了样式元素。我只是想知道那是否合法。
style
中的body
,所以这对我来说已经足够好了,无论作者指南各节所暗示的是什么。
Answers:
style
应该只包含head
在文档的中。
除了验证点,在使用时style
,您可能会感兴趣的一个警告body
是未样式化内容的闪烁。浏览器将获得在显示后将被设置样式的元素,从而使它们在大小/形状/字体和/或闪烁上移动。通常,这是工艺差的标志。通常,您可以随意放置style
任何地方,但是请尽可能避免使用它。
HTML 5引入了一个scoped
属性,该属性允许将style
标签包含在正文中的所有位置,但随后又将其删除。
scoped
属性,请参见caniuse.com/#feat=style-scoped。
style
标签,body
因此,尽管该规范是作者的一部分,但我认为主体样式仍然有效。github.com/whatwg/html/issues/1605#issuecomment-235961103
根据当前规范,是的,style
元素必须始终位于中head
。没有例外(如果要计数的话,style
元素内的template
元素除外)。
历史上并非总是如此。如果您关心该规范及其历史的详细信息,请继续阅读。
无论规格如何,使用 style
在所有主要浏览器中元素body
都或多或少地起作用。但是,这被认为是不好的做法,因为它违反了规范并且因为它可能导致不良后果,例如较差的渲染性能或“样式样式内容闪烁”。
style
元素在HTML 2中不存在。它们是在HTML 3.0中引入的,它们包含在可以包含在The Head Element中的元素列表中,但是中的元素列表中不包含在The Body元素中可以包含的元素列表中。因此,在第一次指定元素时,它只能包含在中head
。
直到HTML 5引入了(自删除后)scoped
属性以来,情况一直如此(尽管使用了不同的措辞表示)。style
元素。当存在此属性时,该属性旨在允许将style
元素放置在正文中的元素内,以仅设置该元素的后代的样式。但是,该功能从未在任何真正的浏览器中使用过(至少不需要通过开发者标志启用),并且由于缺乏实现者的兴趣而从W3C和WhatWG规范中删除了该功能。此后,style
仅在允许元数据内容的上下文(仅是头部)中允许元素。因此,我们回到了与HTML 5之前相同的规则。
但是,由于两个规范组织都犯了一个错误,两个规范中作为附录包括的元素的非规范索引未正确更新以反映对的删除scoped
,从而使其与规范不一致。我向WhatWG和W3C指出了这一点,并在这样做的过程中不知不觉地引发了使这两个规范发生差异的运动事件。
WhatWG解决规范规范和非规范索引之间不一致的方法是接受我的补丁程序来纠正非规范索引。
另一方面,W3C拒绝了我的等效补丁程序,而是建议更新规范规范以允许使用中的style
元素body
,同时请注意这可能会引起问题,并应“谨慎”进行处理。进行此更改的原因是使规范与现实生活中的浏览器行为保持一致。
因此,从2017年3月开始,对这个问题的正式答案取决于您选择听哪个标准组织。如果您列出了(通常更受人尊敬的)WhatWG规范,则该style
元素中不允许使用body
。如果您列出了W3C规范,则允许这样做,但不建议这样做。
W3C与WhatWG之间的2019年4月和平条约结束了这种愚蠢的状况(也许像许多其他此类矛盾一样)同意WhatWG规范将成为一个真正的实时HTML标准,而W3C只会从编号中释放快照HTML规范,而不是并行开发竞争规范。因此,从2017年到W3C分支的更改,允许中的style
元素body
不再是任何当前规范的一部分;这仅仅是历史的好奇。
因此,今天,我们只需要关注WhatWG规范即可确定正式允许的内容。它有这样说:
4.2.6。的
style
元素分类:
可以使用此元素的上下文:
期望元数据内容的地方。
在<noscript>
元素中是元素的子<head>
元素。
单页规范中的 CTRL-Fing 显示,其内容模型包含元数据内容的唯一元素是head
元素。
尽管其他答案是正确的,但令我惊讶的是,没有人解释标准在哪些地方不允许使用外部样式head
。
它实际上在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
元素发生的唯一位置,因此暗中在其他地方无效。
他们不应该超出头脑,但他们仍然可以工作。尽管您可能会注意到快速闪烁。该网站不应该使用头部之外的style标签进行验证,但这真的重要吗?同样,链接标签也可以在头部之外工作,即使不应该这样做。
style
S IN踢。
根据此站点的介绍,HTML5.1(草稿中)和WHATWG允许将<style>
标签放在正文中:
http://www.html.am/tags/html-style-tag.cfm
浏览器似乎也已经支持了一段时间。根据这个StackOverflow答案,Firefox 3 +,IE6 +,Safari 2+和Chrome 12+支持它: