异步加载CSS技巧分享
2026-03-11 12:43:26
0浏览
收藏
本文深入探讨了如何通过多种技巧实现CSS的异步加载,核心目标是在不阻塞页面首次渲染的前提下,确保样式最终及时、稳定地生效,从而提升网页性能与用户体验;重点推荐“preload + onload”动态切换方案——利用rel="preload"高优先级预下载CSS资源,再于onload时切换为rel="stylesheet"启用样式,兼顾速度、兼容性与可控性,同时辅以动态创建link标签和media属性延迟加载等策略,有效规避页面闪动、资源阻塞等常见问题,是现代前端优化中实用且易落地的关键实践。

通过 link 标签异步加载 CSS,核心思路是避免阻塞页面渲染的同时,确保样式最终生效。标准的 link 标签会阻塞渲染直到 CSS 下载完成,而异步加载可以通过一些技巧绕过这种阻塞行为。
使用 preload + onload 动态切换 rel
preload 是一种告诉浏览器提前下载资源但不立即应用的方式。结合 JavaScript 可以在下载完成后将其转换为可应用的样式表。示例代码:
<link
rel="preload"
href="styles.css"
as="style"
onload="this.onload=null;this.rel='stylesheet'">
<script>
// 防止 preload 资源未及时处理
function loadCSS(href) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = href;
document.head.appendChild(link);
}
// 可用于补漏或动态加载
</script>
说明:
- rel="preload" as="style" 让浏览器高优先级下载 CSS 文件,但不阻塞渲染。
- onload 触发时将 rel 从 preload 改为 stylesheet,正式启用样式。
- 添加 this.onload=null 防止事件重复触发。
动态创建 link 标签插入 head
完全通过 JavaScript 创建 link 标签,实现异步非阻塞加载。示例代码:
<script>
function loadCSS(href) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = href;
document.head.appendChild(link);
}
// 页面加载后调用
loadCSS('styles.css');
</script>
优点:
- 完全异步,不阻塞解析和渲染。
- 可控制加载时机(如滚动后、交互后)。
使用 media 属性延迟加载非关键 CSS
将非关键 CSS 设置为只在特定媒体条件下加载,比如 print 或自定义无效 media,使其低优先级。示例:
<link rel="stylesheet" href="print.css" media="print" onload="if(media!='all')media='all'">原理:
- 初始 media="print" 浏览器不会立即应用。
- onload 后改为 media="all" 正式启用。
- 适合非首屏必须的样式。
基本上就这些方法。推荐使用 preload + onload 方案,兼容性较好且能利用浏览器预加载机制。关键是不让 CSS 阻塞首次渲染,又能尽快应用样式,避免页面闪动。不复杂但容易忽略细节,比如事件去重和错误处理。
本篇关于《异步加载CSS技巧分享》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!
Python系统迁移全攻略详解
- 上一篇
- Python系统迁移全攻略详解
- 下一篇
- JavaScript调用摄像头麦克风方法
查看更多
最新文章
-
- 文章 · 前端 | 1天前 | js语法教程
- JSSet集合使用与去重技巧详解
- 350浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTML5离线缓存清除方法大全
- 462浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTML编码如何避免乱码问题
- 235浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTMLaddress标签使用方法详解
- 309浏览 收藏
-
- 文章 · 前端 | 1天前 |
- 发布订阅模式消息队列原理与实现解析
- 135浏览 收藏

