web-dev-qa-db-fra.com

Les commentaires HTML imbriqués sont-ils possibles?

selon le titre; est-il possible d'avoir des commentaires imbriqués en HTML valide? voir l'exemple ci-dessous ...

<p>some text</p>

  <!-- comment 1

    <p>commented out html</p>

    <!-- comment 2

      // are nested html comment allowed?

    end of comment 2 -->

    <p>more commented out html</p>

  end of comment 1 -->

<p>some more text</p>

Il semble que non, est-ce que quelqu'un sait comment faire fonctionner les commentaires imbriqués?

88
QAZ

Lorsque vous imbriquez un commentaire, remplacez "-" par "- -". Lorsque vous désimbriquez, inversez la procédure. Ce n'est pas le <!-- c'est interdit mais le --.

Exemple:

<!-- some stuff
<!- - some inner stuff - ->
<!- - a sibling - ->
the footer -->
92
Aaron Digulla

TL; DR : Malheureusement, non, ce n'est pas possible (et ne le sera jamais).

Réponse courte:

Un commentaire HTML n'est pas tout à fait ce que beaucoup pensent. HTML est une forme de SGML, dans laquelle les commentaires sont délimités par des paires de tirets doubles (-- …--).

Ainsi, toute paire de doubles tirets à l'intérieur d'une paire de cornières avec un point d'exclamation après la parenthèse ouvrante (<!-- ⋯ -->) est un commentaire. La spécification le dit mieux que moi: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4

C'est pourquoi des commentaires comme celui-ci (que nous avons tous probablement faits une fois ou une autre) sont un mauvais idée:

<! - ------------------ EN-TÊTE COMMENCE ICI -------------------- ->

Vérité: je suis trop paresseux pour vous dire combien de commentaires sont représentés par la pollution de tag ci-dessus, mais c'est au moins 10.

Je suis devenu moins paresseux: ce soi-disant "commentaire" se compose en fait de 10 commentaires, de trois mots en dehors de tout commentaire (c'est-à-dire tout simplement mauvais SGML) et du début d'un commentaire qui n'est pas terminé. C'est un vrai bordel:

<!--1----2----3----4----5--
 EN-TÊTE COMMENCE ICI 
--6----sept----8----9----dix---->

Bien sûr, ce n'est pas tout à fait aussi simple, en raison des différences dans la façon dont chaque navigateur choisit d'interpréter les spécifications.

Voici un excellent article qui l'explique:

http://weblog.200ok.com.au/2008/01/dashing-into-trouble-why-html-comments.html

Réponse longue: pourquoi nous nous trompons

La plupart d'entre nous qui ont grandi avec HTML (sans plonger dans le SGML qui le sous-tend) ont fini par croire que la chaîne <!-- commence un commentaire et la chaîne --> termine un commentaire.

Réellement, <! et > délimitez une déclaration SGML dans votre document HTML, telle que la déclaration DOCTYPE que nous avons tous vue en haut de nos pages. Within une déclaration SGML, les commentaires sont délimités par des doubles tirets. Ainsi, le commentaire HTML

<! - ceci est un commentaire ->

que la plupart d'entre nous croiraient est analysé comme ça <!--this is a comment--> est en fait analysé comme ceci:
<!--this is a comment-->. Il s'agit d'une déclaration SGML qui est vide à l'exception d'un commentaire.

Parce que HTML est une forme de SGML, ce "commentaire dans une déclaration" fonctionne comme un commentaire HTML.

Par intérêt, voici un morceau de SGML pur qui montre les commentaires fonctionnant comme ils étaient prévus dans SGML: cette définition de liste d'attributs contient un commentaire sur chaque ligne:

<! ATTLIST LINK 
% Attrs; -% coreattrs,% i18n,% events - 
 charset% Charset; #IMPLIED - codage de caractères de la ressource liée - 
 Href% URI; #IMPLIED - URI pour la ressource liée - 
 Hreflang% LanguageCode; #IMPLIED - code de langue - 
 Type% ContentType; #IMPLIED - type de contenu de conseil - 
 Rel% LinkTypes; #IMPLIED - types de liens directs - 
 Rev% LinkTypes; #IMPLIED - types de liens inverses - 
 Media% MediaDesc; #IMPLIED - pour le rendu sur ces supports - 
>
93
Dave Land

Cela ne peut pas être fait. --> terminera toujours un commentaire HTML existant.

8
Sergio

Utilisez la balise template. Le moyen le plus rapide de bloquer l'affichage de tous les commentaires et autres fichiers HTML.

<template>
    <!-- first paragraph-->
    Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    <!-- second paragraph-->
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</template>

    <!-- third paragraph-->
    Ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.sunt in culpa qui officia deserunt mollit.
5
TheHive

Si vous êtes vraiment coincé avec un morceau de HTML - pré-rendu à une source incontrôlable - qui contient des commentaires, et vous devez vous assurer qu'aucun n'est affiché sur votre page, vous pouvez toujours l'envelopper avec un script tag comme ci-dessous, seulement, vous ne pouvez pas commenter script tags de cette façon.

<p>some text</p>

<!-- multiline "comment" below using script type="text/html" -->
<script type="text/html">

  <p>commented out html</p>

  <!-- comment 2

      // are nested html comment allowed?

    end of comment 2 -->

  <p>more commented out html</p>

</script>

<p>some more text</p>

Si vous devez commenter les balises script, vous pouvez utiliser un textarea comme wrapper à la place, bien sûr, de cette façon, vous ne pouvez pas commenter les balises textarea.

<p>some text</p>

<!-- multiline "comment" below using textarea style="display:none;" -->
<textarea style="display:none;">

  <script>  

    alert("which won't show up..");  

  </script>

  <p>commented out html</p>

  <!-- comment 2

      // are nested html comment allowed?

    end of comment 2 -->

  <p>more commented out html</p>

</textarea>

<p>some more text</p>
4

Certains éditeurs ont des commandes de commentaire/décommentation qui peuvent gérer automatiquement les commentaires existants dans un bloc de texte. Visual Studio par exemple fait cela lorsque vous appuyez sur Ctrl + KC et Ctrl + KU.

1
Dirk Vollmar

Essaye ça

<p>some text</p>
<comment> comment 1
<p>commented out html</p>
<!-- comment 2
  // are nested html comment allowed?
end of comment 2 -->
<p>more commented out html</p>
end of comment 1 </comment>
<p>some more text</p>
0
txavier

Un complément VS qui simule les commentaires imbriqués en convertissant automatiquement <!--...--> à <!~~...~~> commente ensuite toute cette section. Il vous permet de l'activer et de le désactiver.

commentaires imbriqués

0
Paul Gorbas

Je pense que ce n'est pas autorisé, mais pour autant que je sache, cela fonctionne dans la plupart des principaux navigateurs, sauf dans Firefox.

0
TheHippo

essayez d'utiliser ceci

<!-- 

c'est le début du commentaire

<%-- this is another comment --%>

<%-- this is another one --%>

--> fin des commentaires.

0
drw