Comment fermer correctement la balise <img>?

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

Lequel (s) d'entre eux est correct?

insérer le nom d'utilisateur ici
la source
6
La question est "Comment fermer correctement une balise <img>?" qui est une vraie question, et les réponses sont utiles. Cette question n'aurait pas dû être close.
3
La question, actuellement, est bonne. Ce n'est pas ambigu, vague, incomplet, trop large ou rhétorique. Il y a aussi une excellente réponse ci-dessous.
David J.
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 important dans mon univers.
Chiwda
PS Dreamweaver insère la balise /> XHTML.
Chiwda

Réponses:

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

Fonctionne bien et ferme correctement la balise. Il est préférable d'ajouter l' altattribut pour les personnes malvoyantes.

Ed Heal
la source
4
Il est correct que ce <img />soit valide en [X] HTML / XML, bien que l'utilisation de XHTML soit très rare de nos jours et si votre serveur sert les pages car text/htmltout ce dont vous avez à vous soucier est d'écrire du HTML valide. Les chances de devoir migrer une application HTML vers XHTML sont presque nulles.
Fabrício Matté
1
La réponse ci-dessus échouera à valider avec le vérificateur HTML du W3C si vous ciblez 4.01 Transitional et supérieur. Voir également Service de validation de balisage W3C . Je pense que la réponse ci-dessus nécessite HTML5 ou XHTML. Pour éviter les échecs de validation, vous devez utiliser celui-ci <img src='stackoverflow.png'>(si cela vous intéresse).
jww
1
@ FabrícioMatté Vous sous-estimez gravement xhtml dans l'utilisation réelle. Plus l'entreprise est grande, plus elle travaille probablement avec xhtml sur html, ou html5 au format xhtml (pour une analyse facile / rapide), ou vous travaillez avec d'autres choses comme les microdonnées ou un balisage amélioré comme ixbrl.
Robert McKee
Il y a une grande différence entre «fonctionne bien» et «spécifié» et vous ne trouverez jamais de spécification HTML appelant à l'utilisation de la barre oblique de fermeture sur cette balise. Comme d'autres l'ont mentionné, il est permis de ne pas interrompre les sites Web écrits à l'origine pour utiliser XHTML / XML, mais vous ne trouverez nulle part des mots ou des exemples indiquant que son utilisation est nécessaire. En fait, vous trouverez un libellé indiquant qu'il n'a pas de sens et que les navigateurs sont invités à l'ignorer!
Rob
Rob - il y a 6 ans, il y avait un problème. Cela l'a résolu. Je suppose que maintenant les navigateurs sont meilleurs
Ed Heal
163

Celui-ci est du HTML5 valide et il est absolument parfait sans le fermer. C'est un élément dit vide:

<img src='stackoverflow.png'>

Les balises XHTML suivantes sont valides. Ils doivent être fermés. Le dernier est également très bien en HTML 5:

<img src='stackoverflow.png'></img>
<img src='stackoverflow.png' />
Marvin Rabe
la source
5
Ce n'est pas seulement du HTML5 valide, mais également du HTML4. Le HTML ne nécessite pas d'éléments "void" à fermeture automatique comme vous l'avez dit. +1 pour la réponse cohérente.
Fabrício Matté
2
Le HTML5 ou XHTML échouera à être validé avec le vérificateur HTML du W3C s'il cible 4.01 Transitional et supérieur. Voir également Service de validation de balisage W3C . Vous devez utiliser celui-ci <img src='stackoverflow.png'>(si cela vous intéresse).
jww
Commenter après de nombreuses années ... Je suis confus en voyant la <img src="about:logo" alt="about:logo">balise sur la about:logopage de Firefox 76 ! Bien que document.body.innerHTMLmontre <img src=\"about:logo\" alt=\"about:logo\">... Très bonne réponse ...
S.Goswami
4

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 obligatoire, un altattribut «généralement» doit également être inclus).

Cela dit, votre page HTML5 s'affichera probablement comme prévu, car les navigateurs réécriront ou interpréteront votre code HTML selon ce qu'ils pensent que vous vouliez dire. Cela peut signifier qu'il transforme une balise, par exemple, de
<div />en <div></div>. Ou peut-être qu'il ignore simplement la barre oblique finale <img ... />.
voir 2016: Servez HTML5 comme XHTML 5.0 pour la validation héritée.
voir: discussion de 2011 et liens supplémentaires ici, bien qu'au fil du temps certains éléments aient pu changer

C'est en partie parce que les navigateurs essaient très fort de corriger les erreurs. Aussi, parce qu'il y a beaucoup de confusion sur les balises à fermeture automatique et les balises vides. Enfin, la spécification a changé, ou n'a pas toujours été claire, et les navigateurs essaient d'être rétrocompatibles.

Ainsi, même si vous pouvez probablement vous en tirer avec l'une des trois options,
seule la première respecte 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 de la refactorisation du code, mettez à jour les balises d'image à proximité, au fur et à mesure que vous les parcourez.
  • Ne vous inquiétez pas trop des balises dans les fichiers hérités auxquels vous ne touchez pas, sauf si un besoin particulier se fait sentir.

Voici une liste de balises à ne pas fermer en HTML5 :

 <br>    <hr>    <input>       
 <img>  <link>   <source>  
 <col>  <area>   <base>
 <meta> <embed>  <param>  
<track>  <wbr>   <keygen> (HTML 5.2 Draft removed)
SherylHohman
la source
1
Ceci est techniquement incorrect. Un élément void à fermeture automatique est parfaitement valide en html 5. Voir html.spec.whatwg.org/#start-tags qui rendrait <img src='stackoverflow.png' />valide dans n'importe quelle version de XHTML et HTML 5.
Robert McKee
1
@RobertMcKee Non, c'est techniquement correct. Bien que l'utilisation de la barre oblique de fermeture soit autorisée, et ne sera pas signalée comme une erreur, nulle part dans aucune spécification HTML vous ne verrez qu'elle est spécifiée comme à utiliser. Il est permis de ne pas casser les anciens sites Web basés sur XHTML / XML, mais vous ne trouverez nulle part de spécification HTML montrant, par des mots ou par exemple, l'utilisation d'une barre oblique de fermeture sur les balises où elles sont spécifiées par le W3C ou WHATWG.
Rob
@Rob Selon le document WHATWG que j'ai lié ci-dessus dans 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
Robert McKee
1
@RobertMcKee Oui. C'est (une partie de) la spécification expliquant pourquoi la barre oblique est autorisée (pour les raisons que j'ai données dans mon commentaire précédent). Cependant, vous devriez regarder la spécification réelle de cet élément - img dans ce cas - qui montre clairement, par des mots et des exemples, qu'aucune barre oblique de fermeture n'est requise ou spécifiée. En fait, sans la chercher, une lecture plus approfondie dans cette section indiquera que la barre oblique de fermeture n'a pas de sens, ne fait rien et que les navigateurs sont tenus de l'ignorer. C'est donc inutile et inutile et nous ramène à mon commentaire initial: la barre oblique de fermeture n'est pas utilisée.
Rob
1
@Rob Oui, c'est facultatif, mais tout à fait valable pour le faire. Ce qui rend la déclaration Actually, only the first one is valid in HTML5techniquement incorrecte. Le second est également valide en HTML5. Non requis, mais valide. Personne ne prétend que c'est nécessaire. Seulement cela, selon les spécifications, l'utilisation de la forme à fermeture automatique de la balise est valide dans toutes les formes actuelles de XHTML et HTML.
Robert McKee
2

La meilleure utilisation des balises à utiliser:

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

Vous pouvez également utiliser en HTML5:

<img src="" alt="">

Ces deux sont totalement valides en HTML5 Choisissez l'un d'entre eux et tenez-vous-en à cela.

Md. A. Barik
la source
Le premier n'est pas le meilleur en ce qu'il n'est spécifié dans aucun standard HTML alors que le second l'est. Le premier n'est autorisé que pour des raisons historiques! (Compatibilité avec l'utilisation de XHTML / XML dans les anciens sites Web qui se casseraient si les navigateurs l'interdisaient.)
Rob
Je ne sais pas ce que Rob essaie de dire ici, mais la spécification html spécifie que la première est valide.
Robert McKee
2

Les deux 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.

PLB
la source
Incorrect. Le premier est le seul spécifié dans une spécification HTML. Le second n'est autorisé que pour des raisons historiques mais, encore une fois, n'est pas spécifié comme requis nulle part.
Rob
1

-La balise est vide et ne contient que l'attribut. -La balise n'a pas de balise «Closing».

Alors,

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

les deux sont également corrects en HTML5.

PLB
la source
Le premier est correct! Le second n'est autorisé que pour des raisons historiques. (Compatibilité avec l'utilisation de XHTML / XML dans les anciens sites Web qui se casseraient si les navigateurs l'interdisaient.)
Rob
1

Il est utile d'avoir la balise de fermeture si vous essayez de la lire avec un analyseur XHTML. Peut-être un cas de pointe, mais je le fais tout le temps. Cela ne fait aucun mal de l'avoir, et signifie que je sais que nous pouvons utiliser un tableau de lecteurs XML qui ne s'effondreront pas lorsqu'ils atteindront une balise non fermée.

Si vous n'essayez jamais d'analyser le contenu, ignorez la fermeture.

AmateurD
la source