Come chiudere correttamente il tag <img>?


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

Quale di loro è corretto?


6
La domanda è "Come chiudere correttamente un tag <img>?" che è una vera domanda e le risposte sono utili. Questa domanda non avrebbe dovuto essere chiusa.

3
La domanda, al momento, va bene. È non ambiguo, vago, incomplete, troppo ampia, o rhetorial. C'è anche un'ottima risposta di seguito.
David J.

Non so quale delle seguenti risposte sia corretta, ma è interessante notare che il Code Inspector di Firefox aggiunge </img> alla fine del tag se non lo metti lì. E IE no. Questo è significativo nel mio universo.
Chiwda

PS Dreamweaver inserisce il tag /> XHTML.
Chiwda

Risposte:


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

Funziona bene e chiude correttamente l'etichetta. È meglio aggiungere l' altattributo per le persone con problemi di vista.


4
È corretto che <img />sia valido in [X] HTML / XML, anche se l'uso di XHTML è molto raro oggigiorno e se il tuo server serve le pagine, l'unica cosa di cui text/htmlti devi preoccupare è scrivere HTML valido. Le probabilità di dover migrare un'app HTML a XHTML sono quasi nulle.
Fabrício Matté

1
La risposta precedente non verrà convalidata con il controllo HTML del W3C se il targeting è 4.01 Transitional e versioni successive. Vedi anche W3C Markup Validation Service . Credo che la risposta sopra richieda HTML5 o XHTML. Per evitare errori di convalida, è necessario utilizzare quello <img src='stackoverflow.png'>(se ti interessa).
jww

1
@ FabrícioMatté Hai fortemente sottostimato xhtml nell'uso effettivo. Più grande è l'azienda, più è probabile che lavorino con xhtml su html o html5 formattato come xhtml (per un'analisi facile / veloce), o lavori con altre cose come microdati o markup avanzato come ixbrl.
Robert McKee

C'è una grande differenza tra "funziona bene" e "specificato" e non troverai mai alcuna specifica HTML che richiami l'uso della barra di chiusura su quel tag. Come altri menzionati, è consentito non infrangere i siti web originariamente scritti per usare XHTML / XML, ma da nessuna parte troverai parole o esempi che affermino che il suo utilizzo è necessario. In effetti, troverai una formulazione che afferma che non ha significato e ai browser viene chiesto di ignorarlo!
Rob il

Rob - 6 anni fa c'era un problema. Questo l'ha risolto. Immagino che ora i browser siano migliori
Ed Heal

163

Questo è HTML5 valido e va assolutamente bene senza chiuderlo. È un cosiddetto elemento vuoto:

<img src='stackoverflow.png'>

I seguenti sono tag XHTML validi. Devono essere chiusi. Anche il secondo va bene in HTML 5:

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

5
Non è solo HTML5 valido, ma anche in HTML4. HTML non richiede elementi "void" a chiusura automatica come hai detto. +1 per la risposta coerente.
Fabrício Matté

2
HTML5 o XHTML non verranno convalidati con il controllo HTML del W3C se il targeting è 4.01 di transizione e versioni successive. Vedi anche W3C Markup Validation Service . Devi usare quello <img src='stackoverflow.png'>(se ti interessa).
jww

Commentando dopo molti anni ... Mi sono confuso vedendo il <img src="about:logo" alt="about:logo">tag nella about:logopagina di Firefox 76 ! Anche se document.body.innerHTMLmostra <img src=\"about:logo\" alt=\"about:logo\">... Ottima risposta ...
S.Goswami

4

In realtà, solo il primo è valido in HTML5

<img src='stackoverflow.png'>  

Solo gli ultimi due sono validi in XHTML

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

(Sebbene non sia strettamente richiesto, altdovrebbe essere incluso anche un attributo _usually_).

Detto questo, la tua pagina HTML5 verrà probabilmente visualizzata come previsto perché i browser riscriveranno o interpreteranno il tuo html in base a ciò che pensa tu intenda. Ciò potrebbe significare che trasforma un tag, ad esempio, da
<div />in <div></div>. O forse ignora semplicemente il taglio finale <img ... />.
vedere 2016: Serve HTML5 as XHTML 5.0 for legacy validation.
vedi: discussione 2011 e link aggiuntivi qui, anche se nel tempo alcuni bit potrebbero essere cambiati

In parte questo è dovuto al fatto che i browser si sforzano di correggere gli errori. Inoltre, perché c'è molta confusione sui tag a chiusura automatica e sui tag void. Infine, le specifiche sono cambiate, o non sono sempre state chiare, ei browser cercano di essere retrocompatibili.

Quindi, anche se probabilmente puoi farla franca con una qualsiasi delle tre opzioni,
solo la prima aderisce allo standard HTML5 ed è garantito che passi un validatore HTML5.

Una buona strategia potrebbe essere:

  • Scrivi un nuovo codice senza la barra di chiusura.
  • Quando si ri-fattorizza il codice, aggiorna i tag delle immagini nelle vicinanze man mano che li incontri.
  • Non preoccuparti eccessivamente dei tag nei file legacy che non tocchi, a meno che non sorga una particolare esigenza.

Ecco un elenco di tag che non dovrebbero essere chiusi in HTML5 :

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

1
Questo è tecnicamente errato. Un elemento void a chiusura automatica è perfettamente valido in html 5. Vedere html.spec.whatwg.org/#start-tags che renderebbe <img src='stackoverflow.png' />valido in qualsiasi versione di XHTML e HTML 5.
Robert McKee

1
@RobertMcKee No, è tecnicamente corretto. Sebbene l'utilizzo della barra di chiusura sia consentito e non verrà contrassegnato come errore, in nessuna specifica HTML vedrai che è specificato come essere utilizzato. È consentito non danneggiare i vecchi siti web che erano basati su XHTML / XML ma da nessuna parte troverai mai specifiche HTML che mostrano, a parole o ad esempio, l'uso di una barra di chiusura su quei tag dove sono specificati dal W3C o WHATWG.
Rob il

@Rob Secondo il documento WHATWG che ho collegato sopra nella sezione 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 è un elemento void per sezione 12.1.2
Robert McKee

1
@RobertMcKee Sì. Questa è (parte della) specifica che delinea il motivo per cui la barra è consentita (per i motivi che ho fornito nel mio commento precedente). Tuttavia, dovresti guardare le specifiche effettive per quell'elemento - img in questo caso - che mostra chiaramente, con parole ed esempi, che non è richiesta o specificata alcuna barra di chiusura. Infatti, senza cercarlo, ulteriori letture in quella sezione affermeranno che la barra di chiusura non ha significato, non fa nulla e che i browser sono tenuti a ignorarla. Quindi è inutile e inutile e ci riporta al mio commento originale: la barra di chiusura non è usata.
Rob

1
@Rob Sì, è facoltativo, ma completamente valido. Il che rende l'affermazione Actually, only the first one is valid in HTML5tecnicamente errata. Il secondo è valido anche in HTML5. Non richiesto, ma valido. Nessuno sta sostenendo che sia necessario. Solo quello secondo le specifiche, l'uso della forma a chiusura automatica del tag è valido in tutte le forme attuali di XHTML e HTML.
Robert McKee

2

Il miglior utilizzo dei tag da utilizzare:

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

Inoltre puoi usare in HTML5:

<img src="" alt="">

Questi due sono completamente validi in HTML5. Scegli uno di loro e mantienilo.


Il primo non è il migliore in quanto non è specificato in nessuno standard HTML mentre il secondo lo è. Il primo è consentito solo per motivi storici! (Compatibilità con l'utilizzo di XHTML / XML nei vecchi siti web che si romperebbe se i browser non lo consentissero.)
Rob

Non sono sicuro di cosa Rob stia cercando di dire qui, ma le specifiche html specificano che la prima è valida.
Robert McKee

2

Entrambi la risposta giusta. HTML5 segue regole rigide e in HTML5 possiamo chiudere tutti i tag. Quindi, dipende da te utilizzare HTML5 o HTML e seguire una risposta appropriata.

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

La seconda proprietà è più appropriata.


Non corretto. Il primo è l'unico specificato in qualsiasi specifica HTML. Il secondo è consentito solo per ragioni storiche ma, ancora una volta, non specificato come richiesto da nessuna parte.
Rob

1

-Il tag è vuoto e contiene solo attributi. -Il tag non ha il tag "Chiusura".

Così,

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

entrambi sono corretti anche in HTML5.


Il primo è corretto! Il secondo è consentito solo per ragioni storiche. (Compatibilità con l'utilizzo di XHTML / XML nei vecchi siti web che si romperebbe se i browser non lo consentissero.)
Rob

1

È utile avere il tag di chiusura se proverai a leggerlo con un parser XHTML. Potrebbe essere un caso limite, ma lo faccio sempre. Non fa male averlo, e significa che so che possiamo usare un array di lettori XML che non si bloccheranno quando colpiscono un tag non chiuso.

Se non proverai mai ad analizzare il contenuto, ignora la chiusura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.