Al crear los atributos id
para elementos HTML, ¿qué reglas existen para el valor?
Para HTML 4 , la respuesta es técnicamente:
Los tokens de ID y NOMBRE deben comenzar con una letra ([A-Za-z]) y pueden ir seguidos de cualquier número de letras, dígitos ([0-9]), guiones ("-"), guiones bajos ("_") , dos puntos (":") y puntos (".").
HTML 5 es aún más permisivo, diciendo solo que una identificación debe contener al menos un carácter y puede que no contenga ningún espacio.
El atributo id es sensible a mayúsculas y minúsculas en XHTML .
Como un asunto puramente práctico, es posible que desee evitar ciertos caracteres. Los puntos, dos puntos y '#' tienen un significado especial en los selectores de CSS, por lo que tendrá que escapar de esos caracteres usando una barra inversa en CSS o una barra diagonal inversa doble en una cadena de selección que se pasa a jQuery . Piense en la frecuencia con la que tendrá que escapar de un personaje en sus hojas de estilo o código antes de volverse loco con puntos y dos puntos en las ID.
Por ejemplo, la declaración HTML <div id="first.name"></div>
es válida. Puede seleccionar ese elemento en CSS como #first\.name
y en jQuery así: $('#first\\.name').
Pero si olvida la barra invertida, $('#first.name')
, tendrá un selector perfectamente válido buscando un elemento con id first
y también tendrá la clase name
. Este es un error que es fácil de pasar por alto. Puede que a la larga sea más feliz eligiendo el id first-name
(un guión en lugar de un punto), en su lugar.
Puede simplificar sus tareas de desarrollo siguiendo estrictamente una convención de nomenclatura. Por ejemplo, si se limita por completo a los caracteres en minúscula y siempre separa palabras con guiones o guiones bajos (pero no ambos, elija uno y nunca use el otro), entonces tiene un patrón fácil de recordar. Nunca se preguntará "¿fue firstName
o FirstName
?" porque siempre sabrás que debes escribir first_name
. ¿Prefiere la funda de camello? Limítate a eso, sin guiones ni guiones bajos, y siempre, siempre con mayúsculas o minúsculas para el primer carácter, no los mezcles.
Un problema ahora muy oscuro fue que al menos un navegador, Netscape 6, trató incorrectamente los valores de los atributos de identificación como sensibles a mayúsculas y minúsculas . Eso significaba que si hubiera escrito id="firstName"
en su HTML (minúscula 'f') y #FirstName { color: red }
en su CSS (mayúscula 'F'), ese navegador defectuoso no habría podido configurar el color del elemento en rojo. En el momento de esta edición, abril de 2015, espero que no se te pida que apoyes a Netscape 6. Considera esto como una nota histórica.
De la especificación HTML 4 :
Los tokens de ID y NOMBRE deben comenzar con una letra ([A-Za-z]) y pueden ir seguidos de cualquier número de letras, dígitos ([0-9]), guiones ("-"), guiones bajos ("_") , dos puntos (":") y puntos (".").
Un error común es usar una identificación que comienza con un dígito.
Técnicamente puede usar dos puntos y puntos en los atributos id/name, pero le sugiero que evite ambos.
En CSS (y en varias bibliotecas de JavaScript como jQuery), tanto el período como los dos puntos tienen un significado especial y se encontrará con problemas si no tiene cuidado. Los períodos son selectores de clase y los dos puntos son pseudo-selectores (por ejemplo, ": hover" para un elemento cuando el mouse está sobre él).
Si le asignas a un elemento el id "my.cool:thing", tu selector de CSS se verá así:
#my.cool:thing { ... /* some rules */ ... }
Lo que realmente significa "el elemento con un id de 'my', una clase de 'cool' y el 'cosa' de pseudo-selector" en CSS.
Se adhieren a A-Z de cualquier caso, números, guiones bajos y guiones. Y como se dijo anteriormente, asegúrate de que tus ID sean únicas.
Esa debería ser tu primera preocupación.
jQuery hace maneja cualquier nombre de ID válido. Solo necesita escapar de los metacaracteres (es decir, puntos, punto y coma, corchetes ...). Es como decir que JavaScript tiene un problema con comillas solo porque no puedes escribir
var name = 'O'Hara';
Estrictamente debe coincidir
[A-Za-z][-A-Za-z0-9_:.]*
Pero jquery parece tener problemas con los dos puntos por lo que podría ser mejor evitarlos.
elimina las restricciones adicionales en el atributo id vea aquí . Los únicos requisitos que quedan (aparte de ser únicos en el documento) son:
La identificación debe coincidir:
[A-Za-z][-A-Za-z0-9_:.]*
-
(guión), _
(guión bajo), :
(dos puntos) y .
(punto)pero uno debe evitar :
y .
beacause:
Por ejemplo, una ID puede ser etiquetada como "ab: c" y referenciada en la hoja de estilo como #ab: c, pero además de ser la identificación del elemento, podría significar id "a", clase "b", pseudo- selector "c". Mejor evitar la confusión y evitar el uso. y: en conjunto.
A partir de HTML5, las únicas restricciones en el valor de una ID son:
Reglas similares aplican a las clases (excepto por la singularidad, por supuesto).
Por lo tanto, el valor puede ser todos los dígitos, solo un dígito, solo caracteres de puntuación, incluir caracteres especiales, lo que sea. Simplemente no hay espacios en blanco. Esto es muy diferente de HTML4.
En HTML 4, los valores de ID deben comenzar con una letra, que luego puede ser seguida solo por letras, dígitos, guiones, guiones bajos, dos puntos y puntos.
En HTML5 estos son válidos:
<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>
Solo tenga en cuenta que el uso de números, puntuación o caracteres especiales en el valor de una ID puede causar problemas en otros contextos (por ejemplo, CSS, JavaScript, regex).
Por ejemplo, la siguiente ID es válida en HTML5:
<div id="9lions"> ... </div>
Sin embargo, no es válido en CSS:
De la especificación CSS2.1:
En CSS, identificadores (incluidos los nombres de elementos, clases e identificadores en los selectores) solo puede contener los caracteres [a-zA-Z0-9] y los caracteres ISO 10646 U + 00A0 y superior, más el guión ( -) y el guión bajo (_);no pueden comenzar con un dígito, dos guiones o un guión seguido de un dígito.
En la mayoría de los casos, es posible que pueda escapar de los caracteres en contextos donde tienen restricciones o un significado especial.
Referencias W3C
HTML5
El atributo
id
especifica el identificador único (ID) de su elemento.El valor debe ser único entre todos los ID en el subárbol de inicio del elemento y debe contener al menos un carácter. El valor no debe contener ningún carácter de espacio.
Nota: No hay otras restricciones sobre qué forma puede tomar una identificación; en particular, las ID pueden constar de solo dígitos, comenzar con un dígito, comenzar con un guión bajo, constar de solo puntuación, etc.
El atributo, si se especifica, debe tener un valor que sea un conjunto de tokens separados por espacios que representan las diversas clases a las que pertenece el elemento.
Las clases que un elemento HTML le ha asignado consisten en todas las clases devueltas cuando el valor del atributo de clase se divide en espacios. (Se ignoran los duplicados).
No hay restricciones adicionales sobre los tokens que los autores pueden usar en el atributo de clase, pero se recomienda a los autores que usen valores que describan la naturaleza del contenido, en lugar de valores que describan la presentación deseada del contenido.
En la práctica, muchos sitios usan id
atributos que comienzan con números, aunque técnicamente no es un HTML válido.
La especificación del borrador HTML 5 afloja las reglas para los atributos id
y name
: ahora son solo cadenas opacas que no pueden contener espacios.
Los guiones, los guiones bajos, los puntos, los dos puntos, los números y las letras son válidos para su uso con CSS y JQuery. Lo siguiente debería funcionar pero debe ser único en toda la página y también debe comenzar con una letra [A-Za-z].
Trabajar con dos puntos y períodos necesita un poco más de trabajo, pero puede hacerlo como muestra el siguiente ejemplo.
<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>
Teniendo en cuenta que la identificación debe ser única, es decir. no debe haber varios elementos en un documento que tengan el mismo valor de id.
Las reglas sobre el contenido de ID en HTML5 son (aparte de ser únicas):
This attribute's value must not contain white spaces. [...]
Though this restriction has been lifted in HTML 5,
an ID should start with a letter for compatibility.
Esta es la W3 espec. Sobre ID (desde MDN):
Any string, with the following restrictions:
must be at least one character long
must not contain any space characters
Previous versions of HTML placed greater restrictions on the content of ID values
(for example, they did not permit ID values to begin with a number).
Para hacer referencia a una identificación con un punto, debe usar una barra invertida. No estoy seguro de si es lo mismo para guiones o guiones bajos. Por ejemplo: HTML
<div id="maintenance.instrumentNumber">############0218</div>
CSS
#maintenance\.instrumentNumber{Word-wrap:break-Word;}
Además, nunca olvides que una identificación es única. Una vez utilizado, el valor de ID puede no aparecer nuevamente en ninguna parte del documento.
Es posible que tenga muchas ID, pero todas deben tener un valor único.
Por otro lado, está el elemento clase. Al igual que la identificación, puede aparecer muchas veces, pero el valor puede usarse una y otra vez.
De la especificación de HTML 4 ...
Los tokens de ID y NOMBRE deben comenzar con una letra ([A-Za-z]) y pueden ir seguidos de cualquier número de letras, dígitos ([0-9]), guiones ("-"), guiones bajos ("_") , dos puntos (":") y puntos (".").
EDITAR: ¡ohh! ¡Golpeado al botón, otra vez!
Un identificador único para el elemento.
No debe haber varios elementos en un documento que tengan el mismo valor de id.
Cualquier cadena, con las siguientes restricciones:
no debe contener caracteres de espacio:
El uso de caracteres excepto ASCII letters and digits, '_', '-' and '.'
puede causar problemas de compatibilidad, ya que no estaban permitidos en HTML 4
. Aunque esta restricción se ha levantado en HTML 5
, una identificación debe comenzar con una letra para compatibilidad.
Parece que aunque los dos puntos (:) y los puntos (.) Son válidos en la especificación HTML, no son válidos como selectores de identificación en CSS , por lo que probablemente sea mejor evitarlo si pretende usarlos para ese fin.
para HTML5
El valor debe ser único entre todos los ID en el subárbol de inicio del elemento y debe contener al menos un carácter. El valor no debe contener ningún carácter de espacio.
Al menos un personaje, sin espacios.
Esto abre la puerta a casos de uso válidos, como el uso de caracteres acentuados. También nos da mucha más munición para dispararnos en el pie, ya que ahora puedes usar valores de identificación que causarán problemas tanto con CSS como con JavaScript a menos que seas realmente cuidadoso.
Cualquier Valor alfanumérico y " - " y " _ " son válidos. Pero, debe comenzar el nombre de id con cualquier carácter entre A-Z o a-z .
# : . * !
<base>, <head>, <html>, <meta>, <param>, <script>, <style>, and <title>.
Sin espacios, debe comenzar con al menos un carácter de a a z y de 0 a 9.