将 <link>
标签放在头部之外,例如在页脚处,这样做可以吗?
这样做的好处和坏处是什么?
我问这个问题,因为我有一个 CSS 文件,它只提供一些 CSS3 动画效果而没有样式,所以出于性能原因,我想把它放到 HTML 的末尾...
谢谢
将 <link>
标签放在头部之外,例如在页脚处,这样做可以吗?
这样做的好处和坏处是什么?
我问这个问题,因为我有一个 CSS 文件,它只提供一些 CSS3 动画效果而没有样式,所以出于性能原因,我想把它放到 HTML 的末尾...
谢谢
首先,这需要更长的时间,其次,看起来真的很丑陋。
这与包含的脚本不同,因为脚本将阻止加载直到它们完成,因此您应该尽可能晚地在进程中加载它们。
<link>
标签只应放在<head>
部分中:
对于HTML 4.01: http://www.w3.org/TR/html401/struct/links.html#edef-LINK
对于HTML5: http://www.w3.org/TR/html5/document-metadata.html#the-link-element
回到2013年,如果您将link
标签放在HTML文档的body
中,它将无法使用基于HTML 4.01的规则进行validate.w3.org验证。
您可以在 https://validator.nu 上尝试 HTML 4.01 和 HTML 5.0 的验证。
初次阅读 HTML 5.0 规范文件,似乎暗示着 link
应该只出现在文档的 head
元素中。然而,如果您使用 HTML 5.0 验证器进行验证,则即使在流内容中有一个 link
,文档也会显示正常。
这种差异的最好解释可能是如下所述。
如果您阅读 link
条目的 MDN 文档 (MDN Link entry),则会发现如果 link
元素具有 itemprop
属性,则 link
可以出现在流和短语内容中,因此出现在 body
中。
这可能是 HTML 5.0 验证器即使没有出现 itemprop
属性也不会发出警告的原因。
itemprop
是微数据规范的一部分,相对较新(阅读HTML微数据),值得一读。
目前,可以在body
中添加一个link
到样式表中,但不清楚其优点是什么。
WHATWG HTML标准允许在很多特定情况下在正文中使用<link>
。
至于在</body>
之前放置<link>
的“合理性”,最近我已经在图库中使用它来预加载一些大图片:
<link rel="preload" href="images/big/01.jpg" as="image">
因此,当用户点击缩略图时,通常无需等待服务器响应,因为图像已经加载到浏览器缓存中。
是的,在HTML5规范中将链接元素放在body元素内是可以的。它是好还是坏取决于你要链接什么。如果它对于网站的第一次浏览不是至关重要的话,那么我认为尽可能晚地加载它是一个好主意。
link
元素属于元数据内容类别,可用于期望元数据内容的地方,即在head
元素中(请参见https://www.w3.org/TR/html5/document-metadata.html#the-link-element)。根据规范,`body`元素包含流内容,而`link`不被视为流内容。基于浏览器行为,将`link`放置在`body`元素中可能是可以的,但这与规范允许有所不同。 - Marc Audetlink
的规范与meta
的规范进行比较,它们明确指出在某些情况下只能在head
内使用meta
。 - Jonas Äppelgran在任何 <link>
标签之前,必须放置 <!DOCTYPE html>
。从经验来看,这可能会导致某些页面出现故障。
在软件开发中,万物皆变。现在将CSS放在body中被认为是一种良好的实践,例如:
<head>
</head>
<body>
<!-- HTTP/2 push this resource, or inline it, whichever's faster -->
<link rel="stylesheet" href="/site-header.css">
<header>…</header>
<link rel="stylesheet" href="/article.css">
<main>…</main>
<link rel="stylesheet" href="/comment.css">
<section class="comments">…</section>
<link rel="stylesheet" href="/about-me.css">
<section class="about-me">…</section>
<link rel="stylesheet" href="/site-footer.css">
<footer>…</footer>
</body>