内联样式
几种常见的给HTML元素添加CSS的CSS API如下。
const el = document.createElement('div'); |
直接在.style
对象上设置样式属性需要写成驼峰式命名,而.cssText
更高效,但会覆盖原先的CSS样式。也可以一起使用Object.assign
与.style
一次添加多个样式。
.style对象实现CSSStyleDeclaration
接口,除了cssText
之外还有length
属性、item
方法、getPropertyValue
方法以及setPropertyValue
方法等。
const propertiesCount = el.style.length; |
CSS类
CSS类在检索和设置时具有字符串形式,className
。className
与cssText
类似,会覆盖原先的class,所以在className
中必须给出完整的类名。
el.className = 'class-one class-two'; |
除了className
之外还有classList
属性,其实现了DOMTokenList,有add
、remove
、toggle
、replace
等方法来更改当前的CSS类集合,同时也有item
、entries
、foreach
接口来实现遍历。
const classNames = ["class-one", "class-two", "class-three"]; |
Stylesheet
Web API还有一个StyleSheetList
接口,该接口由document.styleSheets
属性实现。这是一个只读属性,返回由StyleSheet
对象组成的StyleSheetList
,每个StyleSheet
对象都是一个文档中链接或嵌入的样式表。
for(styleSheet of document.styleSheets) { |
CSS StyleSheet对象
属性 | 描述 |
---|---|
cssRules | 返回样式表中的所有规则,CSSRuleList对象,包含length属性和CSSStyleRule对象 |
disabled | 样式表是否禁用 |
href | 返回样式表的地址 |
media | 获取当前样式表作用的媒体 |
ownerNode | 返回该对象所在的DOM节点,一般是<link> 或<style> |
ownerRule | 如果是@import 导入的,属性就是指向表示导入的规则的指针,否则为null (IE不支持) |
parentStyleSheet | 返回了包含当前样式表的父样式表 |
rules | 同cssRules,区别见下方 |
title | 返回CSSStyleSheet 对象的title 值 |
type | 返回CSSStyleSheet 对象的type 值,一般是text/css |
对于<link>
元素引用外部样式表,Chrome不能通过cssRules属性和rules属性获取其中的CSS规则,而Firefox和IE可以。通过<style>
元素添加的样式信息,三种浏览器都可以通过cssRules属性获得其中的样式规则。
CSSStyleSheet对象的方法有insertRule和deleteRule,可以增加和删除样式表。insertRule(rule, index)此方法可以再cssRules规则合集中插入一个指定的规则,参数rule是标示规则的字符串,index是规则字符串插入的位置。deleteRule只有一个参数index,删除指定索引的规则。
CSS StyleRule对象
CSS StyleRule是CSSRuleList对象存储的对象,包含属性:
- type:0-6的数字
- 0:STYLE_UNKNOWN_RULE,未知类型
- 1:STYLE_RULE,CSS StyleRule对象
- 2:CHARSET_RULE,CSS CharsetRule对象,设定当前样式表的字符集,默认与网页一致
- 3:IMPORT_RULE,CSS ImportRule对象,用@import引入其他的样式表
- 4:MEDIA_RULE,CSS MediaRule对象,用于设定此样式用于的设备
- 5:FONT_FACE_RULE,CSS FontFaceRule对象,CSS3的@font-face
- 6:PAGE_RULE,CSS PageRule对象
- cssText:返回样式的cssText
- parentRule:如果规则位于另一规则中,则返回引用另一个CSS Rule对象
- selectorText:返回此规则的选择器
- style:返回CSS StyleDeclaration对象
实例
function createClassName(style) { |