Vorrei inserire un commento (stile <!-- this -->
) nella parte superiore del mio codice HTML, precedendo la dichiarazione DOCTYPE. Questo è conforme agli standard? È supportato dai principali browser? Ci sono delle trappole nel fare questo?I commenti possono apparire prima della dichiarazione DOCTYPE?
risposta
Scrivere il <!DOCTYPE>
prima è certamente la migliore pratica.
Mi ricordo strani problemi molto, molto tempo fa, in cui alcuni del browser (probabilmente IE6) ignorato un <!DOCTYPE>
perché c'era qualcosa di apparentemente innocente prima che - penso solo spazi bianchi, ma forse era un commento. In ogni caso, è stato un orribile, orribile bug da rintracciare, e non c'è mai alcun motivo per avere commenti o spazi bianchi prima dello <!DOCTYPE>
.
Scrivere il <!DOCTYPE>
primo è, direi, solo qualcosa che gli sviluppatori Web esperti fanno per evitare bug orribili e sfuggenti.
Mentre è accettabile secondo lo standard, credo, si vuole assolutamente evitarlo, poiché getterà IE in modalità "Quirks".
(Vedere Triggering different rendering modes)
Qualsiasi cosa diversa dagli spazi bianchi che precedono il DOCTYPE lancia IE (6 e 7, almeno - non sono sicuro di circa 8) in modalità "Quirks". –
che possono causare IE7 rendere in quirks mode come se un tipo di documento non c'era affatto, secondo this page.
Commenti prima che il doctype sia consentito, ma causa tutte le versioni IE per ripristinare la modalità quirks. Sono, in realtà, utilizzati a tale scopo a volte. La dichiarazione XML (<?xml version ...?>
) ha lo stesso effetto, in IE6 e inferiore a.
E 'pienamente valida da fare
<!-- this, -->
<!DOCTYPE html>
Tuttavia, porta tutti versioni di IE in stranezze-mode (a meno che sia costretti in n-quirks mode - vedere la sezione Gotchas in basso). Il più semplice è spostare il commento sotto il DOCTYPE.
<!DOCTYPE html>
<!-- this, -->
Ma un altro modo è quello di “upgrade” il commento in un adeguato condizionale commento , come questa:
<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>
Spiegazione: un condizionale commento fa non conta come commento, nel mondo di IE.
Sintassi alternativa: Dimenticare/ricordare che i commenti condizionali sono un'intrusione Microsoft nello standard HTML, si potrebbe per esempio fare
<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>
Allo stesso modo, per indirizzare IE, in particolare, si potrebbe fare
<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>
trucchi
Un commento all'interno un commento condizionale porterà IE in quirks mode se IE vede (vale a dire: se si utilizza un [if IE] condizioni, o di un equivalente a [if IE] - come ad esempio il [if! anybrowser] condizione che ho menzionato sopra.). Così, per esempio, questo porterebbe IE in quirks mode:
<![if IE]><!-- this --><![endif]>
<!DOCTYPE html>
come sarebbe
<!--[if IE]><!--><!-- this <![endif]-->
<!DOCTYPE html>
e molte altre varianti. Considerando ad esempio
<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]-->
<!DOCTYPE html>
sarebbe non causa quirks-mode, perché qui il commento condizionale ha un DOCTYPE prima qualsiasi altro contenuto, e quindi IE ritiene che il primo contenuto della pagina è un DOCTYPE.
Infine, le versioni più recenti di IE, IE8 e IE9, possono essere costretti agli standard-mode (e quirks modalità pure) mediante l'uso di un'altra invenzione Microsoft - compatibile x-UA-the direttiva. Vedere http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx In tal caso, quindi
<!-- this -->
<!DOCTYPE html>
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
volontà forza IE8 e IE9 in no-Quirks modalità, mentre IE6 e IE7 rimarranno in quirks modalità. Considerando che, al contrario, questo
<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
<!DOCTYPE html>
farebbe forza IE8 e IE9 in modalità standard, nonostante che il contenuto del commento condizionale non non inizio con un DOCTYPE. Inoltre, IE6 e IE7 rimarranno in modalità no-quirks poiché il commento condizionale non li targetizza.
Ho deciso molto tempo fa di evitare l'intero problema inserendo il mio commento più importante dopo il DOCTYPE, ma grazie per la dettagliata (e affascinante) spiegazione del comportamento di IE. –
A + :) Ho intenzione di crederci sulla parola - questa è una risposta incredibilmente dettagliata - grazie, mi piace molto. Ovviamente non ti sei fermato di fronte alla rabbithole: –
Grazie, inserirò il mio commento dopo il tag html. –
È necessario venire prima di tutto, incluso se si desidera che funzioni correttamente. – nertzy
Questo mi ha solo morso. Ho trascorso 4 ore cercando di capire perché IE7/8 ha reso TUTTO FUORI POSTO.Dopo aver controllato ogni singolo tag per le parentesi graffe e gli elementi di chiusura, ho creato un nuovo file e copiato il codice riga per riga (non i commenti) e tutto ha funzionato bene. Completamente sconcertato, ho pensato a caso "e se ...?" quando ho notato la riga di commento appena prima di DOCTYPE nel file originale. C'era il mio colpevole! – dariopy