CSS可通过JavaScript动态注入实现CSS-in-JS,主要方式包括动态创建style标签、操作CSSStyleSheet API及使用emotion等库,适用于组件化封装、主题切换与运行时样式生成。
可以,CSS 能通过 JavaScript 动态注入到页面中,这就是常说的“CSS-in-JS”方式。它不是把 CSS 字符串直接写进 JS 语法里(比如当变量值),而是用 JS 创建样式规则、生成 style 标签或操作 CSSOM,最终让浏览器识别并应用样式。
主流做法有三类,适用场景略有不同:
强,但需注意浏览器兼容性(如 Safari 对 insertRule 的限制)。以下代码会在页面 head 中添加一条全局样式:
const style = document.createElement('style');
style.textContent = `
.highlight { background: #ffeb3b; padding: 4px 8px; border-radius: 3px; }
`;
document.head.appendChild(style);
之后任何元素加上 class="highlight" 就会生效。这种方式轻量、无依赖,适合小项目或临时覆盖样式。
CSS-in-JS 的核心价值不在“能不能写”,而在“是否需要按组件封装样式、是否依赖 JS 运行时逻辑(如 props、theme)、是否要细粒度控制作用域”。它解决的是 CSS 全局污染、复用困难、动态性弱等问题,而不是替代 link 引入样式表这种基础能力。