在一个页面中为多个元素提供相同的ID是否安全?
如您所知,在一个页面中为多个元素提供相同的ID是违反验证规则的。但是,规则被破坏,并且在HTML标签汤的世界中,浏览器必须考虑这些破坏的规则而不破坏页面,因此您观察到的行为。
虽然浏览器的行为方式即使你这样做也是如此(幸运的是,对于无法帮助的情况),我不会称之为完全“安全”,因为这样的行为可能不会保持一致或可靠。
最好的选择是尽可能忠实地遵守规则,只有在你有非常好的理由(而且你几乎永远不会)时才会违反规则,所以不要考虑一下)。否则,like Joseph Silber said使用专门用于对多个元素进行分类或分组的类。
有人可以解释这种奇怪的情况吗?
CSS不强制或假定HTML文档中ID的唯一性;相反,the Selectors spec只是说明了这一点:
ID选择器表示一个元素实例,其标识符与ID选择器中的标识符匹配。
请注意在整个句子中使用“an”一词。
以下声明是一些示例用法,使用“any”一词代替:
以下ID选择器表示ID类型属性值为“chapter1”的任何元素:
#chapter1
以下选择器表示ID类型属性值为“z98y”的任何元素。
*#z98y
符合规范的文件的假设在选区规范的第3级附近阐明,在该部分的开头附近(强调我的):
使ID类型属性特殊的原因是,无论携带它们的元素的类型如何,没有两个这样的属性可以在符合文档中具有相同的值;无论文档语言如何,ID类型属性都可用于唯一标识其元素。
“conformant”指的是与HTML的一致性,而不是CSS。请记住,这个文本没有出现在2级规范中,这是你在问题中引用的那个。
请记住,引用的文字不是规范性的。虽然它是一种帮助实施者解决错误处理案例的方法,但它并不是一个必须遵循的强制性规则,事实上,任何实现都可以自由地表现出不同的行为而不违反规范。不要仅仅为了利用看似预期或一致的行为而编写无效的HTML,因为您无法保证这些行为将保持这种状态。任何CSS实现都可以自由地匹配共享相同ID的元素,甚至可以完全停止匹配它们,如果它决定它应该如何处理违反此规则的文档。
换句话说:只是因为你可以,并不意味着你应该。