【问题标题】:Is there a reason why CSS doesn't support ids and classes, starting from numbers?CSS不支持从数字开始的id和类有什么原因吗?
【发布时间】:2014-08-18 15:37:33
【问题描述】:

我注意到如果 id 或 class 从数字开始,则不会应用 css 属性。例如,以下都不起作用:

.1ww{
    /* some properties here */
}

.1{
    /* some properties here */
}

#1{
    /* some properties here */
}

#1ww{
    /* some properties here */
}

为什么 CSS 不支持从数字开始的 id 或类名? (例如,Javascript 适用于数字 id 和类)

【问题讨论】:

  • 由于您接受了一个没有解决“为什么”问题的答案,因此不清楚您在问什么。

标签: css


【解决方案1】:

我不认为有特定的 CSS 原因。这是编程语言的旧标准。如果第一个字符可以确定整个标记是数字还是标识符(前面有数字字符的标记必须是数字文字),语言标记器可以更快/更简单。

var x = 10e4; // is this a variable?

【讨论】:

    【解决方案2】:

    为了抄袭我很久以前在这里读到的一个类似问题的答案:这是从其他旧语言继承下来的惯例。

    过去,FORTRAN 和 BASIC 等语言不需要使用空格,因此如下所示:

    10 A1 = 10
    

    将与此相同:

    10A1=10
    

    问题是,这样的事情很难理解:

    111A=10
    

    因为它可以被解释为:

    11 1A = 10
    

    或:

    111 A = 10
    

    等等

    因此,以数字开头的变量是非法的。这是一个一直存在的约定,并且今天仍然存在于大多数语言中,包括 CSS。

    编辑:found the question

    【讨论】:

      【解决方案3】:

      Working Fiddle

      您可以使用 CSS 来实现它,但方式不同

      HTML

      <div id="1">Some Id with Number</div>
      

      CSS

      [id='1']
      {
          font-size: 60px;
          color: red;
      }
      

      但是

      #1 /*Not gonna work*/
      {
          font-size: 60px;
          color: red;
      }
      

      类也类似;

      Working Fiddle

      CSS

      [class="1"]
      {
          font-size: 100px;
          color: red;
      }
      

      CSS 不支持从数字开始的 id 和类有什么原因吗?
      主要原因之一是;它没有语义意义。例如

      <div id="1" class="2"></div> /*has no semantic meanings*/
      

      可以固定为;

      <div id="header" class="top-spacing"></div>
      

      Reference

      【讨论】:

      • 很好,但你能回答我的问题吗?
      • @nicael 我已经更新了答案。 html 的关键方面之一是 SEO。所以标记应该是语义的。 #s are bad 语义不佳或没有语义意义,因此这是不支持它们的关键原因之一。
      【解决方案4】:

      根据HTML5.1 Nightly from 5 October 2014,他们同意ID 没有理由不能以数字开头:

      注意:对于 ID 可以采用的形式没有其他限制;在 特别是,ID 可以只包含数字,以数字开头,开始 带有下划线,仅包含标点符号等。

      如果您必须在 ID 的开头使用数字,您可以(如 the other answers 中所述)使用属性选择器或 you could escape the number

      #\31 ww
      {
        background: red;
      }
      

      【讨论】:

        【解决方案5】:

        实际上,规范规定以数字开头的类将被解释为维度 [1]:

        CSS2 将紧跟其后的标识符解析为 DIMENSION 令牌(即未知单位),CSS1 将其解析为数字和标识符。这意味着在 CSS1 中,声明 'font: 10pt/1.2serif' 是正确的,就像 'font: 10pt/12pt serif';在 CSS2 中,“serif”之前需要一个空格。 (一些 UA 接受了第一个示例,但不接受第二个。)

        而且由于我们不知道以后会引入哪些维度,所以 CSS 中不存在的维度会被解析为未知维度:

        在 CSS1 中,类名可以以数字(“.55ft”)开头,除非它是尺寸(“.55in”)。在 CSS2 中,此类类被解析为未知维度(以允许将来添加新单位)。为了使“.55ft”成为一个有效的类,CSS2 要求第一个数字被转义(“.\35 5ft”)

        您可以通过转义第一个数字来使用以数字开头的类,这根据 W3C CSS 验证器是有效的。查看plunkr

        [1] 附录 G. CSS 2.1 语法

        【讨论】:

        • 第一个引号在这里不相关。第二个可以解释类选择器的限制。对于 ID 选择器,可能是类比问题,也可能取决于 id 选择器的原始 HTML 定义,它要求值以字母开头。
        • 第一个引用当然是相关的。它指出紧跟标识符的数字将被解析为维度标记(例如,.1ww = 1 x unit 'ww'),并且允许将来添加未知单位也会产生维度标记。以数字开头的 id 选择器与 HEX 颜色标记冲突(例如,#1ff Lexical Scanner
        【解决方案6】:

        虽然以数字开头的 Id 和类名不是一个好的约定,但您可以使用以下语法从您的 css 中访问这些元素

        [class="1ww"] 
        {
            /* some properties here */
        }
        

        [id="1"]
        {
            /* some properties here */
        }
        

        【讨论】:

        • 有趣的是,“按属性值匹配”值周围的引号通常是可选的。但不是在这里,出于与#1 一开始就不允许的完全相同的原因:D
        【解决方案7】:

        这是 CSS 的规则。 Here is the link

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

        【讨论】:

          【解决方案8】:

          ID 和类必须是有效的标识符。

          标识符在specification 中的列出方式如下:

          ident       -?{nmstart}{nmchar}*
          

          所以是一个可选的- 符号,后跟nmstart,后跟任意数量的nmchars。

          我们感兴趣的是nmstart,但我也会列出nmchar

          nmstart     [_a-z]|{nonascii}|{escape}
          nmchar      [_a-z0-9-]|{nonascii}|{escape}
          

          为了完整性:

          nonascii    [\240-\377]
          escape      {unicode}|\\[^\r\n\f0-9a-f]
          unicode     \\{h}{1,6}(\r\n|[ \t\r\n\f])?
          

          好的,那么,除了所有这些,请注意nmstart 如何包含0-9-。这意味着根据 CSS 规范,ID 和类不能以数字开头。事实上,他们甚至不能以-1 开头。或两个连字符。

          这就是您的代码无法识别它们的原因。

          【讨论】:

          • 这并没有回答“为什么 CSS 不支持从数字开始的 id 或类名?”的问题?它只是详细解释了它没有,除了它没有解释转义是如何工作的。
          • 真的,Niet the Dark Absol,它说 CSS 不支持每个文档,但你能解释一下原因吗?你把我弄糊涂了:D
          • @JukkaK.Korpela 你能解释一下为什么或者你不知道吗?
          • @nicael 如果您想了解更多原因,请参阅 reagten 的回答。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-06
          • 1970-01-01
          • 2010-11-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多