HTML5 change-t-il la norme pour les commentaires HTML?

131

Récemment, j'ai découvert qu'il existe peut-être une nouvelle façon de commenter en HTML5.

Au lieu des <!-- -->commentaires typiques sur plusieurs lignes que j'ai lus, j'ai pensé avoir remarqué que mon IDE faisait régulièrement des <!div >commentaires. Je l'ai donc testé et, à ma grande surprise, Chrome avait commenté cette balise. Il ne faisait que commenter la balise et non le contenu du div, donc j'ai dû commenter le plus proche <!/div>pour éviter de fermer d'autres divs.

J'en ai testé un autre et il semble qu'en général, mettre un marqueur d'exclamation devant l'ouverture de n'importe quelle balise, ce symbole <, rend cette balise commentée.

Est-ce vraiment nouveau? Est-ce une mauvaise pratique? C'est en fait très pratique, mais est-ce encore pratique (sinon nouveau)?

Modifier les détails supplémentaires: bien qu'une erreur de syntaxe ou une mauvaise interprétation de cette syntaxe particulière soit une bonne raison, comment se fait-il que Chrome les rende réellement sous forme de commentaires complets?

Le code s'écrit :

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

Et puis il est rendu comme :

<!--div displayed--> some text here that is still displayed <!--/div-->
Andrew
la source
19
Plus probablement, il s'agit simplement d'une erreur de syntaxe et / ou d'une balise absurde et donc ignorée.
deceze
@deceze Je m'attendais un peu à cela, car les navigateurs peuvent être indulgents avec la façon dont ils rendent le HTML selon des règles moins strictes.
Andrew
1
@ Lemony-Andrew Qu'est-ce que l'IDE fait cela? Selon la réponse sélectionnée, nous pourrions signaler cela comme un problème (ou le résoudre s'il est open source).
Dereckson
1
@Derecksonit J'ai revérifié mon IDE après la réponse officielle pour m'assurer que mes yeux ne me trompaient pas. Il se trouve que ce n'était pas de facto commenté, mais c'était la couleur du texte normal qui était similaire. Tout cela était par hasard.
Andrew

Réponses:

196

Il n'y a pas de nouvelle norme pour les commentaires en HTML5. La seule syntaxe de commentaire valide est toujours <!-- -->. De la section 8.1.6 du W3C HTML5 :

Les commentaires doivent commencer par la séquence de quatre caractères U + 003C SIGNE INFERIEUR, U + 0021 MARQUE D'EXCLAMATION, U + 002D HYPHEN-MOINS, U + 002D HYPHEN-MOINS (<!-- ).

le <! syntaxe provient du balisage SGML DTD, qui ne fait pas partie de HTML5. En HTML5, il est réservé aux commentaires, aux sections CDATA et à la déclaration DOCTYPE. Par conséquent, la question de savoir si cette alternative est une mauvaise pratique dépend du fait que vous considérez l'utilisation (ou pire, la dépendance sur) d'un balisage obsolète comme une mauvaise pratique.

Validator.nu appelle ce que vous avez un "faux commentaire". - ce qui signifie qu'il est traité comme un commentaire même s'il ne s'agit pas d'un commentaire valide. C'est vraisemblablement pour la compatibilité descendante avec le pré-HTML5, qui était basé sur SGML, et avait des déclarations de balisage qui prenaient la forme <!FOO>, donc je n'appellerais pas cela nouveau. La raison pour laquelle ils sont traités comme des commentaires est que les déclarations de balisage SGML étaient des déclarations spéciales qui ne sont pas destinées à être rendues, mais puisqu'elles n'ont aucun sens en HTML5 (avec les exceptions ci-dessus), en ce qui concerne le DOM HTML5, elles ne sont rien de plus que des commentaires .

Les étapes suivantes de la section 8.2.4 mènent à cette conclusion, que Chrome semble suivre à la lettre:

  1. 8.2.4.1 État des données :

    Consommez le caractère d'entrée suivant:

    "<" (U + 003C)
    Passez à l'état ouvert de balise.

  2. 8.2.4.8 État ouvert de l'étiquette :

    Consommez le caractère d'entrée suivant:

    "!" (U + 0021)
    Passez à l'état ouvert de déclaration de balisage.

  3. 8.2.4.45 État ouvert de la déclaration de balisage :

    Si les deux caractères suivants sont tous les deux des caractères "-" (U + 002D), utilisez ces deux caractères, créez un jeton de commentaire dont les données sont la chaîne vide et passez à l'état de début du commentaire.

    Sinon, si les sept caractères suivants correspondent à une correspondance ASCII insensible à la casse pour le mot "DOCTYPE", utilisez ces caractères et passez à l'état DOCTYPE.

    Sinon, s'il y a un nœud actuel ajusté et qu'il ne s'agit pas d'un élément dans l'espace de noms HTML et que les sept caractères suivants sont une correspondance sensible à la casse pour la chaîne "[CDATA [" (les cinq lettres majuscules "CDATA" avec un U + 005B LEFT SQUARE BRACKET caractère avant et après), puis consommez ces caractères et passez à l'état de section CDATA.

    Sinon, il s'agit d'une erreur d'analyse. Passez à l'état de commentaire bidon. Le prochain caractère consommé, le cas échéant, est le premier caractère qui sera dans le commentaire.

    Notez qu'il dit de passer à l'état de début du commentaire uniquement si la séquence de caractères rencontrée est <!--, sinon c'est un faux commentaire. Cela reflète ce qui est indiqué dans la section 8.1.6 ci-dessus.

  4. 8.2.4.44 État de commentaire fictif :

    Consommez tous les caractères jusqu'au premier caractère ">" (U + 003E) ou à la fin du fichier (EOF) inclus, selon la première éventualité. Émettre un jeton de commentaire dont les données sont la concaténation de tous les caractères en commençant par et y compris le caractère qui a fait passer la machine à états à l'état de commentaire bidon, jusqu'à et y compris le caractère immédiatement avant le dernier caractère consommé (c'est-à-dire jusqu'au caractère juste avant le caractère U + 003E ou EOF), mais avec tous les caractères U + 0000 NULL remplacés par des caractères U + FFFD REMPLACEMENT CHARACTER. (Si le commentaire a été lancé à la fin du fichier (EOF), le jeton est vide. De même, le jeton est vide s'il a été généré par la chaîne " <!>".)

    En clair, cela se transforme <!div displayed>en <!--div displayed-->et <!/div>en <!--/div-->exactement comme décrit dans la question.

Sur une note finale, vous pouvez probablement vous attendre à ce que d'autres analyseurs compatibles HTML5 se comportent de la même manière que Chrome.

BoltClock
la source
11
Merci d'avoir pris le temps de trouver le raisonnement officiel derrière cet incident. Cela clarifie un peu les choses et donne beaucoup de validité à mon hypothèse erronée.
Andrew
2
C'est étrange comment la spécification HTML5 a des règles pour traiter le contenu «invalide». S'il n'est pas valide, il ne devrait pas du tout être traité.
Arturo Torres Sánchez
2
Eh bien, c'est ainsi que les langages HTML et Web étaient - stricts. La raison pour laquelle une structure de code incorrecte est traitée de manière indulgente est pour des sites de meilleure qualité. Plus un navigateur peut afficher et afficher correctement de sites Web avec une syntaxe incorrecte, plus ses utilisateurs finaux seront heureux. Les rédacteurs de normes Web générales (principalement w3 pas l'autre), se sont rendu compte que les fournisseurs de navigateurs ne suivaient pas les directives à cause de cela. HTML5 est venu et s'est basé uniquement sur l'idée de rendre la conception officiellement plus clémente.
Andrew
3
@ ArturoTorresSánchez: XHTML a essayé l'approche "contenu invalide = erreur" et a lamentablement échoué. En outre, les règles disent essentiellement "ne pas analyser ce faux commentaire, le traiter simplement comme un commentaire et analyser la prochaine chose valide que vous trouverez". Donc, selon votre point de vue, HTML5 ne fait pas ce que vous voulez parce que ce que vous voulez est nul ou HTML5 fait exactement ce que vous voulez.
slebetman
1
@ ArturoTorresSánchez: Historiquement, les serveurs HTML s'attendaient à servir la même séquence de caractères à tout type de navigateur; bien qu'il soit possible de concevoir un format de document de telle manière que les analyseurs plus anciens soient capables de distinguer les documents qui utilisent des fonctionnalités "facultatives" plus récentes que les analyseurs plus anciens devraient ignorer, les documents qui utilisent des fonctionnalités plus récentes et devraient être rejetés par les navigateurs qui ne le font pas. t les supporter, et les documents qui sont tout simplement invalides, une telle chose n'a pas été faite avec HTML pendant ses années de formation.
supercat
12

Je ne pense pas que ce soit une bonne habitude à prendre car cela <!signifie des déclarations de balisage comme<!DOCTYPE . Ainsi vous pensez qu'il est commenté (enfin ... le navigateur essaiera de l'interpréter).

Même si cela n'apparaît pas, cela ne semble pas être la syntaxe correcte pour commenter le code HTML.

Yves Lange
la source
Bien que cela puisse être vrai, comment se fait-il que Chrome rend ces balises commentées, mais maintenant le doctype.
Andrew
4
Suggestion (je ne suis pas sûr, juste deviner): essaie d'interpréter> ne peut pas> commenté?
Yves Lange
Cela me semble assez raisonnable.
Andrew
Encore une fois (désolé d'insister), mais sachez que ce n'est qu'une supposition!
Yves Lange