为HTML元素创建id属性时,该值有哪些规则?


当前回答

从技术上讲,可以在id/name属性中使用冒号和句点,但我强烈建议避免两者。

在CSS(以及jQuery等几个JavaScript库)中,句点和冒号都有特殊含义,如果不小心就会遇到问题。句点是类选择器,冒号是伪选择器(例如,当鼠标悬停在元素上时,元素的“:hover”)。

如果给元素id为“my.ccool:thing”,则CSS选择器将如下所示:

#my.cool:thing { ... /* some rules */ ... }

也就是说,在CSS中,“id为‘my’的元素、‘cool’类和‘thing’伪选择器”。

任何大小写、数字、下划线和连字符都要使用A-Z。如上所述,确保您的ID是唯一的。

这应该是你最关心的问题。

其他回答

HTML5

请记住,ID必须是唯一的,即文档中不能有多个元素具有相同的ID值。

HTML5中关于ID内容的规则是(除了唯一性之外):

此属性的值不能包含空格。[...]虽然HTML5中取消了这一限制,但为了兼容性,ID应该以字母开头。

这是关于ID的W3规范(来自MDN):

任何字符串,具有以下限制:必须至少有一个字符长不能包含任何空格字符以前版本的HTML对ID值的内容设置了更大的限制(例如,它们不允许ID值以数字开头)。

更多信息:

W3-全局属性(id)MDN属性(id)

大写和小写字母有效“_”和“-”也有效数字有效冒号(,)和句点(.)似乎有效有趣的是,表情符号起作用

对于HTML 4,技术上的答案是:

ID和NAME标记必须以字母([a-Za-z])开头,后面可以是任意数量的字母、数字([0-9])、连字符(“-”)、下划线(“_”)、冒号(“:”)和句点(“.”)。

HTML5甚至更为宽松,只表示id必须至少包含一个字符,并且不能包含任何空格字符。

在XHTML中,id属性区分大小写。

作为一个纯粹的实际问题,您可能需要避免某些字符。句点、冒号和“#”在CSS选择器中具有特殊含义,因此您必须在CSS中使用反斜杠或在传递给jQuery的选择器字符串中使用双反斜杠来转义这些字符。想想在你疯狂地使用id中的句点和冒号之前,你需要多长时间在样式表或代码中转义一个字符。

例如,HTML声明<div id=“first.name”></div>是有效的。您可以在CSS中将该元素选择为#first\.name,并在jQuery中选择为:$('#first\\name')。但是如果您忘记了反斜杠$('#first.name'),您将拥有一个完全有效的选择器来查找一个id优先且具有类名的元素。这是一个容易忽视的错误。从长远来看,选择id名(连字符而不是句点)可能会更快乐。

通过严格遵守命名约定,可以简化开发任务。例如,如果您将自己完全限制为小写字符,并且始终使用连字符或下划线分隔单词(但不能同时使用连字符和下划线,请选择其中一个,不要使用另一个),那么您就有了一个易于记忆的模式。你永远不会怀疑“是firstName还是firstName?”,因为你永远知道你应该输入first_name。更喜欢驼色?然后限制自己,不要使用连字符或下划线,并且始终对第一个字符使用大写或小写,不要混用它们。


现在一个非常模糊的问题是,至少有一个浏览器Netscape 6错误地将id属性值视为区分大小写。这意味着,如果您在HTML中键入id=“firstName”(小写'f'),在CSS中键入#firstName{color:red}(大写'f'),则错误浏览器将无法将元素的颜色设置为红色。在2015年4月进行编辑时,我希望您没有被要求支持Netscape 6。将其视为历史脚注。

连字符、下划线、句点、冒号、数字和字母都适用于CSS和jQuery。以下内容应该有效,但在整个页面中必须是唯一的,并且必须以字母[a-Za-z]开头。

使用冒号和句点需要做更多的工作,但可以按照下面的示例进行操作。

<html>
<head>
<title>Cake</title>
<style type="text/css">
    #i\.Really\.Like\.Cake {
        color: green;
    }
    #i\:Really\:Like\:Cake {
        color: blue;
    }
</style>
</head>
<body>
    <div id="i.Really.Like.Cake">Cake</div>
    <div id="testResultPeriod"></div>

    <div id="i:Really:Like:Cake">Cake</div>
    <div id="testResultColon"></div>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            var testPeriod = $("#i\\.Really\\.Like\\.Cake");
            $("#testResultPeriod").html("found " + testPeriod.length + " result.");

            var testColon = $("#i\\:Really\\:Like\\:Cake");
            $("#testResultColon").html("found " + testColon.length + " result.");
        });
    </script>
</body>
</html>

HTML5:ID和类属性的允许值

从HTML5开始,对ID值的唯一限制是:

必须在文档中唯一不能包含任何空格字符必须至少包含一个字符

类似的规则适用于类(当然,唯一性除外)。

所以值可以是所有数字,只有一个数字,只有标点符号,包括特殊字符等等。没有空格。这与HTML4非常不同。

在HTML4中,ID值必须以字母开头,然后只能后跟字母、数字、连字符、下划线、冒号和句点。

在HTML5中,这些是有效的:

<div id="999"> ... </div>
<div id="#%LV-||"> ... </div>
<div id="____V"> ... </div>
<div id="⌘⌥"> ... </div>
<div id="♥"> ... </div>
<div id="{}"> ... </div>
<div id="©"> ... </div>
<div id="♤₩¤☆€~¥"> ... </div>

请记住,在ID值中使用数字、标点符号或特殊字符可能会在其他上下文(例如CSS、JavaScript、正则表达式)中造成麻烦。

例如,以下ID在HTML5中有效:

<div id="9lions"> ... </div>

但是,它在CSS中无效:

根据CSS2.1规范:

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

在大多数情况下,您可以在具有限制或特殊含义的上下文中转义字符。


W3C参考

HTML5

3.2.5.1 id属性id属性指定其元素的唯一标识符(id)。该值必须在元素主页中的所有ID中唯一子树,并且必须至少包含一个字符。该值不得包含任何空格字符。注意:ID的形式没有其他限制;在里面特别是,ID可以由数字组成,以数字开头,开始带下划线,仅由标点符号等组成。3.2.5.7等级属性如果指定了属性,则该属性的值必须是表示元素属于。HTML元素分配给它的类包含所有类属性的值拆分时返回的类空间。(重复项被忽略。)作者可以在中使用的令牌没有其他限制class属性,但鼓励作者使用描述内容的性质,而不是描述内容的期望呈现。