根据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
?
答案 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,只要找到class
或id
属性,它就会在CSS文件中查找。 (这是非常简化的,但它有助于明白这一点。)
只是因为如果你有多个id
,浏览器会正确呈现它并不意味着你应该这样做。 id
具有的standard clearly says是唯一的。
答案 2 :(得分:1)
你自己已经回答了。
CSS会将其应用于它可以找到的所有id
和class
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关心