使用js
操作样式我们通常操作的是dom
的style
属性,也就是我们所说的行内样式,那么有没有一种方法可以操作css
文件中的样式呢?答案是肯定的,我们可以使用cssom
来操作css
文件中的样式。
1. cssom
cssom
是css
对象模型,它是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;
后面的就不一一介绍了,毕竟大部分都不常用,大家可以自己去查看:
- CSSStyleRule
- CSSImportRule
- CSSMediaRule
- CSSFontFaceRule
- CSSPageRule
- CSSKeyframesRule
- CSSKeyframeRule
- CSSNamespaceRule
- CSSSupportsRule
- CSSCounterStyleRule
总结
本文主要介绍了css
样式规则的类型,以及它们的属性,这次只是一次扩展阅读,大家可以自己去查看,毕竟这些规则并不常用。
本人也只是刚研究了一下,有不对的地方欢迎大家指正。