3 回答
TA贡献1827条经验 获得超4个赞
正如其他人已经提到的,HTML 4要求将<style>
标记放在该<head>
部分中(即使大多数浏览器允许其中的<style>
标记body
)。
但是,HTML 5包含scoped
属性(请参阅下面的更新),该属性允许您创建范围在<style>
标记的父元素中的样式表。这也使您可以<style>
在<body>
元素中放置标记:
<!DOCTYPE html><html><head></head><body><div id="scoped-content"> <style type="text/css" scoped> h1 { color: red; } </style> <h1>Hello</h1></div> <h1> World </h1></body></html>
如果在支持HTML-5的浏览器中呈现上述代码scoped
,您将看到样式表的有限范围。
只有一个重要的警告......
在我写这个答案时(2013年5月),几乎没有主流浏览器目前支持该scoped
属性。(虽然显然Chromium的开发人员版本支持它。)
但是,scoped
该问题属于一个有趣的含义。这意味着未来的浏览器通过标准强制要求允许<style>
元素<body>
(只要<style>
元素具有范围)。
所以,鉴于:
几乎每个现有浏览器当前都忽略该
scoped
属性几乎每个现有的浏览器目前都允许使用
<style>
标签<body>
未来的实现将需要允许(范围)
<style>
标签<body>
......再有就是字面上没有害处在将* <style>
身体内的标签,只要你面向未来他们有scoped
属性。唯一的问题是当前的浏览器实际上不会限制样式表的范围 - 它们会将它应用于整个文档。但重点是,出于所有实际目的,您可以<style>
在<body>
提供的内容中包含标签:
通过包含
scoped
属性,为HTML提供面向未来的证明了解到目前为止,其中的样式表
<body>
实际上并不是作用域的(因为还没有主流浏览器支持)
*当然除了惹恼HTML验证器......
最后,对于常见的(但主观)声称嵌入HTML中的CSS的不良做法,应该指出的是,整点的的scoped
属性,以适应典型的现代开发框架,使开发人员可以导入HTML的块为模块或联合内容。嵌入式CSS 仅适用于特定的HTML块非常方便,以便开发具有特定样式的封装模块化组件。
根据Mozilla文档,截至2019年2月更新,该scoped
属性已弃用。Chrome在版本36(2014)和Firefox版本62(2018)中停止支持它。在这两种情况下,用户必须在浏览器的设置中明确启用该功能。没有其他主流浏览器支持它。
TA贡献1860条经验 获得超9个赞
坏消息的“风格体”爱好者:W3C最近失去了HTML战争对WHATWG,其versionless HTML“生活标准” 现在已经成为了一个官方的,这,唉,也不会允许 STYLE
的BODY
。短暂的快乐时光结束了。;)W3C验证器现在也适用于WHATWG规范。(谢谢@FrankConijn单挑!)
(注意:这是“截至今天”的情况,但由于没有版本控制,链接在任何时候都可能无效而无需通知或控制。除非您愿意链接到GitHub上的各个源提交,否则您基本上不能更长时间地对新的官方HTML标准AFAIK 进行稳定的引用。如果有正确的方法可以正确执行此操作,请纠正我。)
被曝光的好消息:
耶,STYLE
终于在有效的BODY
,作为HTML5.2的! (也scoped
已经消失了。)
从W3C规范(津津乐道的最后一行!):
4.2.6。样式元素
...
可以使用此元素的上下文:
预期元数据内容的位置。
在一个noscript元素中,它是head元素的子元素。
在体内,预计流量含量。
META SIDE-NOTE:
事实上,尽管“浏览器战争”受到了损害,我们仍然不得不继续开发针对两个荒谬竞争的 “官方”HTML“标准”(引用1 standard + 1 standard < 1 standard
)意味着“回归到战壕常识”的方法网络开发从未真正停止应用。
现在最终可能会改变,但引用传统观点:网络作者/开发者,因此,反过来,浏览器应该最终决定什么应该(并且不应该)在规范中,当没有充分的理由反对已经在现实。和大多数浏览器长期以来一直支持STYLE
的BODY
(以这种或那种方式;见例如scoped
,ATTR),尽管其固有的性能(可能还有其他)的处罚(其中,我们应该决定支付与否,规格)。所以,首先,我会继续押注他们,而不是放弃希望。;)如果WHATWG对他们声称的现实/作者有同样的尊重,他们可能最终会在这里做W3C所做的事情。
- 3 回答
- 0 关注
- 1460 浏览
相关问题推荐
添加回答
举报