2000年12月13日

1. 文档对象模型样式表

编者
Chris Wilson, 微软公司
Philippe Le Hégaret, W3C
Vidur Apparao, 网景公司

目录

1.1. 绪论

DOM 级别2 样式表接口是用来表示任何类型样式表的一组基接口。我们预计,一个表示特定样式表语言的 DOM 模块会包含一些继承本组接口的子接口。

本章节中所定义的接口都不是强制性的。一个 DOM 应用程序可以使用接口 DOMImplementation 中的方法 hasFeature(feature,version)(参数依次为 "StyleSheets" 和 "2.0")来确定一个 DOM 实现是否支持本模块。一个实现要想能够完全支持本模块,它也必须同时支持 DOM 2 核心规范 [DOM 级别2 核心]中定义的 "核心" 特性。另请参阅 DOM 级别2 核心规范[DOM 级别 2 核心]中一致性的信息。

1.2. 样式表接口

本组接口展现了一般的样式表定义。

接口 StyleSheet (DOM 级别2 中引入)

StyleSheet 接口是任何类型样式表的抽象基接口。它表示与一个结构化文档相关联的单个样式表。在 HTML 中,StyleSheet 接口既可以表示一个外部的样式表(通过 HTML LINK 元素来定义),也可以表示一个内嵌的 STYLE 元素。在 XML 中,本接口表示一个外部样式表(通过样式表处理指令来定义)。


IDL 定义
// DOM 级别2 中引入:
interface StyleSheet {
  readonly attribute DOMString        type;
           attribute boolean          disabled;
  readonly attribute Node             ownerNode;
  readonly attribute StyleSheet       parentStyleSheet;
  readonly attribute DOMString        href;
  readonly attribute DOMString        title;
  readonly attribute MediaList        media;
};

属性
disabled  类型 boolean
false 如果样式表应用到文档; true 如果没有。修改这个属性的值可能会导致文档中的样式被重新分析。只有当定义了合适的媒体,并且属性 disabled 的值是 false 的时候,一个样式表才是被应用的。因而,如果一个媒体没有应用到当前的用户代理,disabled 属性就被忽略。
href   类型 DOMString, 只读
如果样式表是一个链接样式表,本属性的值就是该样式表的位置。而对于内嵌样式表,本属性为 null。参见 HTML 4.0 中 LINK 元素 href 属性的定义 ,以及XML 样式表处理指令中的 href 伪指令。
media  类型 MediaList, 只读
表达样式信息的目的媒体。媒体通常在 ownerNode 中定义。如果没有定义媒体,MediaList 就为空。参见 HTML 4.0 LINK元素 media 属性的定义,以及 XML 样式表处理指令中的 media 伪属性。修改媒体列表可能会引起属性 disabled 值的改变。
ownerNode 类型 Node, 只读
文档中关联本样式表的节点。对于 HTML, 它可能是相关联的 LINK 或者 STYLE 元素。对于 XML,它可能是链接处理指令。对于包含在其他样式表中的样式表,本属性的值为 null
parentStyleSheet 类型 StyleSheet, 只读
对于支持样式表互相包含概念的样式表语言,本属性表示包含本样式表的样式表(如果这个样式表存在的话)。如果本样式位于最顶层,或者是样式表语言不支持样式表的互相包含,本属性的值为 null
title 类型 DOMString, 只读
建议的标题。它通常在 ownerNode 中定义。参见 HTML 4.0 LINK 元素的 title 属性的定义,以及 XML 样式表处理指令中的 title 伪指令。
type  类型 DOMString , 只读
本属性规定样式表的语言。样式表语言是根据内容类型(content type)来规定的(比如 "text/css")。 内容类型 通常在 ownerNode 中定义。 参见 HTML 4.0 LINK 元素 type 属性的定义,以及 XML 样式表处理指令的 type 伪属性.
接口  StyleSheetList (DOM 级别2 中引入)

StyleSheetList 接口抽象了有序的样式表集合。

可以用从0开始的整数索引来存取 StyleSheetList 中的项目。


IDL 定义
// DOM 级别2 中引入:
interface StyleSheetList {
  readonly attribute unsigned long    length;
  StyleSheet         item(in unsigned long index);
};

属性
length 类型 unsigned long, 只读
列表中样式表 StyleSheets 的个数。有效的子样式表的索引范围是从 0length-1,包括 0length-1
方法
item
根据顺序索引来读取一个样式表。如果给定的索引大于或等于列表中样式表的个数,则返回 null
参数
index 类型 unsigned long
索引
返回值

StyleSheet

StyleSheetList 中第 index 个位置的样式表,或 null 如果给定的索引无效。

无异常
接口  MediaListDOM 级别2 中引入)

MediaList 接口抽象了有序的媒体集合。它并没有定义和限制怎样去实现这个集合。空列表等同于包含媒体 "all" 的列表。

可以用从0开始的整数索引来存取 MediaList 的项目


IDL 定义
// DOM 级别2 中引入:
interface MediaList {
           attribute DOMString        mediaText;
                                        // raises(DOMException) on setting

  readonly attribute unsigned long    length;
  DOMString          item(in unsigned long index);
  void               deleteMedium(in DOMString oldMedium)
                                        raises(DOMException);
  void               appendMedium(in DOMString newMedium)
                                        raises(DOMException);
};

属性
length 类型 unsigned long, 只读
列表中的媒体个数。有效的媒体索引是从 0length-1,包括 0length-1
mediaText 类型 DOMString
媒体列表的可分析文本表示。这是一个是用逗号分隔的媒体列表。
在赋值时的异常

DOMException

SYNTAX_ERR: 若给定的字符串有语法错误而不能被分析。

NO_MODIFICATION_ALLOWED_ERR: 若本媒体列表是只读的。

方法
appendMedium
在列表末尾添加媒体 newMedium。如果列表中已经存在 newMedium,那么先删除存在的这一项。
参数
newMedium 类型 DOMString
要添加的新媒体。
异常

DOMException

INVALID_CHARACTER_ERR: 若媒体中含有其样式表语言不支持的非法字符。

NO_MODIFICATION_ALLOWED_ERR: 若本列表为只读。

无返回值
deleteMedium
删除列表中的媒体 oldMedium
参数
oldMedium 类型 DOMString
要从列表中删除的媒体。
异常

DOMException

NO_MODIFICATION_ALLOWED_ERR: 若列表为只读。

NOT_FOUND_ERR: 若列表中不存在 oldMedium

无返回值
item
返回列表中第 index 个项目。若 index 大于等于列表中的媒体个数则返回 null
参数
index 类型 unsigned long
列表项目的索引。
返回值

DOMString

在列表 MediaList 中第 index 个位置的媒体,或 null 如果给定的索引无效。

无异常

1.3. 文档扩展

接口  LinkStyle (DOM 级别2 中引入)

LinkStyle 接口提供了从链接样式表的节点读取样式表的机制。 LinkStyle 的实例可以通过具体的强制转换方法由链接节点(DOM 2 中的 HTMLLinkElementHTMLStyleElementProcessingInstruction)的实例转换而来。


IDL 定义
// DOM 级别2 中引入:
interface LinkStyle {
  readonly attribute StyleSheet       sheet;
};

属性
sheet  类型 StyleSheet , 只读
样式表
接口  DocumentStyle (DOM 级别2 中引入)

DocumentStyle 接口提供了一种读取文档中内嵌样式表的机制。我们期望 DocumentStyle 的实例可以通过具体强制类型转换方法由 Document 接口的实例转换而来。


IDL 定义
// DOM 级别2 中引入:
interface DocumentStyle {
  readonly attribute StyleSheetList   styleSheets;
};

属性
styleSheets 类型 StyleSheetList, 只读
包含所有显示链接或内嵌到一个文档的样式表列表。对于 HTML 文档,它包括通过 HTML LINK 元素定义的外部样式表, 以及内嵌的 STYLE 元素。在 XML中,它只包括通过样式表处理指令定义的外部样式表 (参见 [XML-样式表])。

1.4. 关联样式表和文档。

HTML和样式表创建
一个样式表可以通过以下两种方式和一个HTML文档相关联:
  • 创建一个新的 HTML LINK 元素(参见 [DOM 级别2 HTML] 中的 HTMLLinkElement 接口,以及 [HTML4.0])。当该元素被插入该文档中,并且其属性 href 和 type 均指明所链接的对象是一个样式表之后,相对应的样式表就生成了。
  • 创建一个新的 HTML STYLE 元素(参见 [DOM 级别2 HTML] 中的 HTMLStyleElement 接口,以及 [HTML4.0])。当该元素被插入该文档中,并且其 type 属性指明该元素与用户代理使用的样式表语言相一致之后,相对应的样式表就生成了。
HTML和样式表删除
删除HTML中的一个LINK元素或STYLE元素后,相对应的与文档相关联的样式表就被删除了。被删除的样式表不再应用到原文档中。
XML和样式表创建
通过创建一个目标值为 'xml-stylesheet' [XML-StyleSheet] 的处理指令并将其插入到文档,我们可以创建一个和 XML 文档相关联的样式表。
XML和样式表删除
删除一个目标值为 'xml-stylesheet' [XML-StyleSheet] 的处理指令后,相对应的样式表就从与文档相关联的样式表集合中删除。被删除的样式表不再应用到原文档中。