Mik*_*Dev 12 html css validation dom cross-browser
阅读其他Stack Overflow帖子就像这样的问题引出了我对CSS优化的奇怪推荐."Odd"是他们推迟推迟CSS加载的建议,结果如下:
<div class="blue">Hello, world!</div>
</body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
Run Code Online (Sandbox Code Playgroud)
除了看似过多,令人困惑,HTML无效,并声明"通过javascript维护CSS规则的应用程序顺序".即使没有显示javascript ...我的问题是这样的:
在测试他们的示例并检查结果时,将之后发生的所有代码</html>移到之前</body>.所以我的问题是......为什么?
为什么感动?似乎所有主流浏览器都试图</html>通过将代码移到之前来解释代码</body>.我搜索了一下,找不到任何关于此的文档/标准.
为什么谷歌甚至会推荐这个?如此,这样做有什么实际的实际好处吗?因为我认为把它放在</body>开始之前就足够了.(关于BoltClock的良好主观解释,是否有任何确凿证据表明实际上有性能提升?)
这发生在IE11,Firefox 26,Chrome 32.x和Windows Safari 5.1.7中.检查过的HTML是:
<div class="blue">Hello, world!</div>
<noscript><link rel="stylesheet" href="small.css"></noscript>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在</html>具有相同结果后添加更多代码.
这让我想起了其他奇怪的错误纠正,比如浏览器如何将<image>标签呈现为<img>(ref)......
更新: 为了测试,我为NOT延迟CSS设置了这个URL,并为延迟CSS设置了这个URL(好吧,我期望那篇文章的意思)......
Bol*_*ock 10
现在这很奇怪.您不能在结束标记之后包含任何元素,</html>因为它html是HTML文档的根元素.
但这是HTML,而不是XHTML.浏览器只是接受文档末尾出现的任何内容(除了注释,我相信空白),并将其移动到文档正文的末尾并假装一切正常,而不是彻底失败(就像使用XHTML一样).
在HTML5之前,在这种情况下没有错误处理标准,因为在根元素之后有任何元素是无效的.在HTML5中,几乎所有的错误处理都在8.2.5节中说明.特别是,它声明在" after body "或" after after body "插入模式之后,如果有一个意外的令牌不是DOCTYPE,comment或</html>end标签,那么解析器应该将插入模式切换为"in body" "处理令牌,这意味着无论遇到什么,都应该插入到身体中.正如插入模式的名称所暗示的那样,这意味着内容被添加到正文的末尾.
我没有客观的回答,为什么谷歌会推荐它,但我相信谷歌优先考虑性能而不是标准合规性,特别是在已知无效标记不会导致严重问题的情况下.他们是那样的风险承担者(另见:Google Chrome),但我离题了.
你提到把noscript和link元素放在</body>结束标记之前,正如你所看到的那样,根据浏览器和HTML5规范最终会发生什么.但请记住,首先在页面头部之外的任何位置放置一个link元素实际上是无效的noscript.但同样,这可能是表现超过标准合规性的情况.