自定义数据 - *属性的名称中允许(不允许)哪些字符?

时间:2015-10-11 18:47:16

标签: html html5 xhtml web-standards

我正在开发一个用于提供视网膜图像的JS插件。标识这些图像的属性应该如下:

data-retina@2xdata-retina@1.5xdata-retina@2.5x

你能告诉我这些属性是否有效吗? HTML和XHTML中自定义数据 - *属性名称中允许(不允许)哪些字符?

2 个答案:

答案 0 :(得分:3)

请参阅W3C HTML5建议书中的definition of the data-* attribute

  • 在HTML5中,名称必须是 XML兼容(并且它会自动获得ASCII-lowercase)。

  • 在XHTML5中,名称必须与 XML兼容,且不得包含大写ASCII字母。

definition of XML-compatible说它

  • 不得包含:个字符
  • 必须与XML 1.0规范中的 Name production 相匹配

Name production列出允许使用哪些字符。

tl; dr :对于data-之后的部分,您可以使用以下字符:

  • 0 - 9
  • a - z
  • A - Z(不在XHTML5中)
  • - _ . ·
  • 以及这些Unicode范围中的字符:

    • [#x0300-#x036F](Combining Diacritical Marks
    • [#x203F-#x2040](
    • [#xC0-#XD6]
    • [#xD8-#XF6]
    • [#xF8-#x2FF]
    • [#x370-#x37D]
    • [#x37F-#x1FFF]
    • [#x200C-#x200D](ZERO WIDTH NON-JOINER,ZERO WIDTH JOINER)
    • [#x2070-#x218F]
    • [#x2C00-#x2FEF]
    • [#x3001-#xD7FF]
    • [#xF900-#xFDCF]
    • [#xFDF0-#xFFFD]
    • [#x10000-#xEFFFF]

因此不允许@(U + 0040)。

答案 1 :(得分:2)

请参阅HTML5规范的Before attribute name state部分:

  
      
  • U + 0009 字符制表(标签)
  •   
  • U + 000A LINE FEED(LF)
  •   
  • U + 000C FORM FEED(FF)
  •   
  • U + 0020 SPACE
  •   
  • 忽略角色。
  •   
  • U + 002F SOLIDUS(/)
      切换到自动关闭开始标记状态。
  •   
  • U + 003E 大于标志(>)   切换到数据状态。发出当前标记令牌   大写ASCII字母
  •   
  • 启动当前代码令牌中的新属性。将该属性的名称设置为当前输入字符的小写版本(将0x0020添加到字符的代码点),将其值设置为空字符串。切换到属性名称状态。
  •   
  • U + 0000 NULL
  •   
  • 解析错误。在当前标记令牌中启动新属性。将该属性的名称设置为U + FFFD REPLACEMENT CHARACTER字符,将其值设置为空字符串。切换到属性名称状态。
  •   
  • U + 0022 报价标记(“)
  •   
  • U + 0027 APOSTROPHE(')
  •   
  • U + 003C 少于标志(<)
  •   
  • U + 003D EQUALS SIGN(=)
  •   
  • 解析错误。按照下面的“其他”条目对待它。
  •   
  • EOF
      解析错误。切换到数据状态。重建EOF角色。
  •   
  • 其他
      在当前标记令牌中启动新属性。将该属性的名称设置为当前输入字符,将其值设置为空字符串。切换到属性名称状态。
  •   

简单来说:

  

它表示除了制表符,换行符,换页符,空格,固相线,大于号,引号,撇号和等号之外的所有字符都将被视为属性名称的一部分。就个人而言,我不会尝试推动这种情况。

灵感来自:What characters are allowed in an HTML attribute name?