【发布时间】:2013-08-25 21:22:20
【问题描述】:
是否可以将<link> 放在<head/> 标签之外的css 文件中,例如在页脚一侧?
这有哪些坏的和好的结果?
我问这个,因为实际上我有一个 css 文件,它没有任何样式,只是给我的网站带来了一些 css3 动画,所以出于性能原因,我想把它放在 html 的末尾......
谢谢
【问题讨论】:
标签: html css performance hyperlink head
是否可以将<link> 放在<head/> 标签之外的css 文件中,例如在页脚一侧?
这有哪些坏的和好的结果?
我问这个,因为实际上我有一个 css 文件,它没有任何样式,只是给我的网站带来了一些 css3 动画,所以出于性能原因,我想把它放在 html 的末尾......
谢谢
【问题讨论】:
标签: html css performance hyperlink head
样式表在<head> 中链接,以便浏览器可以设置 HTML 样式并在运行时呈现它。如果您将样式信息放在文档的底部,浏览器将不得不重新设置样式并再次从顶部呈现整个文档。
首先,这需要更长的时间,其次,看起来很丑。
这与包含的脚本不同,因为脚本会在加载完成之前阻止加载,因此您在此过程中尽可能晚地加载它们。
【讨论】:
根据 W3 规范,<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 年,如果您在 HTML 文档的 body 中放置 link 标记,则使用基于 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 是微数据规范的一部分,相对较新(read about HTML Microdata),值得一读。
目前,可以将link 添加到body 内的样式表中,但不清楚有什么优势。
【讨论】:
<head> 之外使用 <link> 的任何验证错误。
这是一个古老的讨论,但我认为这里值得注意的是,Google Pagespeed Insights 实际上现在(2017 年)推荐 deferring the loading of large CSS files until below the fold 以确保它们不会阻止加载 html。
【讨论】:
是的,在 HTML5 规范中可以在 body 元素中放置一个链接元素。如果这是一个坏主意或好主意取决于您的链接。如果呈现您网站的第一个视图并不重要,那么我认为尽可能晚地加载它是个好主意。
【讨论】:
link元素是元数据内容类别的一部分,可以在需要元数据内容的地方使用,即在 head 元素中. (见w3.org/TR/html5/document-metadata.html#the-link-element)。 body 元素包含流内容,根据规范,link 不被视为流内容。根据浏览器行为,可以在body 元素中放置link,但这与说明规范允许这样做不同。
link 的规范与meta 进行比较,他们明确提到在某些情况下meta 只能在head 内部使用。
WHATWG HTML 标准允许 <link> 在 quite many specified cases 的正文中。
关于将<link>放在</body>之前的“合理性”,最近我用它来预加载画廊中的一些大图:
<link rel="preload" href="images/big/01.jpg" as="image">
所以当用户点击缩略图时,通常不需要等待服务器响应,因为图像已经加载到浏览器缓存中。
【讨论】:
您必须将<!DOCTYPE html> 放在任何<link> 标记之前。根据经验,它可能会导致某些页面出现故障。
【讨论】:
随着软件开发中的一切,事情发生了变化。现在它被认为是正文中的良好实践 CSS,例如:
<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>
【讨论】: