我知道CSS用于决定网页上的布局和其他样式。如果CSS位于页面底部,则所有内容(html元素,文本,图像等)都将使用浏览器自己的样式显示,当浏览器找到我们的CSS时,它会再次为我们重新设计页面。它可能被称为重新粉刷!
所以,我明白重新绘制页面和用户看到它会非常难看(FOUT - 无格式文本的Flash - 作为专家命名)。但是,我仍然想了解:
这次重画可以花多少时间?大约值!我理解这可能取决于页面上的内容。 还会发生什么或可能发生什么?
我现在主要关注的是是关于使用font-awesome CSS文件(外部托管在他们自己的cdn上下载css和字体文件)。我想知道如果我将它放在页面底部或延迟加载会在设备上发生什么?目前,它位于<head>
部分
link rel ='stylesheet'href ='http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css'type ='text / css'media ='screen'
使用Del,使其不应该成为问题的主要部分。问题的主要部分是关于底部的一些CSS然后将通过测量给出或支持测量等重新绘制,阻塞等情况。
在上述情况下,或者只有部分文档会受到底部CSS的影响,那么会发生什么?浏览器重绘所有内容,还有什么?它需要多长时间。假设,在<i>
放置了10个图标时使用了font-awesome。
我不知道当CSS位于底部时实际发生了什么。所以,如果您有任何显示流量的视频或图像,请在此处提及。
基于各种设备的性能,以及当然的用户体验。谢谢。
更新:我为自己和所有人提供了更多内容。 这是一个谷歌建议用于css的函数(delayLoadCss),用于下载内容。虽然,我不会那么极端,但是对于Font-Awesome类型的CSS呢?
答案 0 :(得分:6)
根据我的经验,加载css几乎是即时的,无论它出现在页面上的哪个位置 - 除了在一个实例中:什么会导致浏览器应用你的css延迟将你的css放在一个脚本元素之后是时候完成了。
这就是为什么用脚本结束你的身体部分被认为是最好的做法,这样你的页面就会在浏览器提交你的脚本之前进行渲染和设置样式。
所以如果你的html看起来像这样:
<head>
<link rel="stylesheet" type="text/css" href="/css/styles.css">
<script>
[long loading js]
</script>
</head>
<body>
... content
<script>
[long loading js]
</script>
</body>
然后你的css仍会立即应用。
但是如果你这样构造它:
<head>
<script>
[long loading js]
</script>
<style>
[css here]
</style>
</head>
<body>
... content
<script>
[long loading js]
</script>
</body>
甚至
<head>
<script>
[long loading js]
</script>
</head>
<body>
... content
<script>
[long loading js]
</script>
<style>
[css here]
</style>
</body>
然后,在js完成之后,你的css才会被应用到文档中。
第一个是最佳做法,我建议将样式标签完全保留在文档中,但肯定不在文档正文中。放置在脚本标签上方的外部样式表是可行的方法......对于字体awesome的外部托管css也是如此。除非您的链接出现在占据浏览器注意力的脚本元素之后,否则浏览器不应挂起呈现。
*编辑*
然而this帖子与我刚才所说的完全矛盾。
答案 1 :(得分:4)
CSS有两个级联。
小级联:这是对单个样式表的解析
The Big Cascade :这是浏览器按以下顺序执行三个“小级联”的地方:
你的问题是如果你把风格放在任何地方而不是头部会发生什么。我们来讨论一下:
<head>
<head>
<body>
。此处的资产和样式规则将在最后处理。 <style>
块,或者文档中的最后一个样式表是其样式超过其他所有样式的样式表。 简而言之,浏览器按照查看顺序应用样式。页脚的样式表会让事情变得更糟,而不是更好。我无法提供可量化的测量值,因为我没有您的样式表或网站。
所有浏览器都有FOUC(或FOUT)。它的持续时间取决于浏览器的速度和样式表的质量。缩小样式表,在重置后立即应用文本样式,在其他样式之前,通常具有最少量的FOUC。
页脚中的样式不会被阻止处理,也不会阻止<head>
中的样式。页脚中的样式最后处理完毕。
答案 2 :(得分:0)
我很欣赏Jeremythuff的答案,不过我也想回答并希望它对你有帮助。
大约需要一段时间来下载CSS文件(如果没有缓存而不是内联)+片刻。这个时刻取决于您已经提到的CPU,GPU,HD速度(如果缓存)和内容+脚本。在实际练习中,由于下载时间的原因,您不希望在主体末尾使用[link href =“...”/]。
您也不想使用内联样式,因为它们不是缓存的,而且这是用户将使用html下载的另一段代码,但是,此解决方案可以使用小型内联样式。在实践中它不会产生眨眼。
我推荐以下架构:
如果脚本更改了元素的默认行为(例如阻止链接点击),我建议将脚本放在头部。
现在关于字体。在我看来,使用外部字体是一种不好的做法。但是如果你想要,字体最好包括在头部,因为你可能无法在样式标签中内嵌它们。所以这里出现了下载时间问题。
即使在手机上,现在的10个图标也不算什么。
(如果跨设备,我也会因移动网络速度慢而考虑页面重量)
答案 3 :(得分:0)
你的问题很有意思......但是有一个问题:
<head>
!!
否则,您的html标记无效。然后,每个浏览器都可以以不同的方式处理它。