HTML正文中的样式和脚本标签......为什么不呢?

Dan*_*ark 45 html syntax

[这与此问题有关,但不是因为它不是关于电子邮件.]

在许多情况下 - 特别是在使用CMS或其他人的框架时,将<style>标签和<script>标签嵌入到<body>比在框架中更容易<head>.这似乎适用于IE6,IE7(Windows),Firefox 3.x和Safari(OS X).

严格来说,这是错的吗?如果是的话,它会带来什么负面影响......除了在一些客户中完全被忽视之外?

注意:很高兴每个人都想谈论DRY和集中风格.想象一下我想在文档中使用样式标签,因为它们不是全球性的,并且我不能在每页基础上访问头部.无论出于何种原因,无论是网站的页面差异,还是每个段落的差异或其他原因.我对跟踪和改变很难感兴趣.我担心在体内使用风格可能会产生什么后果.

你集中了那些核心的东西.中央样式表中的其他一切都很臃肿.

Chr*_*ini 27

尽管在body标签中不允许显式声明状态样式标签,但规格并不重要.每个主要浏览器都支持样式标签,这最终是用户看到您网站的方式.*虽然长期以来一直在推动浏览器行业提供更好的标准和标准支持,但长期以来一直都是推动破坏文件以及可以.

领导HTML5规范工作的Google同时维护google.com,这违反了保存字节的规范,将引号排除在其属性值之外,使用针对CSS规范的选择器黑客,包括没有类型或语言的脚本标记,以及链接没有类型的标签.一个纯粹主义者可能会争辩说,互联网上最常用的网站之一违反了规范,并且存在被误导的严重危险.或者,我们可以推断,没有浏览器会进入流行使用,无法在规范上呈现如此广泛使用的黑客.

因此,问题更多的是浏览器行业的发展方向 - 这也是更好的规范之一,但也尽力遵守违反这些规范的网页的意图.我敢打赌,风格标签将在未来很长一段时间内保持在体内.

*在撰写本文时,Firefox 3 +,IE6 +,Safari 2 +,Chrome 12+中的HTML5文档类型支持正文中的样式标记.支持可能会更进一步,但这些浏览器很少见于互联网上.

  • 虽然我同意这是最相关的答案,但我认为值得指出,只要值不包含空格/非法字符,引号在所有属性上都是可选的. (7认同)
  • 以前的规范确实允许这样做,但不允许XHTML:[W3解释了XHTML1和HTML4之间的区别](http://www.w3.org/TR/xhtml1/diffs.html#h-4.4) (2认同)

Sam*_*son 16

可以使用<script><style>标签的上下文取决于您使用的doctype.例如,我假设您使用的是HTML5文档类型:

<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)

脚本标签有HTML5的doctype下三个背景:

  1. 元数据内容的预期.
  2. 在预期措辞内容的地方.
  3. 需要脚本支持的元素.

风格标签具有HTML5 DOCTYPE下一个稍微复杂的上下文结构:

  1. 如果缺少scoped属性:期望元数据内容.
  2. 如果缺少scoped属性:在作为head元素的子元素的noscript元素中.
  3. 如果存在scoped属性:其中流内容是预期的,但是在元素间空格和样式元素之外的任何其他流内容之前,而不是内容模型是透明的元素的子元素.

从本质上讲,这表明您可以将样式标记和脚本标记放在正文中,因为正文是我们放置流内容和表达内容的地方.

与往常一样,请参阅您正在使用的doctype的规范.


Gum*_*mbo 10

简短的回答:


详细答案:

STYLE被定义为head.misc:

<!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" -- repeatable head elements -->
Run Code Online (Sandbox Code Playgroud)

head.misc的元素只允许是HEAD元素的子元素.所以STYLE只允许成为HEAD元素的子元素.

SCRIPT被定义为head.misc特殊:

<!ENTITY % special
   "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
Run Code Online (Sandbox Code Playgroud)

并且特殊定义为内联:

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
Run Code Online (Sandbox Code Playgroud)

另外SCRIPT也允许是BODY元素的子元素.因此SCRIPT允许在HEAD元素nad 中允许内联的任何地方.