¿HTML5 cambia el estándar para comentarios HTML?

131

Recientemente descubrí que existe, posiblemente, una nueva forma de comentar en HTML5.

En lugar de los típicos <!-- -->comentarios de varias líneas sobre los que he leído, pensé que noté que mi IDE hacía un <!div >comentario regular . Así que lo probé y, para mi sorpresa, Chrome había comentado esa etiqueta. Es solamente comentado la etiqueta y no el contenido del div, así que tuve que comentar la más cerca <!/div>para evitar el cierre de otros divs.

Probé otro y parece que generalmente poner un marcador de exclamación frente a la apertura de cualquier etiqueta, este símbolo <, hace que esa etiqueta sea comentada.

¿Es esto realmente nuevo? ¿Es una mala práctica? En realidad es muy conveniente, pero ¿es práctico todavía (si no es nuevo)?

Editar detalles adicionales: aunque un error de sintaxis o interpretaciones erróneas de esta sintaxis en particular es una buena razón, ¿por qué Chrome realmente los presenta como comentarios completos?

El código está escrito como :

<!div displayed> some text here that is still displayed <!/div>

Y luego se representa como :

<!--div displayed--> some text here that is still displayed <!--/div-->
Andrés
fuente
19
Es más probable que sea simplemente un error de sintaxis y / o una etiqueta sin sentido y, por lo tanto, se ignore.
deceze
@deceze Esperaba un poco que, dado que los navegadores pueden ser indulgentes con la forma en que procesan html de acuerdo con reglas menos estrictas.
Andrew
1
@ Lemony-Andrew ¿Qué IDE hace eso? Según la respuesta seleccionada, podríamos informar esto como un problema (o solucionarlo si es de código abierto).
Dereckson el
1
@Derecksonit Revisé dos veces mi IDE después de que se hizo la respuesta oficial para asegurarme de que mis ojos no me engañaran. Dio la casualidad de que no estaba comentado de facto, sino que el color de texto normal era similar. Todo esto fue por casualidad.
Andrew

Respuestas:

196

No hay un nuevo estándar para comentarios en HTML5. La única sintaxis de comentario válida sigue siendo <!-- -->. De la sección 8.1.6 de W3C HTML5 :

Los comentarios deben comenzar con la secuencia de cuatro caracteres U + 003C MENOS QUE EL SIGNO, U + 0021 MARCA DE EXCLAMACIÓN, U + 002D HYPHEN-MINUS, U + 002D HYPHEN-MINUS ( <!--).

La <!sintaxis se origina en el marcado SGML DTD, que no forma parte de HTML5. En HTML5, está reservado para comentarios, secciones CDATA y la declaración DOCTYPE. Por lo tanto, si esta alternativa es una mala práctica depende de si considera que el uso de (o peor, la dependencia de) marcado obsoleto es una mala práctica.

Validator.nu llama a lo que tiene un "comentario falso". - lo que significa que se trata como un comentario a pesar de que no es un comentario válido. Presumiblemente, esto es por compatibilidad con versiones anteriores de HTML5, que estaba basado en SGML y tenía declaraciones de marcado que tomaron la forma <!FOO>, por lo que no llamaría a esto nuevo. La razón por la que se tratan como comentarios es porque las declaraciones de marcado SGML fueron declaraciones especiales que no están destinadas a representarse, pero dado que no tienen sentido en HTML5 (con las excepciones anteriores), en lo que respecta al DOM de HTML5, no son más que comentarios .

Los siguientes pasos dentro de la sección 8.2.4 conducen a esta conclusión, que Chrome parece estar siguiendo al pie de la letra:

  1. 8.2.4.1 Estado de datos :

    Consume el siguiente carácter de entrada:

    "<" (U + 003C)
    Cambia al estado de etiqueta abierta.

  2. 8.2.4.8 Estado de etiqueta abierta :

    Consume el siguiente carácter de entrada:

    "!" (U + 0021)
    Cambie al estado abierto de declaración de marcado.

  3. 8.2.4.45 Estado abierto de declaración de marcado :

    Si los siguientes dos caracteres son caracteres "-" (U + 002D), consuma esos dos caracteres, cree un token de comentario cuyos datos sean la cadena vacía y cambie al estado de inicio de comentario.

    De lo contrario, si los siguientes siete caracteres coinciden entre mayúsculas y minúsculas ASCII para la palabra "DOCTYPE", consuma esos caracteres y cambie al estado DOCTYPE.

    De lo contrario, si hay un nodo actual ajustado y no es un elemento en el espacio de nombres HTML y los siguientes siete caracteres son una coincidencia entre mayúsculas y minúsculas para la cadena "[CDATA [" (las cinco letras mayúsculas "CDATA" con un U + 005B IZQUIERDA SOPORTE CUADRADO carácter antes y después), luego consuma esos caracteres y cambie al estado de sección CDATA.

    De lo contrario, este es un error de análisis. Cambie al estado de comentario falso. El siguiente personaje que se consume, si lo hay, es el primer personaje que estará en el comentario.

    Tenga en cuenta que dice cambiar al estado de inicio del comentario solo si la secuencia de caracteres encontrados es <!--, de lo contrario, es un comentario falso. Esto refleja lo que se indica en la sección 8.1.6 anterior.

  4. 8.2.4.44 Estado de comentario falso :

    Consuma todos los caracteres hasta el primer carácter ">" (U + 003E) o el final del archivo (EOF), lo que ocurra primero. Emitir un token de comentario cuyos datos son la concatenación de todos los caracteres a partir del carácter que causó que la máquina de estado cambie al estado de comentario falso, incluido el carácter inmediatamente anterior al último carácter consumido (es decir, hasta el carácter justo antes del carácter U + 003E o EOF), pero con los caracteres U + 0000 NULL reemplazados por caracteres U + FFFD REPLACEMENT CHARACTER. (Si el comentario se inició al final del archivo (EOF), el token está vacío. Del mismo modo, el token está vacío si fue generado por la cadena " <!>".)

    En inglés simple, esto se convierte <!div displayed>en <!--div displayed-->y <!/div>en <!--/div-->, exactamente como se describe en la pregunta.

En una nota final, probablemente pueda esperar que otros analizadores compatibles con HTML5 se comporten igual que Chrome.

BoltClock
fuente
11
Gracias por tomarse el tiempo para encontrar el razonamiento oficial detrás de este incidente. Aclara un poco las cosas y da mucha validez a mi suposición errónea.
Andrew
2
Es extraño cómo la especificación HTML5 tiene reglas para procesar contenido "no válido". Si no es válido, no debería procesarse en absoluto.
Arturo Torres Sánchez
2
Bueno, así solían ser los lenguajes HTML y web: estrictos. La razón por la que la estructura de código incorrecta se procesa de manera tan indulgente es para sitios de mejor calidad. Cuantos más sitios web pueda ver un navegador y ver correctamente con una sintaxis incorrecta, más felices estarán sus usuarios finales. Los escritores generales de estándares web (en su mayoría w3, no el otro), se dieron cuenta de que los proveedores de navegadores no estaban siguiendo las pautas debido a esto. HTML5 surgió y solo se basó en la idea de hacer que el diseño sea oficialmente más indulgente.
Andrew
3
@ ArturoTorresSánchez: XHTML probó el enfoque de "contenido no válido = error" y falló miserablemente. Además, las reglas básicamente dicen "no analice este comentario falso, solo trátelo como comentario y analice la siguiente cosa válida que encuentre". Entonces, dependiendo de su punto de vista, HTML5 no hace lo que quiere porque lo que quiere apesta o HTML5 hace exactamente lo que quiere.
slebetman
1
@ ArturoTorresSánchez: Históricamente, los servidores HTML esperarían servir la misma secuencia de caracteres a cualquier tipo de navegador; aunque es posible diseñar un formato de documento de tal manera que los analizadores más antiguos puedan distinguir documentos que usan características "opcionales" más nuevas que los analizadores más antiguos deben ignorar, documentos que usan funciones más importantes y que los navegadores deben rechazar t los soporta, y los documentos que son simplemente inválidos, tal cosa no se hizo con HTML durante sus años de formación.
supercat
12

No creo que sea un buen hábito, ya que <!significa declaraciones de marcado como <!DOCTYPE. Por lo tanto, cree que está comentado (bueno ... el navegador intentará interpretarlo).

Incluso si no aparece, esta parece no ser la sintaxis correcta para comentar código HTML.

Yves Lange
fuente
Aunque eso puede ser cierto, ¿por qué Chrome realmente hace que esas etiquetas se comenten, pero ahora el tipo de documento?
Andrew
44
Sugerencia (no estoy seguro, solo adivinando): ¿intenta interpretar> no puedo> comentar?
Yves Lange
Eso me parece lo suficientemente razonable.
Andrew
Nuevamente (lamento insistir), ¡pero ten en cuenta que esto es solo una suposición!
Yves Lange