错误行 16,第 23 列:不允许元素样式作为 的子项 此上下文中的元素正文。(禁止由此产生的进一步错误 子树。
因为它是"在这种情况下",我希望有一种方法可以使用嵌入CSS我的HTML 5
<style TYPE="text/css">
</style>
以及不同的"背景",无论这意味着什么。
我所有的代码都在整洁的HTML 5/CSS模块中...我宁愿不将我的 CSS 与我的 HTML 分开,尽管我认为大多数人都是这样做的。
有没有办法让我保留带有 HTML 5 的嵌入式 CSS 而不会破坏验证。
如果不是,我可以将嵌入式CSS放在文档的头部吗?
我可以把它放在哪里?
style
标签位于 head
标签中,除非存在 scoped
属性,例如:
<!DOCTYPE html>
<html>
<head>
<title>HTML5 CSS scope attribute</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<style>
.myClass {
color: red;
background-color: blue;
}
</style>
</head>
<body>
<div>
<span class="myClass">This text is red, and the background is blue.</span>
</div>
<div>
<style scoped>
.myClass {
background-color: yellow;
}
</style>
<span class="myClass">This text is red, and the background is yellow.</span>
</div>
</body>
但是,scoped
属性尚未在任何浏览器中实现:
- http://www.w3.org/TR/2012/WD-html5-20120329/the-style-element.html#the-style-element
样式标记只允许在 head 部分中使用。
这或作为带有标签的内联样式,只有在您有充分理由这样做时才应该这样做。
如果您在body
元素的开头有 style
元素,验证器的错误消息是错误的,正如我怀疑的那样。正如消息的解释所暗示的那样,只要使用 scoped
属性,则允许使用此类构造。
使用 scoped
属性毫无意义,因为还没有浏览器实现它,但如果您使用它,未来的浏览器可能会对该元素的解释与当前浏览器完全不同。所以以上只是事情的形式方面。
没有属性的简单style
元素即使在浏览器中也可以工作 body
.正式规则只是禁止它,HTML5目前坚持它,仅仅是因为它的编辑器认为呈现的用例并不重要。
但是,最好将 style
元素放在 head
元素内,该元素对所有规范都有效。(通常只有当作者无法控制head
但可以将代码注入body
时,才需要将其放入body
。
验证者在某些情况下使用的"在这种情况下"一词确实令人困惑。我认为这是源于我很久以前提出的一些改变,以避免更糟糕(误导性(的表述。措辞是有意义的,例如,如果标记是
<div>
foo
<style scoped></style>
</div>
HTML5规则是错误的,因为style
属性在body
中使用时,必须出现在其父级的开头。如果删除 "foo" 或移动到 style
元素之后,则上下文将更改,并且标记将变为符合 HTML5 的标记。
与 <script>
标签不同,<style>
只能在<head>
部分中使用。这就是您收到错误的原因。将其放在<head></head>
标签之间。
但是,您仍然可以在正文中使用样式,并且仍然具有有效的代码,但方式略有不同。必须将其放在元素的 style
属性中。
例:
<span style="background-color: #000; color: #fff;">Some text here</span>
这是您希望代码有效的唯一方法。您不能使用<style></style>
标签,只能使用属性。
style
只在文档的head
运行,就这么简单。在开发阶段运行外部样式表或将其包含在 html 文件中。