【发布时间】:2023-03-04 07:37:07
【问题描述】:
CSS 2.1 将identifiers 定义为
在 CSS 中,标识符 只能包含字符 [a-zA-Z0-9] 和 ISO 10646 字符 U+00A0 及更高版本,加上连字符 (-) 和 下划线(_);它们不能以数字、两个连字符或 连字符后跟一个数字。标识符也可以包含转义 字符和任何 ISO 10646 字符作为数字代码。
因此,-- 应该是一个无效的标识符,因此#-- 不应该选择带有id="--" 的元素:
body { color: black }
#-- { color: red }
<p id="--">I should be black.</p>
属性值必须是标识符或字符串。
但-- 似乎可以作为属性值的标识符,至少在 Firefox 上是这样:
body { color: black }
[id=--] { color: red }
<p id="--">I am red on Firefox.</p>
此外,CSS.escape 已被修改为允许--:
在 Firefox 32 中进行了细微更改,以匹配规范和 CSS语法的演变。标识符现在可以以
--开头 第二个破折号不能转义。
根据Wayback Machine,更改发生在 2014 年 4 月 19 日至 30 日:
-
6 Feb 2014 editor's draft,存储于 2014 年 4 月 19 日。
如果字符是第二个字符并且是“-”(U+002D)并且 第一个字符也是“-”,然后是转义字符。
-
30 Apr 2014 editor's draft,存储于 2014 年 5 月 4 日。
如果字符 [...] 是 "-" (U+002D) [...],那么字符 自己。
那么,有没有一些新的 CSS3 模块改变了标识符的定义,所以它们有时可以以 -- 开头,或者这里到底发生了什么?
【问题讨论】:
-
不知道。 css-syntax,在这种情况下的相关模块,没有提到这样的变化。声明“属性名称和规则名称始终是标识符,必须以字母或连字符开头,后跟字母,然后可以包含字母、数字、连字符或下划线。”以及the tokenization diagram for <ident-token>都与CSS2.1一致。
-
@BoltClock 所以是火狐的bug,
CSS.escape和标识符的定义不一致? -
CSSOM 在serializing idents 上有一个部分,但即使我也很难理解它。如果 CSSOM 确实已更改,那么是的,它至少与当前的 css-syntax ED 不一致。
-
好吧,不知怎的,我设法完全忘记了这一点:w3.org/TR/css-variables-1 似乎 css-syntax 还没有更新以考虑自定义道具。我会写一个答案。
-
不错的发现。 2013 年 12 月 5 日的最新 TR 包含与 2014 年 2 月 6 日相同的文本部分:w3.org/TR/2013/WD-cssom-20131205
标签: css firefox css-selectors identifier