HTML体中的样式和脚本标记…为什么不呢?

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

在许多情况下 – 尤其是在使用CMS或其他人的框架时,将<style>标签和<script>标签embedded<body><head>要容易得多。 这似乎在IE6,IE7(Windows),Firefox 3.x和Safari(OS X)的工作。

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

注意:很高兴每个人都想谈谈DRY和集中式的风格。 想象一下,我想在文档中使用样式标签,因为它们不是全局的,而且我无法访问每个页面上的标题。 无论出于何种原因,不论站点是不同的,还是每个段落的基础,或者其他什么。 我不感兴趣,很难追查和改变。 我担心在体内使用风格的可能后果。

你集中了那些重要的东西。 其他一切都在中央样式表中膨胀。

尽pipe规范中明确规定了状态标签在主体标签中是不允许的,但规格并不重要。 样式标签在每个主要的浏览器中都得到了支持,这就是用户最终看到你的网站的方式。虽然在浏览器行业一直存在更好的标准和标准支持,但长期以来,文件以及可以。

领导HTML5规范工作的Google同时维护违反规范的google.com保存字节,将引号从其属性值中删除,对CSS规范使用select器hack,包括不带types或语言的脚本标记以及链接没有types的标签。 一个纯粹主义者可能会争辩说,互联网上使用最多的网站之一就是违反了规范,并有可能被严重地歪曲的严重危险。 或者,我们可以推断,没有浏览器会进入stream行的使用,无法渲染如此广泛使用的规范的黑客。

所以,问题更多的是浏览器行业正在朝哪个方向发展 – 这又是一个更好的规范之一,但也尽最大努力兑现违反这些规范的网页的意图。 我敢打赌,风格标签将继续在很长一段时间在身体工作。

*在撰写本文时,正文中的样式标签在Firefox 3 +,IE6 +,Safari 2+,Chrome 12 +中均支持HTML5文档。 支持可能会更远,但这些浏览器很less在互联网上看到。

可以使用<script><style>标记的上下文取决于您使用的文档types。 例如,我假设您使用HTML5文档types:

 <!DOCTYPE html> 

脚本标记在HTML5文档types下有三个上下文:

  1. 预期元数据内容 。
  2. 预计措辞内容 。
  3. 预期脚本支持的元素 。

style标签在HTML5文档types下有一个稍微复杂的上下文结构:

  1. 如果scoped属性不存在:预期元数据内容 。
  2. 如果scoped属性不存在:在head元素的子元素的noscript元素中。
  3. 如果scoped属性存在:在期望stream内容的位置,但在元素之间的空白和样式元素以外的其他stream内容之前,而不是内容模型是透明的元素的子元素。

从本质上说,这表明你可以把样式标签和脚本标签放在正文中,因为正文是我们放置stream内容的地方,而且是短语内容。

与往常一样,请参阅您使用的文档的规范。

简短的回答:

  • STYLE元素只允许作为HEAD元素的子元素
  • SCRIPT元素被允许作为HEAD元素的子元素 , BODY元素和任何允许内联元素的元素 。

详细的答案:

STYLE被定义在head.misc中

 <!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" -- repeatable head elements --> 

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

SCRIPT被定义在head.misc特殊的

 <!ENTITY % special "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO"> 

特殊定义为内联

 <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;"> 

另外SCRIPT也被允许成为BODY元素的子元素。 所以在允许内联的任何地方都可以在HEAD元素中使用SCRIPT

两种可能的身体风格的答案:

  1. 使用内联样式。 诚然,你会失去内部和外部样式的优势,但如果你没有访问标题,那么你不能访问标题。

  2. 在style元素中使用scoped属性。 这对于HTML5来说是新的,但是想法是将CSS的范围限制在一个页面的一部分,例如一个div。 坏消息是它尚未得到支持(截至2011年7月),也不是向后兼容。 但有(据称)一个JQuery插件可以帮助。 欲了解更多信息:

那么,你有直接embedded样式和脚本到你的内容的问题。 这里的主要口头禅是干(不要重复自己)的原则。 您可以在多个地方使用脚本或特定的样式。 当这种风格或脚本需要修改时,您现在可以去寻找代码存在的所有地方。 保持你的风格和脚本在一个共同的地方是理想的。

另一方面,如果它是一个小的风格问题(像素推动或者只与那一个视图相关的东西),那可能是好的。

但为什么你会在身体里有style标签? 风格是全球性的,所以我找不到合乎逻辑的理由。

为了简化和分离更多东西,你也应该使用外部样式表。

脚本是允许的,这是有原因的:他们可能会提供输出,他们应该在特定的时间和其他原因运行。

在我看来,最大的问题是便利。 如果你想改变一个页面的样式,如果所有的样式和脚本信息都在一个区域中,这样做会容易得多。 样式/脚本信息可能位于节点的style属性(即<body style='...'> )或外部文件(即<link rel='stylesheet' type='text/css' href='style.css' /> )。 使用一致的位置要比试图捕捉可能出现的所有场所要容易得多。

另外值得注意的是,“除了被一些客户完全忽视”之外,就是说“除了从后面撞到爆炸”或“除了在平民区附近起飞和降落外”。 这个问题本身就足够严重,需要使用标准的做法。