使用media属性将link标签的media设为print可异步加载css,再通过onload事件切换为all使其生效;2. 通过javaScript动态创建link标签插入head中实现非阻塞加载;3. 利用rel=preload预加载样式资源,在onload时改为stylesheet以控制应用时机。核心是绕过CSS默认阻塞渲染的机制,确保关键样式同步加载以避免FOUC。
通过 <link>
标签异步加载样式,主要是为了避免阻塞页面渲染。CSS 默认会阻塞渲染,但可以通过一些技巧实现异步加载。
使用 media 属性延迟加载
将 media
设置为一个暂时不匹配的条件,可以让浏览器异步下载 CSS 文件而不阻塞渲染:
<link rel=”stylesheet” href=”style.css” media="print" onload=”this.media=’all’”>
说明:初始设置 media="print"
让浏览器异步加载,等文件加载完成后通过 onload
将其切换为 all
或 screen
,使其生效。
动态创建 link 标签
通过 javascript 动态插入 <link>
标签,也能实现异步加载:
立即学习“前端免费学习笔记(深入)”;
<script>
const link = document.createElement(‘link’);
link.rel = ‘stylesheet’;
link.href = ‘style.css’;
document.head.appendChild(link);
</script>
这种方式默认是非阻塞的,资源会在后台加载,不会影响页面首次渲染。
预加载配合 onload 切换
结合 rel="preload"
预加载资源,并在加载完成后应用:
<link rel="preload" href=”style.css” as=”style” onload=”this.onload=NULL; this.rel=’stylesheet’”>
这样浏览器会优先下载该文件,但不会立即应用,直到 onload
触发并改为 stylesheet
时才生效。
基本上就这些方法。核心思路是绕过浏览器默认的渲染阻塞行为,用脚本或 media 控制加载时机。注意确保关键样式仍同步加载,避免出现 FOUC(无样式内容闪烁)。