默认情况下,CSS 被视为渲染阻塞资源,这意味着浏览器在构建 CSSOM 之前不会渲染任何已处理的内容。确保保持 CSS 精简,尽快交付,并使用媒体类型和查询来解除渲染阻塞。
-- 谷歌开发者
- 默认情况下,CSS 被视为渲染阻塞资源。
- 媒体类型和媒体查询允许我们将一些 CSS 资源标记为非渲染阻塞。
- 浏览器会下载所有 CSS 资源,无论是阻塞还是非阻塞行为。
CSS 是一个渲染阻塞资源。尽快将其发送给客户端,以优化首次渲染的时间。
但是,如果我们有一些 CSS 样式只在某些条件下使用,例如,当页面正在打印或投影到大型显示器上时呢?如果我们不必阻止对这些资源的渲染,那就太好了。
CSS“媒体类型”和“媒体查询”允许我们解决这些用例:
<link href="style.css" rel="stylesheet">
<link href="print.css" rel="stylesheet" media="print">
<link href="other.css" rel="stylesheet" media="(min-width: 40em)">
通过使用媒体查询,我们可以针对特定用例(例如显示与打印)以及动态条件(例如屏幕方向的变化、调整事件大小等)定制我们的演示文稿。声明样式表资产时,请密切注意媒体类型和查询;它们极大地影响了关键渲染路径的性能。
让我们考虑一些动手示例:
<link href="style.css" rel="stylesheet">
<link href="style.css" rel="stylesheet" media="all">
<link href="portrait.css" rel="stylesheet" media="orientation:portrait">
<link href="print.css" rel="stylesheet" media="print">
- 第一个声明是渲染阻塞并在所有条件下匹配。
- 第二个声明也是渲染阻塞:“all”是默认类型,所以如果你不指定任何类型,它会隐式设置为“all”。因此,第一个和第二个声明实际上是等价的。
- 第三个声明有一个动态媒体查询,在页面加载时进行评估。根据页面加载时设备的方向,portrait.css 可能会或可能不会渲染阻塞。
- 最后一个声明仅在页面正在打印时应用,因此当页面首次在浏览器中加载时它不会呈现阻塞。
来源 -渲染阻塞 CSS -