在日常网站开发中,我们会使用link来加载外部的css样式文件,然而css的加载会阻塞页面的渲染,直到资源加载完成并等待CSSOM构建完成,所以在使用外部的css文件的时候,尽量移除不需要使用的css代码,如果网站需要自适应,可以通过媒体查询来加载对应的文件内容。
浏览器会下载所有 CSS 资源,无论阻塞还是不阻塞。
一个简单的例子
上例展示了纽约时报网站使用和不使用 CSS 的显示效果,它证明了为何要在 CSS 准备就绪之前阻塞渲染,没有 CSS 的网页实际上无法使用。右侧的情况通常称为“内容样式短暂失效”(FOUC)。浏览器将阻塞渲染,直至 DOM 和 CSSOM 全都准备就绪。
CSS 是阻塞渲染的资源。需要将它尽早、尽快地下载到客户端,以便缩短首次渲染的时间。
开发注意
用户移动端浏览网页的时候,可能不需要pc端的样式,可以通过媒体查询来告诉浏览器只处理 mobile.css
的样式资源
<!-- 不使用媒体查询,所有页面都能加载 -->
<link href="style.css" rel="stylesheet">
<!-- 只在打印内容的时候加载 -->
<link href="print.css" rel="stylesheet" media="print">
<!-- 只在屏幕小于750px的时候加载 -->
<link href="mobile.css" rel="stylesheet" media="(max-width: 750px)">
请注意“阻塞渲染”仅是指浏览器是否需要暂停网页的首次渲染,直至该资源准备就绪。无论哪一种情况,浏览器仍会下载 CSS 资源,只不过不阻塞渲染的资源优先级较低罢了。