【发布时间】: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 自己说的再好不过了