Quali sono tutti gli elementi di chiusura automatica validi in XHTML (come implementati dai principali browser)?

StackOverflow https://stackoverflow.com/questions/97522

Domanda

Quali sono tutti gli elementi di chiusura automatica validi (es.<br/>) in XHTML (come implementato dai principali browser)?

So che XHTML tecnicamente consente a qualsiasi elemento di chiudersi automaticamente, ma sto cercando un elenco di quegli elementi supportati da tutti i principali browser.Vedere http://dusan.fora.si/blog/self-closing-tags per esempi di alcuni problemi causati da elementi a chiusura automatica come <div />.

È stato utile?

Soluzione

Tutti i browser che supportano XHTML (Firefox, Opera, Safari, IE9) supporta la sintassi a chiusura automatica su ogni elemento.

<div/>, <script/>, <br></br> tutto dovrebbe funzionare bene.Se non lo fanno, allora sì HTML con XHTML DOCTYPE aggiunto in modo inappropriato.

DOCTYPE non cambia il modo in cui viene interpretato il documento. Solo il tipo MIME lo fa.

Decisione del W3C di ignorare DOCTYPE:

Il gruppo di lavoro HTML ha discusso questo problema:L'intenzione era di consentire ai vecchi browser (solo HTML) di accettare i documenti XHTML 1.0 seguendo le linee guida e servendoli come testo/HTML.Pertanto, i documenti serviti da testo/HTML devono essere trattati come HTML e non come XHTML.

È una trappola molto comune, perché W3C Validator ignora in gran parte questa regola, ma i browser la seguono religiosamente.Leggere Comprendere HTML, XML e XHTML dal blog WebKit:

In effetti, la stragrande maggioranza dei documenti presumibilmente XHTML su Internet vengono serviti come text/html.Ciò significa che non sono affatto XHTML, ma in realtà HTML non valido che se la cava con la gestione degli errori dei parser HTML.Tutti quei "validi XHTML 1.0!" I collegamenti sul web stanno davvero dicendo "HTML 4.01 non valido!".


Per verificare se hai XHTML reale o HTML non valido con DOCTYPE di XHTML, inserisci questo nel tuo documento:

<span style="color:green"><span style="color:red"/> 
 If it's red, it's HTML. Green is XHTML.
</span>

Convalida e in XHTML reale funziona perfettamente (vedi: 1 contro 2).Se non puoi credere ai tuoi occhi (o non sai come impostare i tipi MIME), apri la tua pagina tramite Proxy XHTML.

Un altro modo per verificare è visualizzare l'origine in Firefox.Evidenzierà le barre in rosso quando non sono valide.

In HTML5/XHTML5 questo non è cambiato, e la distinzione è ancora più chiara, perché non hai nemmeno ulteriori DOCTYPE. Content-Type è il re.


Per la cronaca, le specifiche XHTML consentono a qualsiasi elemento di chiudersi automaticamente rendendo XHTML un Applicazione XML:[sottolineatura mia]

È possibile utilizzare tag di elementi vuoti qualsiasi elemento privo di contenuto, indipendentemente dal fatto che sia dichiarato o meno utilizzando la parola chiave EMPTY.

È anche esplicitamente mostrato nel file Specifiche XHTML:

Gli elementi vuoti devono O avere un tag di fine oppure il tag di inizio deve terminare con />.Ad esempio, <br/> O <hr></hr>

Altri suggerimenti

Un elemento a cui prestare molta attenzione su questo argomento è il <script> elemento.Se hai un file sorgente esterno, causerà problemi quando lo chiuderai automaticamente.Provalo:

<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />

Funzionerà in Firefox, ma si interrompe almeno in IE6.Lo so, perché mi sono imbattuto in questo quando ho chiuso con eccessivo zelo ogni elemento che ho visto ;-)

La sintassi a chiusura automatica funziona su tutti gli elementi in application/xhtml+xml.Non è supportato su nessun elemento in text/html, ma gli elementi che sono "vuoto" in HTML4 o "void" in HTML5 non accettano comunque un tag di fine, quindi se metti una barra su questi appare come se era supportata la sintassi a chiusura automatica.

Dal Sito di riferimento delle scuole W3:

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />

La domanda migliore sarebbe:quali tag possono essere chiusi automaticamente anche in modalità HTML senza influire sul codice?Risposta:solo quelli che hanno contenuto vuoto (sono nulli).Secondo Specifiche HTML sono nulli i seguenti elementi:

area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr

È elencata anche la versione precedente delle specifiche command.Inoltre, secondo varie fonti, i seguenti tag obsoleti o non standard non sono validi:

basefont, bgsound, frame, isindex

Spero che questo aiuti qualcuno:

<base />
<basefont />
<frame />
<link />
<meta />

<area />
<br />
<col />
<hr />
<img />
<input />
<param />

Che dire <meta> E <link>?Perché non sono in quella lista?

Regola pratica veloce: non chiudere automaticamente alcun elemento destinato ad avere contenuto, perché prima o poi causerà sicuramente problemi al browser.

Quelli che si chiudono automaticamente da soli, tipo <br> E <img>, dovrebbe essere ovvio.Quelli che non lo sono...basta non chiuderli da soli!

L'ultima volta che ho controllato, i seguenti erano gli elementi vuoti/void elencati in HTML5.

Valido per gli autori:area base, br, col, comando, incorporare, eventsource, hr, img, ingresso, collegamento, meta, param, sorgente

Non valido per gli autori:carattere base, bgsound, cornice, distanziatore, wbr

Oltre ai pochi nuovi in ​​HTML5, questo dovrebbe darti un'idea di quelli che potrebbero essere supportati quando si serve XHTML come testo/html.(Basta testarli esaminando il DOM prodotto.)

Per quanto riguarda XHTML servito come application/xhtml+xml (che lo rende XML), si applicano le regole XML e qualsiasi elemento può essere vuoto (anche se il DTD XHTML non può esprimerlo).

Dovresti dare un'occhiata DTD xHTML, sono tutti elencati.Ecco una rapida rassegna di tutti i principali:

<br />
<hr />
<img />
<input />

Sono chiamati elementi "void" in HTML 5.Sono elencati in specifica ufficiale W3.

Un elemento void è un elemento il cui modello di contenuto non gli consente mai di avere contenuti in nessuna circostanza.

Ad aprile 2013, sono:

area, br, col, comando, hr, img, incorporare, ingresso, keygen, meta, collegamento, param, traccia, sorgente, wbr

A dicembre 2018 (HTML 5.2), sono:

br, col, hr, img, incorporare, ingresso, area base, meta, collegamento, param, pista, sorgente, wbr

Un altro problema relativo ai tag a chiusura automatica per IE è l'elemento titolo.Quando IE (appena provato in IE7) lo vede, presenta all'utente una pagina vuota.Comunque "visualizza sorgente" e tutto è lì.

<title/>

Inizialmente l'ho visto quando il mio XSLT ha generato il tag a chiusura automatica.

Non cercherò di approfondire questo argomento, soprattutto perché la maggior parte delle pagine che scrivo sono generate o il tag ha contenuto.Gli unici due che mi hanno mai dato problemi nel chiuderli automaticamente sono:

<title/>

Per questo, ho semplicemente fatto ricorso a dargli sempre un tag di chiusura separato, poiché una volta che è lassù nel file <head></head> comunque non rende il tuo codice più complicato con cui lavorare.

<script/>

Questo è quello grosso con cui recentemente ho avuto problemi.Per anni avevo sempre utilizzato la chiusura automatica <script/> tag quando lo script proviene da una fonte esterna.Ma di recente ho iniziato a ricevere messaggi di errore JavaScript su un modulo null.Dopo diversi giorni di ricerca, ho scoperto che il problema era (presumibilmente) che il browser non riusciva mai a raggiungere il file <form> tag perché non si rendeva conto che questa era la fine del file <script/> etichetta.Quindi quando l'ho reso separato <script></script> tag, tutto ha funzionato.Perché in diverse pagine che ho creato sullo stesso browser, non lo so, ma è stato un grande sollievo trovare la soluzione!

<hr /> è un altro

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top