元素出现在<;之后是否合法/html>;?

元素出现在<;之后是否合法/html>;?,html,Html,建议我们将二级样式表放置在关闭标记之后,以推迟二级样式表的加载。该页面中的代码示例: <html> <head> <style> .blue{color:blue;} </style> </head> <body> <div class="blue"> Hello, world! </div> </body> &l

建议我们将二级样式表放置在关闭标记之后,以推迟二级样式表的加载。该页面中的代码示例:

<html>
  <head>
    <style>
      .blue{color:blue;}
    </style>
    </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
  </body>
</html>
<link rel="stylesheet" href="deferred_stylesheet.css">

.blue{颜色:蓝色;}
你好,世界!
这让我感到奇怪,因为我希望谷歌推荐标准做法,而不是非标准做法

上面的代码合法吗?HTML5标准是否为浏览器解析此类代码提供了一致的规则


如果我们这样使用标签,我们(或我们的用户)会遇到什么问题?

首先,您缺少顶部的
声明,这是HTML5文档所必需的

其次,你的头脑中也缺少了一个
标签

最后,不允许在关闭
标记后添加标记。如果通过运行文档,您将看到:

第14行第54列:杂散启动标签链接

此错误无法恢复

我希望浏览器要么完全忽略它,要么加载它。取决于浏览器、版本和平台。因为你不能确定它是否有效(而且它不符合要求),所以你不应该这样做

更新


但是,这是无效的HTML。但是他们不需要这样做,因为他们可以为

定义自己的规则。在HTML标记之外添加任何内容都是不正确的,但是所有浏览器都会尝试对他们得到的服务进行排序

几乎所有浏览器,如Firefox、Google Chrome、Internet Explorer等,都会为您解决这一问题。一些自行编写的浏览器可能无法做到这一点

但是,为了提高性能,您可以更好地将其写在head标记之间(因为这样浏览器就不需要对脏代码进行排序)


这意味着用户几乎不会遇到任何问题。

这是正确的结构还是允许的结构?
否。将元素放置在
标记之外是不正确的

哦,天哪!这会给我带来麻烦吗?
不会。浏览器会尽可能地修复你的坏代码。这对浏览器来说没有问题

我应该这样做吗?
好。。。这很复杂。简短的回答是“不,可能不会”。作为开发人员,我们有责任确保我们的代码是正确的(机器不可信,这将是我们的失败!)。规则的存在是有原因的。另一方面,作为黑客,我们有时可以打破和扭曲规则,如果它在这种情况下是有意义的,你知道后果会是什么

HTML黑客攻击?你到底在说什么?
浏览器将始终尝试尽可能最好地呈现文档。有趣的是,你甚至不必给a
标签——浏览器会帮你找到答案

下面是一个示例–检查渲染的DOM和视图源。我几乎没有给它任何可以使用的东西,它已经创建了所有丢失的标签。整洁的您确实需要一个
DOCTYPE
声明,在大多数情况下还需要一个
标记

但是,我离题了

因此,浏览器肯定会正确渲染它。但是,根据规范,它是不正确的,并且文档将不会验证(如果您关心的话)。在大多数情况下,遵循规范是个好主意,除非你有充分的理由


现在,我不明白谷歌为什么要你把它放在
标签之外。听起来很奇怪,不过我想他们知道自己在做什么。我的猜测是,他们想绝对确保ressource最后加载。

我能想到的唯一问题是它无法验证。除此之外,我认为你很好。奇怪的是,我从未见过谷歌自己遵循这个建议。我已经检查了各种页面,甚至通过他们的insight工具运行了它们。正确的位置就在关闭html标记之前。你可能会发现有趣的地方。简而言之,它是这样总结的:“推迟所有CSS都是无用的,性能更差,桌面PageSpeed分数(略)低,在页面呈现和CSS应用程序之间有一个“非样式化内容的闪光”,用于改变try的“古怪”定义。但是它不符合规范,我们不应该这样做。让我们正确地遵循规范,让网络成为一个更好的地方,这样我们就不会再创建另一个IE6、7、8或9了!那么你的意思是该页面给出了不好的建议吗?@Pacerier是的,我是这样认为的。如果您查看HTML5规范,那么在关闭标记之后放置标记就不符合规范了。如果你想保证用户代理能正确解析你的文档,你应该遵循规范。另外,还有很多糟糕的不符合规范的HTML,人们每天都要处理。HTML5的目的就是解决这个问题。所以,让我们都同意遵守规范!顺便说一句,HTML5没有明确说明当浏览器遇到像上面问题中所示的那些乱七八糟的标记时要遵循的“解析规则”吗?那么,我们可以说遵循HTML5标准的浏览器仍然会始终如一地解析上述代码吗?@Pacerier。正如解析规则所说,这是一个解析器错误,因此解析器可以返回到“in body”并将标记插入文档中。但是,如何处理将留给用户代理。用户代理可以选择拒绝此文档,因为它不符合要求。谢谢,我认为最后一条评论回答了问题。你可能想在文章中包含这一点。但当你说“浏览器会找到答案”时,这种行为是HTML5标准规定的一致行为吗?不,是浏览器供应商让浏览器以体面的方式呈现错误代码。事实上,如果你读过规范,这是不真实的。允许用户代理访问。在close
标记后放置标记是一个分析错误。因此,该行为被明确定义为不一致