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下有三个上下文:
- 预期元数据内容 。
- 预计措辞内容 。
- 预期脚本支持的元素 。
style标签在HTML5文档types下有一个稍微复杂的上下文结构:
- 如果scoped属性不存在:预期元数据内容 。
- 如果scoped属性不存在:在head元素的子元素的noscript元素中。
- 如果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
。
两种可能的身体风格的答案:
-
使用内联样式。 诚然,你会失去内部和外部样式的优势,但如果你没有访问标题,那么你不能访问标题。
-
在style元素中使用scoped属性。 这对于HTML5来说是新的,但是想法是将CSS的范围限制在一个页面的一部分,例如一个div。 坏消息是它尚未得到支持(截至2011年7月),也不是向后兼容。 但有(据称)一个JQuery插件可以帮助。 欲了解更多信息:
那么,你有直接embedded样式和脚本到你的内容的问题。 这里的主要口头禅是干(不要重复自己)的原则。 您可以在多个地方使用脚本或特定的样式。 当这种风格或脚本需要修改时,您现在可以去寻找代码存在的所有地方。 保持你的风格和脚本在一个共同的地方是理想的。
另一方面,如果它是一个小的风格问题(像素推动或者只与那一个视图相关的东西),那可能是好的。
但为什么你会在身体里有style
标签? 风格是全球性的,所以我找不到合乎逻辑的理由。
为了简化和分离更多东西,你也应该使用外部样式表。
脚本是允许的,这是有原因的:他们可能会提供输出,他们应该在特定的时间和其他原因运行。
在我看来,最大的问题是便利。 如果你想改变一个页面的样式,如果所有的样式和脚本信息都在一个区域中,这样做会容易得多。 样式/脚本信息可能位于节点的style
属性(即<body style='...'>
)或外部文件(即<link rel='stylesheet' type='text/css' href='style.css' />
)。 使用一致的位置要比试图捕捉可能出现的所有场所要容易得多。
另外值得注意的是,“除了被一些客户完全忽视”之外,就是说“除了从后面撞到爆炸”或“除了在平民区附近起飞和降落外”。 这个问题本身就足够严重,需要使用标准的做法。