来认识一下 styleSheets,好像有点高级的样子

简介: 使用 js 操作样式我们通常操作的是 dom 的 style 属性,也就是我们所说的行内样式,那么有没有一种方法可以操作 css 文件中的样式呢?答案是肯定的,我们可以使用 cssom 来操作 css

使用js操作样式我们通常操作的是domstyle属性,也就是我们所说的行内样式,那么有没有一种方法可以操作css文件中的样式呢?答案是肯定的,我们可以使用cssom来操作css文件中的样式。

1. cssom

cssomcss对象模型,它是css的一个抽象表示,它允许我们使用js来操作css文件中的样式,它是css的一个抽象表示,它允许我们使用js来操作css文件中的样式。

既然是cssom是对象模型,那么就可以使用js来操作它,那么我们就可以使用js来操作css文件中的样式了。

2. cssom的使用

2.1 获取cssom

我们可以使用document.styleSheets来获取cssom,它是一个StyleSheetList对象,它是一个类数组对象,我们可以使用[index]来获取对应的cssom,也可以使用item(index)来获取对应的cssom

styleSheets记录的是当前页面中所有的css文件,这里的css文件包括link标签引入的css文件,@import引入的css文件,以及style标签中的css样式,他们会依次按照引入的顺序存放在styleSheets中。

/* 获取cssom */
const cssom = document.styleSheets[0];

上面这段代码中,我们获取了第一个cssom,我们可以通过cssom来操作css文件中的样式。

上面的代码可以在任何站点中进行测试,我们可以在控制台中输入上面的代码,然后输入cssom,就可以看到cssom的信息了。

2.2 cssom的属性

cssom有很多的属性,我们可以通过cssom来获取css文件中的样式,下面我们来看一下cssom的属性。

2.2.1 cssRules

cssRules是一个CSSRuleList对象,它是一个类数组对象,我们可以使用[index]来获取对应的cssRule,也可以使用item(index)来获取对应的cssRule

cssRules记录的是当前cssom中的所有的cssRule,每一个cssRule都是一个css规则,它包含了一个style标签、一个link标签或者一个@import引入的css文件中的所有的样式。

/* 获取cssRules */
const cssRules = cssom.cssRules;

上面这段代码中,我们获取了cssom中的所有的cssRule,我们可以通过cssRules来操作css文件中的样式。

cssRules在引用源非本域的情况下,是不可访问的,也就是说,如果我们在a.com中引用了b.com中的css文件,那么我们就无法获取到b.com中的cssRules

2.2.2 href

href是一个字符串,它记录的是当前cssom对应的css文件的路径。

/* 获取href */
const href = cssom.href;

href属性中记录的是当前cssom对应的css文件的路径,如果当前cssom是一个style标签中的css样式,那么href的值为null

只有当cssom是一个link标签或者一个@import引入的css文件时,href才有值。

2.2.3 ownerNode

ownerNode是一个Node对象,它记录的是当前cssom对应的css文件的节点。

/* 获取ownerNode */
const ownerNode = cssom.ownerNode;

ownerNode属性中记录的是当前cssom对应的css文件的节点,如果当前cssom是一个style标签中的css样式,那么ownerNode的值为style标签。

如果当前cssom是一个link标签中的css样式,那么ownerNode的值为link标签。

2.2.4 type

type是一个字符串,它记录的是当前cssom对应的css文件的type属性。

/* 获取type */
const type = cssom.type;

type属性中记录的是当前cssom对应的css文件的type属性,如果当前cssom是一个style标签中的css样式,那么type的值为text/css

2.2.5 disabled

disabled是一个布尔值,它记录的是当前cssom对应的css文件是否被禁用。

/* 获取disabled */
const disabled = cssom.disabled;

disabled属性中记录的是当前cssom对应的css文件是否被禁用,disabled == false不能保证当前cssom对应的css文件是启用的,因为css文件可能被其他的css文件覆盖了,或者被移除了。

3. CSSRule

CSSRule是一个抽象类,它是所有cssRule的基类,它有一个type属性,它记录的是当前cssRule的类型。

type已经被标记废弃了,我们可以通过instanceof来判断当前cssRule的类型。

/* 判断cssRule的类型 */
if (cssRule instanceof CSSStyleRule) {
   
  // cssRule是CSSStyleRule
} else if (cssRule instanceof CSSImportRule) {
   
  // cssRule是CSSImportRule
} else if (cssRule instanceof CSSMediaRule) {
   
  // cssRule是CSSMediaRule
} else if (cssRule instanceof CSSFontFaceRule) {
   
  // cssRule是CSSFontFaceRule
} else if (cssRule instanceof CSSPageRule) {
   
  // cssRule是CSSPageRule
} else if (cssRule instanceof CSSKeyframesRule) {
   
  // cssRule是CSSKeyframesRule
} else if (cssRule instanceof CSSKeyframeRule) {
   
  // cssRule是CSSKeyframeRule
} else if (cssRule instanceof CSSNamespaceRule) {
   
  // cssRule是CSSNamespaceRule
} else if (cssRule instanceof CSSSupportsRule) {
   
  // cssRule是CSSSupportsRule
} else if (cssRule instanceof CSSCounterStyleRule) {
   
  // cssRule是CSSCounterStyleRule
}

3.1 CSSStyleRule

CSSStyleRule是一个类,它表示一个css样式规则,它有一个selectorText属性,它记录的是当前css样式规则的选择器。

/* 获取css样式规则的选择器 */
const selectorText = cssStyleRule.selectorText;

selectorText属性中记录的是当前css样式规则的选择器,就是我们在css文件中写的选择器。

CSSStyleRule还有一个style属性,它记录的是当前css样式规则的样式。

/* 获取css样式规则的样式 */
const style = cssStyleRule.style;

style属性中记录的是当前css样式规则的样式,就是我们在css文件中写的样式。

当然它并不是只有我们写的样式,它还包含了浏览器默认的样式,比如body标签的默认样式,本质上它是一个CSSStyleDeclaration对象,包含了当前css样式规则的所有样式。

3.2 CSSImportRule

CSSImportRule是一个类,它表示一个css导入规则,它有一个href属性,它记录的是当前css导入规则的href属性。

/* 获取css导入规则的href */
const href = cssImportRule.href;

href属性中记录的是当前css导入规则的href属性,就是我们在css文件中写的href属性。

CSSImportRule还有一个styleSheet属性,它记录的是当前css导入规则的样式表。

/* 获取css导入规则的样式表 */
const styleSheet = cssImportRule.styleSheet;

styleSheet属性中记录的是当前css导入规则的样式表,就是我们在css文件中写的样式表。

3.3 CSSMediaRule

CSSMediaRule是一个类,它表示一个css媒体规则,它有一个media属性,它记录的是当前css媒体规则的媒体。

/* 获取css媒体规则的媒体 */
const media = cssMediaRule.media;

media属性中记录的是当前css媒体规则的媒体,就是我们在css文件中写的媒体。

CSSMediaRule还有一个cssRules属性,它记录的是当前css媒体规则的样式规则。

/* 获取css媒体规则的样式规则 */
const cssRules = cssMediaRule.cssRules;

cssRules属性中记录的是当前css媒体规则的样式规则。

3.4 CSSFontFaceRule

CSSFontFaceRule是一个类,它表示一个css字体规则,它有一个style属性,它记录的是当前css字体规则的样式。

/* 获取css字体规则的样式 */
const style = cssFontFaceRule.style;

后面的就不一一介绍了,毕竟大部分都不常用,大家可以自己去查看:

总结

本文主要介绍了css样式规则的类型,以及它们的属性,这次只是一次扩展阅读,大家可以自己去查看,毕竟这些规则并不常用。

本人也只是刚研究了一下,有不对的地方欢迎大家指正。

目录
相关文章
|
8月前
|
消息中间件 Unix Java
[总结] C++ 知识点 《二》高级篇
[总结] C++ 知识点 《二》高级篇
|
8月前
|
Go
Go语言实现接口条件终极宝典在这里!
Go语言实现接口条件终极宝典在这里!
36 0
|
17天前
|
存储 C++ 索引
C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
C++的字符串使用`string`类处理,如`string greeting = "Hello"`。字符串连接可通过`+`或`append()`函数实现。访问字符使用索引,如`myString[0]`。`length()`或`size()`可获取长度。`getline()`用于读取整行输入。注意转义字符如`\\"`用于在字符串中嵌入双引号。使用`cin`读取字符串时,空格会终止输入,而`getline()`能读取整行。
28 0
|
17天前
|
编译器 C++
深入理解 C++ 语法:从基础知识到高级应用
了解C++基础语法,包括`#include <iostream>`引入输入输出库,`using namespace std`简化命名。`int main()`是程序入口,`cout << "Hello World!"`用于输出文本。换行可使用`\n`或`endl`。注释使用`//`进行单行注释,`/* */`进行多行注释。
28 0
|
17天前
|
算法 程序员 编译器
【C++ 基础知识 】C++流操纵符全解析:从基础到高级应用
【C++ 基础知识 】C++流操纵符全解析:从基础到高级应用
85 0
|
17天前
|
存储 编译器 C++
嵌入式中C++ 编程习惯与编程要点分析
嵌入式中C++ 编程习惯与编程要点分析
23 1
|
17天前
|
编译器 C++
(保姆级)函数进阶内容以及静态库的基础知识
(保姆级)函数进阶内容以及静态库的基础知识
35 5
|
17天前
|
Unix 编译器 数据库
【进阶】C 语言表驱动法编程原理与实践
【进阶】C 语言表驱动法编程原理与实践
91 0
|
设计模式 存储 安全
Java面向对象编程高级
Java面向对象编程高级
10068 0
Java面向对象编程高级
玩转UDP用户原语,这篇文章就够了【Verilog高级教程】
玩转UDP用户原语,这篇文章就够了【Verilog高级教程】
玩转UDP用户原语,这篇文章就够了【Verilog高级教程】

热门文章

最新文章