在前面,我们已经以相似的方式使用了类选择符和ID选择符。它们的使用或多或少地影响到HTML的结构属性,因为样式可以应用于任何元素,而不管它在文档中的结构功能如何。这并不是我们所希望的,因为理论上类和ID选择符可以让任何元素的表现类似于其他元素,而这些元素都是使HTML成为结构化语言而引入的。我们暂且将这些放到一边,那么到底类和ID间的区别在哪里呢?
首先,类可以分配给任何数量的元素,像我们前面所看到的——warning这个类同时应用于段落和SPAN元素,而且它可以应用于许多其他的元素。另一方面,ID却只能在某个HTML文档中使用一次。从这点来看,它们有点类似于表格元素INPUT中的NAME属性。每个NAME属性的值应该是唯一的,类似于ID。
在实际应用中,浏览器并不一定检查HTML文档中ID的唯一性。就是说可以在HTML文档中设置多个元素,而这些元素对于它们的ID属性来说值相同,从而同一个样式可应用于多个元素。虽然这种用法是不正确的,但却常常被使用。顺便提一下,这在HTML文档中是不对的。其他的标记语言对ID可能没有这一约束,尽管我们无法直接得知,但去查一查它的语言规范就知道了。无论如何在HTML文档中,不允许某个ID的值同其他ID的值一样。
类和ID的另一个区别是:ID对给定于元素应用何种样式比类具有更高的优先权。这将在后面的“层叠”一节详细讲述。
和类一样,ID的声明也能独立于HTML元素,尽管它们应该是唯一的,但这已无关紧要了。当然,可能在某些情况下能够预知某个ID值会出现在文档中,但却不知道是在哪个HTML元素上。所以能够声明独立的ID选择符是很有用的。例如,在某个给定的文档中,将有一个ID值为mostImportant的元素,但却不知道这个元素到底是段落、短语、列表项,还是标题,只知道它存在于这个文档中的某个元素上,而且出现不止一次。于是可以写出这样一条规则:
#mostImportant {color:red;background:yellow;}
这条规则可以匹配任何下列元素,像前面提到的那样,它们不应该出现在同一个文档中,因为它们具有相同的ID值:
This is important!
This is important!