143 votes

Comment fermer correctement la balise <img> ?

<img src='stackoverflow.png'>
<img src='stackoverflow.png'></img>
<img src='stackoverflow.png' />

Lequel ou lesquels d'entre eux sont corrects ?

10 votes

La question est "Comment fermer correctement une balise <img> ?". C'est une vraie question, et les réponses sont utiles. Cette question n'aurait pas dû être fermée.

4 votes

La question, actuellement, est bien. Elle est no ambiguë, vague, incomplète, trop large ou rhétorique. Il y a également une excellente réponse ci-dessous.

0 votes

Je ne sais pas laquelle des réponses suivantes est correcte, mais il est intéressant de noter que l'inspecteur de code de Firefox ajoute le </img>à la fin de la balise si vous ne le mettez pas là. Et IE ne le fait pas. C'est significatif dans mon univers.

179voto

Marvin Rabe Points 1276

Celui-ci est HTML5 valide et tout va bien sans le fermer. C'est ce qu'on appelle un élément vide :

<img src='stackoverflow.png'>

Les balises suivantes sont des balises XHTML valides. Elles doivent être fermées. La dernière balise est également valable en HTML 5 :

<img src='stackoverflow.png'></img>
<img src='stackoverflow.png' />

5 votes

Il n'est pas seulement valide en HTML5, mais plutôt en HTML4 également. Le HTML ne requiert pas d'éléments "void" auto-fermants comme vous l'avez dit. +1 pour la réponse cohérente.

2 votes

Le HTML5 ou XHTML ne sera pas validé par le vérificateur HTML du W3C s'il cible 4.01 Transitional et plus. Voir aussi Service de validation du balisage du W3C . Vous devez utiliser celui <img src='stackoverflow.png'> (si cela vous importe).

0 votes

Je commente après de nombreuses années... J'ai été confus en voyant le <img src="about:logo" alt="about:logo"> étiquette dans le firefox 76 about:logo page ! Bien que document.body.innerHTML montre <img src=\"about:logo\" alt=\"about:logo\"> ... Très bonne réponse...

64voto

Ed Heal Points 24309
<img src='stackoverflow.png' />

Cela fonctionne bien et ferme la balise correctement. Le mieux est d'ajouter la balise alt attribut pour les personnes malvoyantes.

5 votes

Il est exact que <img /> est valide en [X]HTML/XML, bien que l'utilisation du XHTML soit très rare de nos jours et si votre serveur sert les pages en tant que text/html vous n'avez qu'à vous soucier d'écrire du HTML valide. Les chances de devoir migrer une application HTML vers XHTML sont proches de zéro.

2 votes

La réponse ci-dessus ne sera pas validée par le vérificateur HTML du W3C si elle cible 4.01 Transitional et plus. Voir aussi Service de validation du balisage du W3C . Je pense que la réponse ci-dessus nécessite HTML5 ou XHTML. Pour éviter les échecs de validation, vous devez utiliser le format <img src='stackoverflow.png'> (si cela vous importe).

1 votes

@FabrícioMatté Vous sous-estimez sévèrement le xhtml dans son utilisation réelle. Plus l'entreprise est grande, plus il est probable qu'elle travaille avec du xhtml plutôt que du html, ou du html5 formaté comme du xhtml (pour une analyse facile/rapide), ou que vous travaillez avec d'autres choses comme des microdonnées, ou un balisage amélioré comme ixbrl.

5voto

SherylHohman Points 3894

En fait, seul le premier est valide en HTML5

<img src='stackoverflow.png'>  

Seuls les deux derniers sont valides en XHTML.

<img src='stackoverflow.png'></img>  
<img src='stackoverflow.png' />

(Bien que cela ne soit pas strictement nécessaire, un alt doit _généralement_ aussi être inclus).

Cela dit, votre page HTML5 s'affichera probablement comme prévu, car les navigateurs réécriront ou interpréteront votre html en fonction de ce qu'ils pensent être votre intention. C'est mai signifie qu'il transforme une balise, par exemple, de
<div /> sur <div></div> . Ou peut-être qu'il ignore simplement le slash final sur <img ... /> .
voir 2016 : Servez HTML5 comme XHTML 5.0 pour la validation de l'héritage.
voir : discussion de 2011 et liens supplémentaires ici, bien qu'au fil du temps certains éléments aient pu changer

Cela s'explique en partie par le fait que les navigateurs s'efforcent de corriger les erreurs. C'est aussi parce qu'il y a beaucoup de confusion au sujet des balises auto-fermantes et des balises void. Enfin, la spécification a changé, ou n'a pas toujours été claire, et les navigateurs essaient d'être rétrocompatibles.

Donc, même si vous pouvez probablement vous en sortir avec n'importe laquelle de ces trois options,
seule la première adhère à la norme HTML5, et est garantie de passer un validateur HTML5.

Une bonne stratégie pourrait consister à :

  • Écrivez un nouveau code sans la barre oblique de fermeture.
  • Lors du remaniement du code, mettez à jour les balises d'image proches, au fur et à mesure que vous les rencontrez.
  • Ne pas trop se préoccuper des balises dans les fichiers hérités que vous ne touchez pas, sauf en cas de besoin particulier.

Voici une liste de balises qui ne doivent pas être fermées en HTML5 :

 <br>    <hr>    <input>       
 <img>  <link>   <source>  
 <col>  <area>   <base>
 <meta> <embed>  <param>  
<track>  <wbr>   <keygen> (HTML 5.2 Draft removed)

2 votes

C'est techniquement incorrect. Un élément void à fermeture automatique est parfaitement valide en html 5. Voir html.spec.whatwg.org/#start-tags ce qui rendrait <img src='stackoverflow.png' /> valide dans toutes les versions de XHTML et HTML 5.

1 votes

@RobertMcKee Non, c'est techniquement correct. Bien que l'utilisation de la barre oblique fermante soit autorisée et ne soit pas considérée comme une erreur, aucune spécification HTML n'indique qu'elle doit être utilisée. Elle est autorisée pour ne pas briser les anciens sites web basés sur XHTML/XML, mais vous ne trouverez nulle part une spécification HTML indiquant, par des mots ou des exemples, l'utilisation d'une barre oblique fermante sur ces balises lorsqu'elles sont spécifiées par le W3C ou le WHATWG.

2 votes

@Rob D'après le document du WHATWG que j'ai mis en lien ci-dessus à la section 12.1.2.1.6 - Then, if the element is one of the void elements, or if the element is a foreign element, then there may be a single U+002F SOLIDUS character (/). This character has no effect on void elements, but on foreign elements it marks the start tag as self-closing. img est un élément vide selon la section 12.1.2

3voto

PLB Points 259

Les deux sont la bonne réponse. HTML5 suit des règles strictes et en HTML5 nous pouvons fermer toutes les balises. Donc, cela dépend de vous d'utiliser HTML5 ou HTML et de suivre une réponse appropriée.

<img src='stackoverflow.png'>
<img src='stackoverflow.png' />

La deuxième propriété est plus appropriée.

0 votes

C'est faux. La première est la seule spécifiée dans tous Spécification HTML. Le second est autorisé pour des raisons historiques uniquement, mais, là encore, il n'est spécifié nulle part qu'il est obligatoire.

2voto

Md. A. Barik Points 341

La meilleure utilisation des balises que vous devriez utiliser :

<img src="" alt=""/>

Vous pouvez également l'utiliser en HTML5 :

<img src="" alt="">

Ces deux-là sont tout à fait valables en HTML5 Choisissez l'une d'entre elles et tenez-vous-en à celle-ci.

0 votes

Le premier est pas le meilleur en ce sens qu'il n'est pas spécifié dans tous HTML, tandis que le second est. Le premier n'est autorisé que pour des raisons historiques ! (Compatibilité avec l'utilisation du XHTML/XML dans les sites web plus anciens qui s'effondreraient si les navigateurs ne l'autorisaient pas).

0 votes

Je ne suis pas sûr de ce que Rob essaie de dire ici, mais la spécification html spécifie que le premier est valide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X