带有句点ID的CSS选择器

Jon*_*ams 86 html css css-selectors

HTML规范允许id中的句点(.):

<img id="some.id" />

但是,使用CSS ID选择器规则将无法正确匹配:

#some.id { color: #f00; }

ID选择器的CSS规范没有提到这种情况.所以我假设它使用标签名称和类选择器的组合?例如,一个CSS规则a.className将适用于所有的锚标记(<a>)与类名className一样<a class="className"></a>.

是否有可能有一个外部CSS文件规则,该规则通过其中包含句点的ID引用HTML元素?

我期望不会因为CSS规范指定CSS" 标识符 "不包括句点作为有效字符.那么这是HTML和CSS规范之间的根本不匹配吗?我唯一的选择是使用不同类型的CSS选择吗?任何人都比我确认或否认这个更聪明吗?

(我会从HTML id属性中删除句点以简化操作,但它是系统生成的ID,因此在这种情况下我无法更改它.)

Jon*_*ams 177

经典.在仔细阅读了写下这个问题的所有规范后,我再读了一遍,发现有一个转义字符.我以前从未需要它,但CSS规范允许反斜杠(\)像大多数语言一样逃避.你知道什么?

所以在我的例子中,以下规则将匹配:

#some\.id { color: #f00; }

  • 好的研究工作.应该有更多像这样的问答,不像"写我的代码而不是我". (7认同)
  • 很好的研究.我刚刚在一个大型企业应用程序中遇到过这个问题.我完全难过,从未见过它.什么是在一个句号中制作一个句号? (3认同)
  • 我正在考虑添加一个新问题并编写自己的答案,但我决定在这里发表评论.如果您使用的是Stylus预处理器,则需要使用两个反斜杠,例如`#some \\.id`来转义特殊字符.Stylus消耗第一个反斜杠,在编译的CSS中留下剩余的反斜杠,从而实现本答案中描述的所需结果. (3认同)

小智 20

你也可以使用img [id = some.id]]

更多信息:http://www.w3.org/TR/selectors/#attribute-selectors

  • 这可能适用于某些浏览器,但我也看到属性选择器抛出错误。你仍然可以将 `.` 转义为 `\.`。 (2认同)