css需要在JS执行后再加载样式怎么办_通过js动态创建link标签引入css

发布时间 - 2026-01-26 00:00:00    点击率:
可通过 JavaScript 动态创建 标签并插入 实现 CSS 延迟加载,适用于按设备类型、用户偏好或异步数据动态选择样式;核心是 document.createElement('link') 设置 rel="stylesheet" 和 href 后追加至 document.head,支持 onload/onerror 监听,需注意重复插入、样式替换及缓存问题。

可以通过 JavaScript 动态创建 标签并插入到 中,实现 CSS 在 JS 执行完成后再加载。这种方式适用于需要根据 JS 运行结果(如设备类型、用户偏好、异步数据)来决定加载哪套样式的情况。

动态创建 link 标签引入 C

SS

核心思路是用 JS 创建 link 元素,设置其 rel="stylesheet"href,然后追加到 document.head

  • 确保 JS 执行完逻辑(比如判断环境、获取配置)后再创建 link
  • 推荐使用 document.createElement('link'),避免 innerHTML 方式带来的解析风险
  • 可监听 link.onloadlink.onerror 处理加载状态(注意兼容性,部分老浏览器不支持 onload)

基础示例代码

以下是最简可用写法:

const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = '/path/to/your/style.css';

// 可选:添加加载完成回调
link.onload = () => {
  console.log('CSS 加载成功');
};
link.onerror = () => {
  console.error('CSS 加载失败');
};

document.head.appendChild(link);

加载前需 JS 判断的常见场景

比如根据屏幕宽度、主题模式或接口返回值加载不同 CSS:

立即学习“前端免费学习笔记(深入)”;

  • 检测是否为深色模式:if (window.matchMedia('(prefers-color-scheme: dark)').matches)
  • 读取 localStorage 中保存的主题:localStorage.getItem('theme') === 'dark'
  • 等待某个异步配置加载完毕(如从 API 获取皮肤 ID)后拼接 CSS 路径

注意事项

动态插入的 CSS 是异步加载的,不会阻塞 JS 执行,但会影响后续渲染。要注意:

  • 不要在 document.write 已结束后再多次插入同名 CSS,可能重复生效
  • 若需替换已有样式,建议先移除旧 link(通过 id 或 class 标识),再插入新 link
  • 移动端注意缓存行为,可在 href 后加时间戳或版本号避免旧样式残留(如 style.css?v=1.2.0


# css  # javascript  # java  # html  # js  # 浏览器  # app  # win  # 异步加载  # 延迟加载 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解jQuery中的事件  Laravel模型事件有哪些_Laravel Model Event生命周期详解  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  千库网官网入口推荐 千库网设计创意平台入口  手机软键盘弹出时影响布局的解决方法  利用python获取某年中每个月的第一天和最后一天  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何在IIS中配置站点IP、端口及主机头?  如何在自有机房高效搭建专业网站?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  网站图片在线制作软件,怎么在图片上做链接?  英语简历制作免费网站推荐,如何将简历翻译成英文?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  移动端脚本框架Hammer.js  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何记录自定义日志?(Log频道配置)  如何在万网开始建站?分步指南解析  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel如何使用withoutEvents方法临时禁用模型事件  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  免费网站制作appp,免费制作app哪个平台好?  详解jQuery中基本的动画方法  nodejs redis 发布订阅机制封装实现方法及实例代码  微信小程序 闭包写法详细介绍  如何快速搭建支持数据库操作的智能建站平台?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在腾讯云服务器快速搭建个人网站?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Swift中switch语句区间和元组模式匹配  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  C++时间戳转换成日期时间的步骤和示例代码  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  微信小程序 HTTPS报错整理常见问题及解决方案  常州企业网站制作公司,全国继续教育网怎么登录?  EditPlus中的正则表达式 实战(2)  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel怎么为数据库表字段添加索引以优化查询  实例解析angularjs的filter过滤器  如何在建站宝盒中设置产品搜索功能?  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  智能起名网站制作软件有哪些,制作logo的软件?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  网站建设整体流程解析,建站其实很容易!  如何在阿里云虚拟主机上快速搭建个人网站?