当前位置: 首页 > 面试题库 >

CSS标识符可以以两个连字符开头吗?

慕容玉书
2023-03-14
问题内容

CSS 2.1将标识符定义

在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日之间:

  • 2014年2月6日编辑草稿,于2014年4月19日储存。

如果该字符是第二个字符,并且是“-”(U + 002D),并且第一个字符也是“-”,则转义字符。

  • 2014年4月30日,编辑的草案],于2014年5月4日存储。

如果字符[…]是“-”(U + 002D)[…],则字符本身。

那么,是否有一些新的CSS3模块更改了标识符的定义,以使它们有时可以以开头--,或者到底发生了什么?


问题答案:

标准

实际上,CSS语法模块中的更改现在允许标识符以两个连字符开头:

4.3.9。 检查三个代码点是否会以一个标识符开头

看一下第一个代码点:

  • U + 002D减号

如果第二个代码点是名称-开始代码点 或U + 002D HYPHEN-MINUS
,或者第二个和第三个代码点是有效的转义符,则返回true。否则,返回false。

更改中也对此进行了描述:

11.1。 与2014年2月20日候选推荐书相比的变化

  • 更改类似ident的标记的定义,以允许“-”启动一个ident。

在www风格中,…让我们更改建议的语法线程以更改CSS Variables的语法:

Tab Atkins Jr. 建议将“自定义属性”的语法更改为“以下划线开头/包含下划线的任何标识”。
克里斯·埃普斯坦(Chris Eppstein)不同意,因为这_property是常见的IE6黑客。
布赖恩•卡德尔( Brian Kardell)提议–。
扎克·温伯格(Zack Weinberg)警告:

不幸的是,“-”需要更改语法。IDENT不允许以两个破折号开头。

对于应该做什么进行了长时间的讨论。

Tab Atkins Jr. 告知他们决定使用–前缀来指示定制属性和其他定制事物。
于是第二天,他COMMITED CSS语法到GitHub上的变化(他是规范的编辑器)。

实作
火狐浏览器

Firefox允许标识符–从Nightly 31 2014-04-03(pushlog)开始。该行为已在错误985838中更改:

错误985838- var-将CSS变量的前缀更改为–

最近决定对CSS变量规范进行的更改:

  • 自定义属性的前缀从更改var-为–
  • 在其中,var()您使用完整的自定义属性名称(即带有–前缀)
    –允许仅包含前缀的自定义属性
    CSS解析器中的idents现在允许诸如–和–0
    更改降落在Firefox 31.0上。从那时起,[id=–]作品。

但是,#–即使在最新的Nightly 41上也无法使用。为了解决该问题,我提交了错误1175192。

Chrome

Chromium构建了一个新的CSS解析器:

现在,我们允许身份以 –

它被运在此承诺,这是一部分这一commitlist,这是在推出这一承诺。因此,它最终在build 44.0.2370.0 325166中实现(自325152起,推送日志)。

从那时起,Chromium允许[id=–]和#–。



 类似资料:
  • 问题内容: 为什么在Java中(我不知道任何其他编程语言)标识符不能以数字开头,为什么也不允许以下声明? 问题答案: 通常,您将这种限制放入其中有两个原因: 用电子方式解析很痛苦。 对人类来说这是一个痛苦的解析。 考虑以下代码片段: 如果是合法标识符,那么末尾有哪个值?-3还是2?这是模棱两可的。 同时考虑: 最后有什么价值?这也是模棱两可的。 另外,以任何一种方式阅读都是很痛苦的。如果有人声明,

  • 假设您有一种语言,其中标识符可能以关键字开头。例如,假设“case”是一个关键字,但“caser”是一个有效的标识符。还假设lexer规则只能处理正则表达式。那么我似乎不能将关键字规则放在lexer中标识符规则的前面,因为这会将“caser”解析为“case”后跟“r”。我也不能在标识符规则之后放置关键字列表规则,因为标识符规则将匹配关键字,并且关键字规则永远不会触发。 因此,我可以在lexer中

  • 问题内容: 我将数据库转移到MS SQL Server 2008 R2,当我尝试保存长字符串时,它给了我最大长度错误,而我将它替换后将该列的数据类型设置为“文本”与“ varchar(max)”,但那里没有解决方案。 请为我提供一个解决此问题的解决方案。我正在执行以下查询: 我进行了很多搜索,但是找到的解决方案对我没有用。 谢谢! 问题答案: 根据ANSI SQL标准,对象标识符(例如,而不是字符

  • JSONException:JSONObject文本必须以字符6处的{开头。

  • 问题内容: 有时,我不知何故在我的主目录中意外创建了一个名为-s的文件。它约为500 kb,我不知道它是否包含重要数据。我无法弄清楚对该文件执行 任何 操作的方法,因为我尝试查看,复制或移动它的每个命令都将文件名解释为参数。 我试过将其用引号引起来,并使用反斜杠将其转义,即两者结合使用,似乎没有任何效果。 另外,当我第一次向同事提出这个问题时,我们困惑了片刻,直到有人终于听到了,然后问:“为什么不

  • 问题内容: CSS标识符和的(完整)有效/允许的 字符集 字符是什么? 是否可以使用正则表达式进行验证?它与浏览器无关吗? 问题答案: 字符集无关紧要。允许的字符更重要。检查CSS规范。这里是相关的: 在CSS中,标识符(包括选择器中的元素名称,类和ID )只能包含字符和ISO 10646 及更高版本的字符,以及连字符()和下划线();它们不能以数字,两个连字符或连字符后跟数字开头。标识符还可以包