web-dev-qa-db-fra.com

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

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

Au lieu des commentaires sur plusieurs lignes typiques de <!-- --> Sur lesquels j'ai lu, j'ai pensé que j'ai remarqué que mon IDE a fait un commentaire régulier <!div >. Je l'ai donc testé, et à ma grande surprise Chrome avait commenté cette balise. Elle seulement a commenté la balise et non le contenu du div, j'ai donc dû commenter le plus étroitement <!/div> pour éviter de fermer d'autres divs.

J'en ai testé un autre et il semble qu'en plaçant généralement 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? Il est en fait très pratique, mais est-il encore pratique (sinon nouveau)?

Modifier les détails supplémentaires: Bien qu'une erreur de syntaxe ou des interprétations erronées de cette syntaxe particulière soient une bonne raison, comment se fait-il Chrome en fait les rend-ils 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-->
130
Andrew

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

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

Le <! la 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, que cette alternative soit une mauvaise pratique dépend de si vous considérez l'utilisation (ou pire, la dépendance à) 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 n'est pas valide. Il s'agit vraisemblablement d'une compatibilité descendante avec la version antérieure à HTML5, qui était basée sur SGML, et comportait des déclarations de balisage qui prenaient la forme <!FOO>, donc je n'appellerais pas ça nouveau. La raison pour laquelle ils sont traités comme commentaires est parce que les déclarations de balisage SGML étaient des déclarations spéciales qui n'étaient pas censées être rendues, mais puisqu'elles n'ont aucun sens en HTML5 (avec les exceptions ci-dessus), en ce qui concerne HTML5 DOM craint qu'ils ne le soient rien de plus que des commentaires.

Les étapes suivantes dans section 8.2.4 conduisent à cette conclusion, qui Chrome semble suivre à la lettre:

  1. 8.2.4.1 État des données :

    Consommez le caractère de saisie suivant:

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

  2. 8.2.4.8 État d'ouverture de la balise :

    Consommez le caractère de saisie suivant:

    "!" (U + 0021)
    Passez à l'état ouvert de la 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), consommez 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 de commentaire.

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

    Sinon, s'il existe 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 correspondent à la casse pour la chaîne "[CDATA [" (les cinq lettres majuscules "CDATA" avec un U + 005B LEFT SQUARE BRACKET 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 factice. Le caractère suivant qui est consommé, le cas échéant, est le premier caractère qui sera dans le commentaire.

    Notez qu'il indique de passer à l'état de début de 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 erroné :

    Consommez chaque caractère jusqu'au premier caractère ">" (U + 003E) ou à la fin du fichier (EOF), selon la première éventualité. Émettez un jeton de commentaire dont les données sont la concaténation de tous les caractères à partir du caractère qui a fait basculer la machine d'état dans le faux état de commentaire, y compris le caractère immédiatement avant le dernier caractère consommé (c'est-à-dire jusqu'au caractère inclus) juste avant le caractère U + 003E ou EOF), mais avec tous les caractères U + 0000 NULL remplacés par les 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 anglais, cela tourne <!div displayed> en <!--div displayed--> et <!/div> en <!--/div-->, exactement comme décrit dans la question.

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

195
BoltClock

Je ne pense pas que ce soit une bonne habitude à prendre depuis <! représente les déclarations de balisage comme <!DOCTYPE. Ainsi vous pensez qu'il est commenté (enfin ... le navigateur va essayer de l'interpréter).

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

12
Yves Lange