在此上下文中,元素样式不允许作为元素主体的子元素(<style scoped =“”> not validating)</style>

时间:2014-12-18 04:07:52

标签: html css w3c-validation

<!DOCTYPE html>
...
<style scoped>
/* css */
</style>

w3.org验证器给了我这个错误:

Line 883, Column 17: Element style not allowed as child of element body in this context.
(Suppressing further errors from this subtree.)
        <style scoped>...
Contexts in which element style may be used:
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 style elements, and not as the child of an element whose content model is transparent.
Content model for element body:
Flow content.

我的理解是“&#39; scoped&#39; property使得样式标记可以在文档的头部之外。那么为什么验证者不满意呢?

(我使用的是Wordpress,这个代码是由插件生成的,这就是为什么我不能把它放在头脑中。)

编辑: 这不会验证 -

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<script type="text/javascript"></script>
<style scoped></style>
</body>
</html>

但是,如果脚本标记位于样式标记之后,则会发生这种情况。这是什么原因?

1 个答案:

答案 0 :(得分:14)

W3C标记验证程序在充当HTML5检查程序时,会根据HTML 5.1 Nightly等各种草稿来处理此问题,HTML5现在表示style元素可能只出现在{{1}内}}元素,除非存在head属性,在这种情况下,它可能显示为“流内容在哪里,但在除了元素间空格和样式元素之外的任何其他流内容之前,而不是作为子元素内容模型是透明的元素的“。在您的实际示例中,元素显示在scoped元素之后(计为流内容)。因此,在给定的定义下,更改元素的顺序会将语法更改为有效。

或者,您可以将script元素包装在style元素中:

div

根据W3C建议{{3}},<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>title</title> </head> <body> <script type="text/javascript"></script> <div> <style scoped></style> </div> </body> </html> 属性根本无效。它存在于HTML5草案中,但由于缺乏实现而被从建议书中删除,但它仍处于“标准化轨道”中,可能会进入HTML 5.1。

请注意,现有浏览器通常会忽略scoped属性,并且几乎可以在任何位置使用scoped元素,并将其内容应用于整个HTML文档(甚至是style元素之前的部分)。