¿HTML5 cambia el estándar para los comentarios HTML?


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

En lugar del típico <!-- --> comentario multilínea que he leído, Yo pensé Me di cuenta de que mi IDE hizo un regular <!div > comentado. Así que lo probé, y para mi sorpresa Chrome había comentado esa etiqueta. It solo comentó la etiqueta y no el contenido del div, así que tuve que comentar el cerrador <!/div> para evitar cerrar otros divs.

Probé otro y parece que generalmente poner un marcador de exclamación delante de 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 malas interpretaciones de esta sintaxis en particular es una buena razón, ¿cómo es que Chrome en realidad los hace como comentarios completos?

El código es 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-->
Author: Bennett Brown, 2015-04-02

2 answers

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

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

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

Validator.nu llama a lo que tienes un "comentario falso"."- lo que significa que se trata como un comentario a pesar de que no es un comentario válido. Esto es presumiblemente para la compatibilidad con versiones anteriores a 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. El la razón por la que se tratan como comentarios es porque las declaraciones de marcado SGML eran declaraciones especiales que no estaban destinadas a ser renderizadas, pero como no tienen sentido en HTML5 (con las excepciones anteriores), en lo que respecta al DOM de HTML5, no son nada más que comentarios.

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

  1. 8.2.4.1 Datos estado:

    Consume el siguiente carácter de entrada:

    "
    Cambie al estado abierto de la etiqueta.

  2. 8.2.4.8 Estado abierto de la etiqueta :

    Consume el siguiente carácter de entrada:

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

  3. 8.2.4.45 Declaración de marcado estado abierto :

    Si los dos siguientes los caracteres son ambos caracteres " - " (U+002D), consumen esos dos caracteres, crean un token de comentario cuyos datos son la cadena vacía y cambian al estado de inicio del comentario.

    De lo contrario, si los siguientes siete caracteres son una coincidencia ASCII insensible a mayúsculas y minúsculas para la palabra "DOCTYPE", entonces 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 sensible a mayúsculas para la cadena "[CDATA[" (las cinco letras mayúsculas "CDATA" con un carácter de CORCHETE IZQUIERDO U+005B antes y después), luego consumen esos caracteres y cambian al estado de sección CDATA.

    De lo contrario, esto es un error de análisis. Cambia al estado de comentario falso. El siguiente carácter que se consume, si lo hay, es el primer carácter que aparecerá en el comentario.

    Observe que dice cambiar al estado de inicio del comentario solamente si la secuencia de caracteres encontrada es <!--, de lo contrario es un comentario falso. Esto refleja lo expuesto en la sección 8.1.6.

  4. 8.2.4.44 Estado del comentario falso :

    Consume cada carácter hasta e incluyendo 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 que comienzan desde e incluyen el carácter que causó el estado máquina para cambiar al estado de comentario falso, hasta e incluyendo 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 cualquier U+0000 caracteres NULOS reemplazados por U+FFFD Caracteres DE REEMPLAZO. (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 sencillo, esto convierte <!div displayed> en <!--div displayed--> y <!/div> en <!--/div-->, exactamente como se describe en la pregunta.

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

 194
Author: BoltClock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-03 03:17:21

No creo que este sea un buen hábito ya que <! significa declaraciones de marcado como <!DOCTYPE. Así que piensas que está comentado (bueno... el navegador intentará interpretarlo).

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

 11
Author: Kursion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-07 21:35:35