CSSStyleSheet 接口

最近在做一个功能的时候,需要用到js来改

阅读量:1308

点赞量:584

评论量:0
Skill
标签
标签: CssJavascript
摘要
最近在做一个功能的时候,需要用到js来改变伪元素的属性,结果发现伪元素和它的名字一样,并不属于元素,在DOM中无法找到,于是在网上找了一下相关的知识,做了个总结。
正文

直接看用法

1、CSSStyleSheet接口

首先说一下CSSStyleSheet接口:代表一个单一的CSS样式表,它从父代 StyleSheet 集成方法。


一个CSS样式表包含了一组CSS规则(CSS rules)。每条CSS规则可以通过与之相关联的的对象进行操作,这个关联对象实现了CSSStyleRule接口,而CSSStyleRule反过来实现了CSSRuleCSSStyleSheet允许你检测与修改和它相关联的的样式表(style sheet),包括样式表的规则列表。


实际上,CSSStyleSheet也实现了更为通用的StyleSheet 接口。实现一个document的样式表的CSSStyleSheet列表可以过document.styleSheet属性获取(这个document通过外联样式表或内嵌的style元素定义样式)。

来自【MDN


2、获取CSSStyleSheet列表

通过document.styleSheets来获取,得到的是一个数组列表。如图:


此处可以看到测试所用的网页,CSSStyleSheet列表长度为2,这里的个数,取决于当前页面引入的css文件(包含内部、外部、@import)。(不含内联)


3、CSSStyleSheet的属性及方法



StyleSheet.disabled
返回Boolean 表示当前样式表是否可用.
StyleSheet.href 只读 
返回DOMString 表示样式表的位置.
StyleSheet.media 只读 
返回MediaList 表示样式的预期目标媒体
StyleSheet.ownerNode 只读 
返 Node 将此样式表与当前文档相关联。
StyleSheet.parentStyleSheet 只读 
返回StyleSheet 如果有的话;   返回 null 如果没有.
StyleSheet.title 只读
返回DOMString 表示当前样式表的顾问标题。
StyleSheet.type 只读  
返回DOMString 表示当前样式表的语言


4、常用方法及用法

deleteRule: 从样式表中删除一条规则

// 用法:document.styleSheets[1].deleteRule(index)
document.styleSheets[1].deleteRule(0)


removeRule: 从样式表中删除一条规则(和delete用法、作用一样,IE5-8可用,但IE5-8没有deleteRule方法)

// 用法:document.styleSheets[1].removeRule(index);
document.styleSheets[1].removeRule(0);

// 解决兼容问题
if (!CSSStyleSheet.prototype.deleteRule) 
  CSSStyleSheet.prototype.deleteRule = CSSStyleSheet.prototype.removeRule;


insertRule: 向样式表中插入一条新规则

// 用法:stylesheet.insertRule(rule [, index])
// rule 要插入的规则的DOMString
// 要插入的位置 默认0 
document.styleSheets[0].insertRule("li { list-style: none;}", 2)


addRule: 向样式表中插入一条新规则(IE支持)

// 用法:document.styleSheets[1].addRule(ele, css, index);
// ele css选择器
// css css样式
// index 要添加的位置 默认0
document.styleSheets[0].addRule("li", "padding: 100px", 20);


5、设置伪元素

5.1、设置content属性

// 添加到最后,防止被覆盖。
var index = document.styleSheets[1].cssRules.length;
document.styleSheets[1].insertRule("div:after{content: '新的值';}", index);

5.2、另一种设置content的方法 ( attr() + data-* )

// CSS代码
div::before {
  content: attr(data-content);
}

// HTML代码
<div data-content="我是伪元素content">内容</div>

// JacaScript代码
$('div').attr('data-content', '我的conent被改了');



发布于: 7/4/2022, 4:58:24 PM
最后更新: 12/3/2024, 3:31:32 AM