能直接用 document.createelement('link') 实现,但需控制重复加载、阻塞渲染和加载失败;核心三步:创建元素→设 rel="stylesheet" 和 href→插入 document.head;须校验路径一致性、监听 load 事件、清理卸载时 link。

能直接用 document.createElement('link') 实现,但不加控制容易重复加载、阻塞渲染或忽略加载失败。
创建 link 元素并插入 head 是最简路径
核心动作就三步:创建元素 → 设置 rel 和 href → 插入 document.head。浏览器会自动发起 CSS 请求并应用样式。
-
rel必须设为"stylesheet",设错(如"style"或漏写)会导致样式不生效 -
href要是绝对路径或相对于当前 HTML 的相对路径;相对路径在单页应用中容易因路由变化失效,建议用以/开头的根路径 - 不要往
body里插link—— 多数浏览器会忽略,且规范要求必须在head中
避免重复加载同一份 CSS
多次调用加载函数时,若不检查已存在,会插入多个相同 href 的 link 标签,浪费请求且可能引发样式冲突。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 用
document.querySelector(`link[href="${href}"]`)判断是否已存在,存在则直接返回 - 注意:路径需完全一致,
"theme.css"和"./theme.css"被视为不同资源 - 如果 CSS 带查询参数(如
theme.css?v=2),版本号变化时应允许重新加载
监听 load 和 error 事件处理加载结果
CSS 加载是异步的,但浏览器不会抛出异常,onerror 也不像 script 那样可靠 —— 实际上多数浏览器对 link 的 error 事件支持有限或不触发。
-
link.onload在大多数现代浏览器中可用,表示样式已解析并应用(不是仅下载完成) -
link.onerror在 Chrome/Firefox 中基本不触发,Safari 表现不稳定;更稳妥的方式是设置超时 fallback,比如 5 秒后检查getComputedStyle是否生效 - 别依赖
link.sheet立即可用 —— 它可能为null,需等load触发后再访问
在 Vue/React 等框架中要注意卸载清理
组件销毁时,动态插入的 link 不会自动移除,可能造成内存泄漏或后续组件样式污染。
- 保存插入的
link元素引用(如存为组件实例属性),在unmounted或useEffect cleanup中调用link.remove() - 不要只靠
id或data-*属性查找并移除 —— 多个组件可能共用同一 CSS,误删会影响其他模块 - 若 CSS 用于主题切换,建议统一管理所有主题
link,只激活一个,其余disabled = true而非删除
真正麻烦的不是插入那几行代码,而是路径一致性、重复判断边界、错误兜底逻辑和组件生命周期协同 —— 这些地方一松懈,调试时就只剩 console 里一堆 404 和样式没反应。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










