我正在开发一个用于提供视网膜图像的JS插件。标识这些图像的属性应该如下:
data-retina@2x
,
data-retina@1.5x
,
data-retina@2.5x
。
你能告诉我这些属性是否有效吗? HTML和XHTML中自定义数据 - *属性名称中允许(不允许)哪些字符?
答案 0 :(得分:3)
请参阅W3C HTML5建议书中的definition of the data-*
attribute:
在HTML5中,名称必须是 XML兼容(并且它会自动获得ASCII-lowercase)。
在XHTML5中,名称必须与 XML兼容,且不得包含大写ASCII字母。
definition of XML-compatible说它
:
个字符Name
production 相匹配此Name
production列出允许使用哪些字符。
tl; dr :对于data-
之后的部分,您可以使用以下字符:
0
- 9
a
- z
A
- Z
(不在XHTML5中)-
_
.
·
以及这些Unicode范围中的字符:
‿
⁀
)因此不允许@
(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角色。- 其他
在当前标记令牌中启动新属性。将该属性的名称设置为当前输入字符,将其值设置为空字符串。切换到属性名称状态。
简单来说:
它表示除了制表符,换行符,换页符,空格,固相线,大于号,引号,撇号和等号之外的所有字符都将被视为属性名称的一部分。就个人而言,我不会尝试推动这种情况。