2009-06-02 10 views

Antwort

34

Schreiben der <!DOCTYPE> erstens ist sicherlich die beste Praxis.

Ich erinnere mich seltsame Probleme vor langer, langer Zeit, wo einiger Browser (wahrscheinlich IE6) ein <!DOCTYPE>ignoriert, weil es etwas scheinbar unschuldig, bevor es war - ich denke nur, Leerzeichen, aber vielleicht war es ein Kommentar. In jedem Fall war es ein schrecklicher, schrecklicher Bug, den man aufspüren musste, und es gibt sicherlich keinen guten Grund, Kommentare oder Leerzeichen vor dem <!DOCTYPE> zu haben.

Schreiben der <!DOCTYPE> erstens, würde ich sagen, nur etwas erfahrene Web-Entwickler tun, um schreckliche, schwer fassbare Bugs zu vermeiden.

+0

Danke, ich werde stattdessen meinen Kommentar nach dem HTML-Tag platzieren. –

+0

Es muss vor allem einschließlich kommen, wenn Sie möchten, dass es richtig funktioniert. – nertzy

+7

Das hat mich nur gebissen. Ich habe 4 Stunden damit verbracht, herauszufinden, warum IE7/8 ALLES AUSSERHALB PLATZIERT hat.Nachdem ich jedes einzelne Tag auf korrekte geschweifte Klammern und andere Dinge überprüft hatte, erstellte ich eine neue Datei und kopierte den Code Zeile für Zeile (nicht die Kommentare) und alles funktionierte gut. Völlig verwirrt, dachte ich zufällig "was wäre wenn ...?" als ich die Kommentarzeile direkt vor DOCTYPE in der Originaldatei bemerkte. Da war mein Täter! – dariopy

12

Obwohl es nach dem Standard akzeptabel ist, glaube ich, dass Sie es auf jeden Fall vermeiden wollen, da es den IE in den Quirks-Modus versetzt.

(siehe Triggering different rendering modes)

+4

Alles andere als Leerzeichen vor dem DOCTYPE löst IE (6 und 7, mindestens - nicht sicher über 8) in Quirks-Modus. –

3

Das IE7 verursachen kann im Quirks-Modus zu machen, als ob ein Doctype gar nicht da war, nach this page.

0

Kommentare vor dem Doctype sind erlaubt, aber verursachen alle IE-Versionen, um zum Quirks-Modus zurückzukehren. Sie werden tatsächlich manchmal für diesen Zweck verwendet. Die XML-Deklaration (<?xml version ...?>) hat den gleichen Effekt, in IE6 und unter. es bringt alle Versionen von IE in Macken-Modus

118

Es ist vollgültig

<!-- this, --> 
<!DOCTYPE html> 

jedoch, zu tun (es sei denn, es in nicht-Quirks-Modus gezwungen ist - siehe den Abschnitt Gotchas Abschnitt unten). Am einfachsten ist es, den Kommentar unterhalb des DOCTYPE zu verschieben.

<!DOCTYPE html> 
<!-- this, --> 

Aber ein anderer Weg ist, um „Upgrade“ den Kommentar in einem geeignet bedingte Kommentar wie folgt aus:

<!--[if !IE]> this <![endif]--> 
<!DOCTYPE html> 

Erläuterung: ein bedingte Kommentar tut nicht zählen als Kommentar, in IE's Welt.

Alternative Syntax: vergessen/nicht vergessen, dass bedingte Kommentare ein Microsoft Eindringen in den HTML-Standard sind, könnte man zum Beispiel tun

<!--[if anybrowser]> this <![endif]--> 
<!DOCTYPE html> 

Ebenso insbesondere IE zu zielen, könnte man tun

<!--[if !anybrowser]> this <![endif]--> 
<!DOCTYPE html> 

Gotchas

Ein Kommentar innen ein bedingter Kommentar IE bringen in Macken-Modus wenn IE es sieht (das heißt: wenn verwendet man ein [if IE] Zustand oder ein Äquivalent zu [if IE] - etwa die [if! anybrowser] Bedingung, dass ich oben erwähnt habe.). So zum Beispiel würde dies IE bringt im Quirks-Modus:

<![if IE]><!-- this --><![endif]> 
<!DOCTYPE html> 

Wie würden

<!--[if IE]><!--><!-- this <![endif]--> 
<!DOCTYPE html> 

und viele andere Varianten. Während zum Beispiel

<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]--> 
<!DOCTYPE html> 

würde nicht Ursache Macken-Modus, weil hier der bedingte Kommentar DOCTYPE vor anderen Inhalt hat und somit die Auffassung, IE, dass der erste Inhalt der Seite ist ein DOCTYPE.

Schließlich sind die neuesten IE-Versionen, IE8 und IE9 kann sein zu standard Modus gezwungen (und Macken-Modus als auch) durch die Verwendung eines anderen Microsoft Erfindung - die x-ua-kompatibel Direktive. Siehe http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx In diesem Fall dann

<!-- this --> 
<!DOCTYPE html> 
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]--> 

wird Kraft IE8 und IE9 in no-Macken Modus, während IE6 und IE7 wird in Macken Modus bleiben. Während im Gegensatz dazu diese

<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]--> 
<!DOCTYPE html> 

würde Kraft IE8 und IE9 in Standardmodus, trotz, dass der Inhalt des bedingten Kommentars tut nicht Start mit einem DOCTYPE. Und IE6 und IE7 bleiben auch im Modus "Keine Quirks", da der bedingte Kommentar sie nicht anspricht.

+3

Ich habe vor langer Zeit beschlossen, das ganze Problem zu vermeiden, indem ich meinen Top-Kommentar nach dem DOCTYPE platziere, aber danke für die detaillierte (und faszinierende) Erklärung des Verhaltens von IE. –

+2

A + :) Ich werde dein Wort dafür nehmen - das ist eine unglaublich detaillierte Antwort - danke, ich mag es sehr. Du hast eindeutig nicht im Angesicht des Rabbitholons aufgehört: –

Verwandte Themen