在HTML和CSS中使用MULTIPLE'id'和'class'属性之间的区别

时间:2012-03-24 07:51:24

标签: html css dom css-selectors dom-traversal

根据CSS原则,当我们想要实现样式的可重用性时,我们应该使用class属性,当我们知道整个DOM结构中有一个唯一元素时,我们应该对该元素使用id属性然后指定一个样式。

但是在这个Web应用程序时代,DOM结构可能过于复杂,并且可能存在重复id。最好的例子是#title。它的名称可以出现在文档的任何位置。现在最好的部分是,如果我在定义样式时使用#title.title(假设它们已经多次出现并具有不同的父级),那么CSS生成的输出是相同的。这个jsfiddle将帮助您理解我的意思http://jsfiddle.net/dewbot/LGAQD/

我的印象是,就像JS Renderer一样,CSS Parser在发现第一个#title时停止迭代,但它没有发生,它会一直进行迭代直到它达到EOF,就像class一样。所以这就产生了一个问题,为什么我们应该使用多个class而不是id

4 个答案:

答案 0 :(得分:4)

  

所以这就产生了一个问题,为什么我们应该使用多个class而不是id

Because the HTML spec says so,违反规则通常会导致代码损坏。

使用相同的ID 识别多个元素是否有意义?我想不是。这就是类的用途:分类类似的元素。

  

现在最好的部分是,如果我在定义样式时使用#title.title(假设它们已经多次出现并具有不同的父级),那么CSS生成的输出是相同的。

这是自然行为,而不是任何执行此操作的浏览器中的错误本身。尽管如此,这并不是你应该依赖的行为,因为它处理的是不符合标记的行为,这通常很糟糕。

  

我的印象是,就像JS Renderer一样,CSS Parser在发现第一个#title时停止迭代,但它没有发生,它会一直迭代直到达到EOF,就像class一样。

现在这是错的。 CSS解析器在每个元素的基础上进行选择器匹配 :它们不接受规则并遍历DOM,将其应用于匹配它的任何元素;相反,他们采用每个元素并尝试将其与尽可能多的规则相匹配。通过这种方式,解析器不知道 ID是否已在文档的其他位置使用,也不关心。它只是根据元素所说的匹配This answer更详细地介绍了它。

只要元素具有特定ID,它就必须与寻找该特定ID的任何ID选择器匹配。因此,期望解析器将具有给定ID的任何和所有元素匹配到单个ID选择器,即使在HTML中具有相同ID的多个元素也是不正确的。换句话说,CSS不强制HTML所需的ID的唯一性。 This answer解释道。

尽管如此,底线是:一次只为一个元素分配一个ID ,并使用类来分组多个相似的元素。 不要试图聪明地改变规则。

答案 1 :(得分:4)

我认为您解析CSS错误。浏览器没有通过CSS文件行获取行,并将样式应用于HTML文件中的元素,反之亦然。浏览器会解析HTML,只要找到classid属性,它就会在CSS文件中查找。 (这是非常简化的,但它有助于明白这一点。)

只是因为如果你有多个id,浏览器会正确呈现它并不意味着你应该这样做。 id 具有standard clearly says是唯一的。

答案 2 :(得分:1)

你自己已经回答了。

CSS会将其应用于它可以找到的所有idclass es。但是,JS / jQuery将首先实现它。

所以,你的问题变成了:

我是否应该将相同的id应用于JS操作的许多元素?答案: Baaaaa ...... D决定

我应该将相同的id应用于CSS的许多元素吗?答:还不错,决定!但是会实施你的规则

您还应该尝试使用以分层方式应用的CSS和JS规则,这样,您永远不会出错。比如,#Heading div#Title{css rules here}$('#Heading div#Titles')...jQuery rules here

接下来就是尝试以保守的方式实现id。

然后,尝试在您的网站/应用中为元素提供唯一ID,而不是单页。这将使您免于在页面中包含的多页实用程序脚本。

例如:标题位于首页顶部:#Home-Top-Heading

希望它有所帮助。

答案 3 :(得分:0)

  

如果您使用相同的ID,您的代码将无法通过验证   比一个

CSS不关心mutliple id' s,javascript关心

http://css-tricks.com/the-difference-between-id-and-class/