通过CSSOM可动态操作样式表,如增删改规则;利用document.styleSheets获取样式表集合,遍历cssRules读取规则,用insertRule和deleteRule插入删除规则,动态创建style标签可避免影响现有样式,适用于主题切换与样式管理。

JavaScript 的 CSSOM(CSS Object Model)提供了直接操作样式表的能力,不只是修改单个元素的 style 属性,还能动态增删改整个 CSS 规则。这在实现主题切换、运行时样式注入或组件化样式管理时非常有用。
访问样式表
通过 document.styleSheets 可以获取页面中所有样式表的集合,包括 link 引入的和 style 标签内联的:
const sheets = document.styleSheets;
每个 sheet 对象代表一个 CSSStyleSheet 实例,可通过索引访问:
const sheet = document.styleSheets[0];
注意:跨域的外部样式表受同源策略限制,无法操作其 rules。
读取与修改 CSS 规则
CSSStyleSheet 的 cssRules 属性返回一个包含所有 CSSRule 的类数组对象。可以遍历规则进行查找或修改:
for (let rule of sheet.cssRules) {<br> console.log(rule.selectorText, rule.style.cssText);<br>}
例如,想修改 .highlight 的背景色:
for (let rule of sheet.cssRules) {<br> if (rule.selectorText === '.highlight') {<br> rule.style.backgroundColor = 'yellow';<br> }<br>}
插入新样式规则
使用 insertRule() 方法可在指定位置插入一条新规则:
sheet.insertRule('p { color: blue; }', 0);
立即学习“Java免费学习笔记(深入)”;
北大团队开发的通过聊天来操作Excel表格的AI工具
48
查看详情
第二个参数是插入位置索引,0 表示最前面。
实际应用中常用于动态创建类:
sheet.insertRule('.fade { opacity: 0.5; transition: opacity 0.3s; }', sheet.cssRules.length);
删除样式规则
通过 deleteRule(index) 删除指定位置的规则:
sheet.deleteRule(1); // 删除第二条规则
如果知道规则内容但不确定位置,可先遍历匹配再删除:
[...sheet.cssRules].forEach((rule, index) => {<br> if (rule.selectorText === '.obsolete') {<br> sheet.deleteRule(index);<br> }<br>});
创建新的样式表
若没有现成的可操作样式表,可动态创建并添加到页面:
const style = document.createElement('style');<br>document.head.appendChild(style);<br>const sheet = style.sheet;<br>sheet.insertRule('body { margin: 0; }', 0);
这种方式完全可控,避免影响已有样式表。
基本上就这些。掌握 CSSOM 操作后,你可以更灵活地管理样式逻辑,尤其适合封装成工具函数或 UI 主题系统。关键是理解 cssRules 的只读性(需用方法修改)和同源限制。不复杂但容易忽略细节。

































暂无评论内容