将风格的CSS标签在身上呈现?(Will style css tag render in body?

2019-09-20 00:09发布

我使用的是CMS,显然它不会让我的任何内容添加到一个错误<head>博客文章的。 它插入到一切在大多数情况下是工作不错,但在这样的代码实例的身体:

<style type="text/css">
 .slideshow img { display: none }
 .slideshow img.first { display: block }
</style>

如果将放在内部的类型的代码运行<body>标签中的所有主流浏览器? (IE8 +,Firefox,铬,和Safari。)通常,始终是在<head>页面。

注意:这似乎工作在FF 15,但我不知道其他浏览器。

Answer 1:

在体内有风格的标记是无效的代码。

每个浏览器将尝试使用无效的代码的方式,是有道理的。 有些浏览器似乎反正使用的样式规则,但你不能依赖于为所有当前和未来的浏览器的行为。 另一种行为,这也将可以完美地将忽略无效的风格标签。

需要注意的是,即使在同一个浏览器的行为可以根据页面是否在符合标准的模式或怪癖模式呈现不同。 在符合标准的模式(这是最好的一个)的浏览器更趋于严格,忽略无效的代码,而不是试图去猜测预期的代码是作者。


更新2014:

在HTML5中,你可以在body元素中使用的风格标签。 在任何旧版本浏览器都没有意识到HTML5的,或者如果你没有一个HTML5的doctype,它仍然是无效的代码。



Answer 2:

JavaScript是另一种思路,如<script>元素可以出现在身体。 当然,这取决于用户允许的JavaScript。

我没有看到另一种选择(除了,当然, style属性无处不在)。

或者只是使用它的身上,尽管这使得@Cole喊? 当script元素被引入作为HTML 3.2的占位符 ,规范说,“用户代理应该隐藏这些元素的内容。” 因此,至少有一些希望,所有的浏览器将隐藏它(即使他们不解释是风格)。



Answer 3:

如果你可以修改的CMS(即主题式样式表)加载CSS文件,然后把这些代码在CSS文件的底部,并使用注释来表示自定义样式(供将来参考),或使用CSS导入规则的主题捎带你的CSS。



Answer 4:

是的,浏览器都能识别并应用style即使内部时,元素body 。 他们甚至运用它“倒退”,即你可以在样式前出现的元素style元素。

这很容易检查了这一点,但更难以预料的未来。 你并不孤单与这个(这是相当常见的有这样的限制,不是一个真正的错误,但故意设置的限制,在CMS),并有大量的已经不得不使用这样的功能的网页内容。 因此,这是不可能的,浏览器将停止支持它,但他们可能会在“标准模式”有一天拒绝它的想法。

HTML5的草案目前不建议规范这一点。 相反,他们允许的想法stylebody ,但只有当scoped属性时,与该效果的意义style元素仅限于封闭块。 这很奇怪,但它是不是一个做法确实不兼容的style 没有一个元素scoped属性具有全球影响body

当然,如果有其他方式做事情的一种合理的方式你不应该使用此功能。



Answer 5:

答案是,没有它不应该在任何主流浏览器的渲染。

正如一些评论所指出的那样,你不应该这样做; 你会被打破标准,这意味着结果是不确定的 - 也就是说,它应该工作,但你永远不能肯定。

我明白,在某些情况下(即具有设计拙劣的CMS工作时),这可能是唯一的选择,但它是一件坏事一般都这样。

如果你真的需要做,你担心它,一个解决办法是把内容转换成HTML注释:

<style type="text/css">
<!--
 .slideshow img { display: none }
 .slideshow img.first { display: block }
-->
</style>

应从甚至由不喜欢的浏览器被视为阻止它<style>在体内。

另一种选择是把它放入一个外部样式表文件,并将其包括使用<style>标记。 这应该仍然工作,但由于该元素将不会有任何直接的内容,它不会有任何一个顽劣浏览器中显示。

希望帮助。



文章来源: Will style css tag render in body?