大粗体大写锁定 TL;DR:
我知道如何确定选择器的特异性,我认为它使用了有缺陷的假设,我可以用有效的集合理论关系来支持我的愤怒,请不要回应解释 W3 计算规则的特异性,请阅读问题<-阅读。
这困扰了我一段时间,当我为一些类似于下面的 HTML 编写样式时:
...
<div id="outer">
<span id="inner"></span>
<span></span>
...
</div>
...
为什么特异性规则会使选择器“#outer span”比“#inner”更具体?ID 是唯一的,所以当我说“#inner”时,我只能指代一个元素,为什么它不那么具体?我了解确定特异性的规则,我只是想知道这是故意的还是偶然的,以及是否有人知道我如何向编写 css 标准的人提出这个问题。
我应该注意,我知道我可以使用 #outer #inner 来确保最大的特异性,但这似乎首先违背了 ID 的目的。当我编写模板并且我不确定一个 ID 是否会在另一个 ID 中时,这也是一个有问题的解决方案。我不是在寻找解决方法,只是在寻找理论答案。
我的问题是理论,完全基于集合逻辑。尽管我的想法是,如果您为 n 个可能项目中的 1 个项目定义规则,那不是尽可能具体吗?为什么 CSS 选择器的创建者会制定一个可以定义 n 个可能项目中的 m 个项目的规则,其中 m 是 n 的子集作为更具体的规则?
我的想法是,#id 相当于按名称识别 1 个项目,而 #id elm 将通过名称与项目的关系来识别一个组。将命名项目称为比具有命名关系的未命名组更不具体是完全违反直觉的。