2016-08-13 200 views
3

Selectors Level 4最新版本:CSS类选择器,id选择器的语法?

类选择被给定为一个句号(。U + 002E)紧接着的标识符。

一个ID选择器由一个“数字符号”(U + 0023,#)紧跟着的ID值组成,它必须是一个CSS identifier

在上面的标识符链接:

在CSS中,标识符(包括元素名,类和在选择器的ID)可以只包含字符[A-ZA-Z0-9]和ISO 10646个字符U + 00A0或更高,加上连字符( - )和下划线(_); 不能以一个数字开头,两个连字符或连字符后跟数字。

然而,在同一规格的Grammar部分:

<class-selector> = '.' <ident-token>

<id-selector> = <hash-token>

正如你可以从上面的标记链接看到,语法图明确规定CSS标识符可以从两个连字符开始,并且g ID选择器的rammar与散列标记的语法矛盾。

我应该遵循哪些定义?

UPDATE:

我错过了在Grammar部分的底部的行:

在< ID-选择>,所述<散列令牌>的值必须是一个identifier

+2

CSS变量使得这个更加混乱。看到我对[这个问题]的答案(http://stackoverflow.com/questions/30819462/can-css-identifiers-begin-with-two-hyphens)。 – BoltClock

+0

[CSS的标识符是否可以以两个连字号开头?](http://stackoverflow.com/q/30819462/1529630) – Oriol

回答

1

hash-token图一定是错误的,因为你报的是:

元素名,类和ID在选择器(...)不能以数字,两个连字符,或一个连字符后面跟着一个数字

这是非常明确的

+1

显然,在ID选择符的这些定义之间,只有其中一个是正确的,只是不确定哪一个。我认为编辑忘记更新一些定义(特别是链接)也是很有可能的,因为它仍然是一个工作草案。 – damonh

+1

当然只有一个是正确的,但是因为其中一个是明确的而另一个是泛化的,所以我认为我引用的那个是好的 – martriay

+1

事实证明(看我的更新)图是好的,因为它不是用于描述id选择器的语法,但是是一个散列。而且,根据CSS标识符的新语法,现在允许在开头使用两个连字符。 – damonh