它在这里声明 http://www.w3.org/TR/html-markup/style.html#style :
允许的父元素
任何可以包含元数据元素、div、noscript、section、article、aside 的元素
<style>
在每个地方都或多或少地被允许(其中 <div>
被允许)但是,另一方面,我在这里找到了更详细的信息 http://www.w3.org /TR/2012/WD-html5-20121025/the-style-element.html#attr-style-scoped
可以使用该元素的上下文:(注解:style)
If the scoped attribute is absent: where metadata content is expected. If the scoped attribute is absent: in a noscript element that is a child of a head element. If the scoped attribute is present: where flow content is expected, but before any other flow content other than inter-element whitespace, and not as the child of an element whose content model is transparent.
以及本文档的后面:
scoped 属性是一个布尔属性。如果存在,则表示样式仅适用于以样式元素的父元素为根的子树,而不是整个文档。
如果存在 scoped 属性并且该元素具有父元素,则样式元素必须是其父元素中流内容的第一个节点(元素间空白除外),并且父元素的内容模型不得具有透明组件。
这读起来就像有(或将有)“两个不同的 <style>
元素”:a
<style>
- 全局 - ~~仅在<head>
<"scopestyle">
- 仅(!)具有 bool 作用域属性并且 ~~ 仅在<div>
的开头
(请将“~~”读成“或多或少”)
但是后来的链接已有 2 年多的历史,所有浏览器(我测试了 Chrome、FF、IE、Opera)都会解释流入 <style>
就好像它在标题中一样。 (并忽略 AFAIK 范围 - 是的 - 仍然没有标准)
所以我的三部分问题
我对 W3C 文档(两种样式 - 逻辑)的解释是否正确?
现在是什么状态 - 2015 年?
而且,可能有人在那里,谁知道地平线上会发生什么?
原文由 halfbit 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新。 scoped 属性不再适用于任何浏览器,现在是 非标准的 并且 已弃用。
您对规范的解释似乎是正确的。 样式标签上的 MDN 页面 包含对
scoped
属性的描述。scoped
属性:这是一个仅适用于 Firefox 21 到 54 的工作示例。
例子:
在不支持
scoped
属性的浏览器中,这些样式将全局应用。:scope
伪选择器:除了 scoped 属性外,还有
:scope
伪选择器 可以使用。此实现提供与前一个相同的支持。例子:
此选项还增加了一个可能的优势,即如果浏览器不理解
scoped
属性,则样式将不会全局应用。唯一的问题是 Safari 7+ 将识别:scope
伪选择器,即使不支持scoped
属性,因此 Safari 7+ 失去了优势。全局样式:
和以前一样,使用不带
scoped
属性的style
标签将创建全局样式,因此仅当包含scoped
属性时,它才会被限定范围。兼容性总结:
在这一点上,对该功能的支持看起来很黯淡(2022 年更新:该功能的提案已完全从标准中删除)。 CSS 作用域仅在 Firefox 21 到 54 中受支持。目前任何主流浏览器、Firefox、Chrome、Internet Explorer、Safari 或 Opera 均不支持它。 根据 caniuse.com 的说法,从 Chrome 20 到 36,可以通过实验标志启用支持,但 支持已被删除。