2009-06-02 7 views

risposta

34

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.

+0

Grazie, inserirò il mio commento dopo il tag html. –

+0

È necessario venire prima di tutto, incluso se si desidera che funzioni correttamente. – nertzy

+7

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

12

Mentre è accettabile secondo lo standard, credo, si vuole assolutamente evitarlo, poiché getterà IE in modalità "Quirks".

(Vedere Triggering different rendering modes)

+4

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". –

3

che possono causare IE7 rendere in quirks mode come se un tipo di documento non c'era affatto, secondo this page.

0

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.

118

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.

+3

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. –

+2

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: –