HTML 5 Validator does not like CSS Embedded in Body



错误行 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 文件中。

最新更新