【问题标题】:HTML5 scoped styles on parent (scoping) element父(范围)元素上的 HTML5 范围样式
【发布时间】:2013-11-01 13:17:14
【问题描述】:

我正在阅读 HTML5 规范,对于 style 元素上的 scoped 属性,它指定:

scoped 属性是一个布尔属性。如果存在,则表示样式仅用于以style 元素的父元素为根的子树,而不是整个Document

style 元素声明的样式表,该元素具有scoped 属性,并且其父节点是一个元素是作用域的,作用域元素是style 元素的父元素。

我正在尝试确定是否可以通过作用域样式表访问作用域元素,或者只是作用域元素的子树的子节点。

我从 MDN 复制了this example 并稍作修改:

<article>
    <div>The scoped attribute allows for you to include style elements mid-document. Inside rules only apply to the parent element.</div>
    <p>This text should be black. If it is red your browser does not support the scoped attribute.</p>
    <section>
        <style scoped>
            section {
                color: red;
            }
        </style>
        <p>This should be red.</p>
    </section>
    <section>
        <p>Another section here</p>
    </section>
</article>

当我在支持的浏览器(此时只有 Firefox)中运行示例时,文本 This should be red 仍然是红色的。但是,没有section 元素作为范围元素的子元素。此外,“此处的另一个部分”不是红色的,因此该样式仅适用于范围元素。

有人可以确认此行为是否符合规范或 Mozilla 实现中的错误?

【问题讨论】:

  • “对于以样式元素的父元素为根的子树” – 如果 section 是该子树的 root 元素,则使其成为该子树的部分
  • 啊,产生浏览器不一致的新方法真是太棒了。
  • @MrLister 我想解决的办法是不要在选择器中使用父元素,如果这样会造成不一致。
  • @joeytje50 问题是在不符合标准的浏览器中,样式根本没有作用域;它会影响整个文档中的所有元素。见fiddle。这使得 scoped 在几乎所有浏览器都支持它之前毫无用处。
  • @MrLister 自己说的再好不过了

标签: css html scope


【解决方案1】:

HTML 5.0 specification 没有定义任何scoped 属性。但是HTML 5.1 specification 说:

作用域属性是一个布尔属性。如果存在,则表示样式仅用于以样式元素的父元素为根的子树,而不是整个文档。

在您的情况下,子树的根是包含 &lt;style&gt; 元素的 &lt;section&gt; 元素。根是树的一部分,样式 color:red; 应用于它。

所以,在这个例子中,Mozilla 的实现是符合标准的。

【讨论】:

  • 也许你的意思是
  • 这使答案更加清晰:+1。因此,在 HTML 5.0 中,&lt;style&gt; 元素只允许在元数据上下文中(在 &lt;head&gt; 内)。然而,一些浏览器(例如 IE 11)允许在文档的&lt;body&gt; 中使用&lt;style&gt;,而没有任何由其位置暗示的范围。 HTML 5.1,这仍然是一个草案,一个不能向上兼容该许可解释的功能(正如@MrLister 指出的那样。)
猜你喜欢
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多