Der in diesem Artikel enthaltene Moduswechsel eignet sich für Firefox- und andere auf dem Gecko basierende Browser, Safari, Chrome und andere Webkit-basierte Browser, Opera, Konqueror, Internet Explorer für Mac, Internet Explorer für Windows und Browser mit integriertem IE. Vermeiden Sie es, den Namen des Browsermotors zu erwähnen, und verwenden Sie stattdessen den Namen des bekanntesten Browsers des Motors.
Dieser Artikel konzentriert sich auf den Auswahlmechanismus von Mustern, anstatt das genaue Verhalten jedes Musters aufzuzeichnen.
Hier sind eine Vielzahl verschiedener Modi:
Die Musterauswahl des Text-/HTML -Inhalts hängt vom Sniffing von DocType ab (docType -Sniffing, der später in diesem Artikel erörtert wird). In IE8 hängt das Muster auch von anderen Faktoren ab. In IE8 standardmäßig hängen die Muster nicht-Intranet-Websites, die auf der Blacklist von Microsoft nicht bereitgestellt werden, vom Dokumenttyp ab.
Es ist keine Übertreibung, den Unterschied im genauen Verhalten von Mustern in jedem Browser zu betonen, auch wenn in diesem Artikel eine einheitliche Diskussion vorliegt.
In Firefox, Safari, Chrome und Opera, wird das XML -Muster der Anwendung/XHTML+XML -HTTP -Inhaltstyp (kein Meta -Element oder docType!) Ausgelöst. Im XML -Muster versucht der Browser, XML -Dokumente in dem Maße, in dem es sich im Browser befindet, die korrekten Spezifikationen zu geben.
IE6, 7 und 8 unterstützen die Anwendung/XHTML+XML nicht, ebenso wie Mac IE5.
Im Webkit-basierten Nokia S60-Browser kann der Typ Application/XHTML+XML HTTP-Inhaltstyp das XML-Schema nicht auslösen, da der Fokus in mobilen Gärten die Kompatibilität mit unregelmäßigem Inhalt liegt. (Mobile Browser im alten Stil können echte XML-Parsers nicht verwenden, da der nicht standardmäßige Inhalt mit XML gekennzeichnet ist.)
Da Konqueror nicht vollständig getestet wird, kann ich nicht genau sagen, was in diesem Browser passieren wird.
Die Muster, die einige Motoren mit Webinhalten nichts zu tun haben. Zur Vollständigkeit werden sie nur hier erwähnt. Opera hat einen WML2.0 -Modus. Webkit on Leopard verfügt über einen bestimmten Modus für Legacy Dashboard -Widgets.
Hier sind die Haupteffekte dieser Muster:
Das Text/HTML -Muster beeinflusst hauptsächlich das CSS -Layout. Zum Beispiel ist es eine Eigenart für Tabellen, um Stile nicht zu erben. Im Quirk -Modus einiger Browser wird das Boxmodell zum Boxmodell von IE5.5. In diesem Dokument werden nicht alle Layout -Macken aufgeführt.
Quasi-Standard-Modus (in Browsern mit diesem Modus) unterscheiden sich nur Tabellenzellen, die Bilder enthalten, im hohen und im Standardmodus.
Im XML-Schema haben Selektoren unterschiedliche Fallsensitive Verhaltensweisen. Darüber hinaus können einzigartige Regeln für HTML -Körperelemente nicht auf ältere Browser angewendet werden, die die neuesten CSS2.1 -Änderungen nicht implementieren.
Es gibt auch einige Macken, die die HTML- und CSS -Parsen beeinflussen und Webseiten verursachen, die den Standards fälschlicherweise analysiert werden. Das Layout von Macken bestimmt, ob diese Macken eingeschaltet sind. In jedem Fall ist es sehr wichtig, die wichtigsten Ähnlichkeiten und Unterschiede von Quirk-Mustern und Standardmustern im CSS-Layout und -Spesing (Nicht-HTML-Parsen) zu verstehen.
Einige Leute nennen fälschlicherweise den Standardmodus Strict Parsing -Modus, wodurch die Menschen die Durchsetzung der HTML -Syntaxregeln des Browsers und die Bewertung der Richtigkeit von Tags durch den Browser falsch verstehen. Dies ist nicht der Fall. Auch wenn das Standardmodus -Layout wirksam wird, wird der Browser die Korrekturarbeiten für die Tag -Suppe (Tagsuppe, http://en.wikipedia.org/wiki/Tag_Soup) herstellen. (Bevor Netscape6 im Jahr 2000 veröffentlicht wurde, hatte Mozilla Parsingmuster für die Durchsetzung von HTML -Syntaxregeln. Diese Muster wurden mit vorhandenen Webinhalten nicht kompatibel.)
Ein weiteres häufiges Missverständnis betrifft die Analyse von XHTML. Es wird normalerweise angenommen, dass unter Verwendung von xhtml docType verschiedene Parsen erhalten werden. Tatsächlich ist dies nicht der Fall. Der Inhaltstyp entspricht dem Parser- und HTML -Dokument, das im XHTML -Dokument von Text/HTML verwendet wird. Was Browser im Moment interessieren, ist, dass XHTML mit Dokumenttyp Text/HTML nur eine Tag -Suppe mit Crouts (zusätzliche Schrägstriche überall) ist.
Nur wenn ein XML -Dokumenttyp -Dokument (z. B. Anwendung/XHTML+XML oder Xmapplication/) verwendet wird, löst der Parser das XML -Schema zum Parsen aus. Der Parser unterscheidet sich zu diesem Zeitpunkt völlig vom HTML -Parser.
Während das Quirk -Muster hauptsächlich CSS betrifft, geht es bei einigen um Skripten. Zum Beispiel legt das HTML -ID -Attribut in Firefox 'Quirk -Muster Objektverweise auf den globalen Skriptbereich genau wie in IE fest. Die Auswirkungen von Skripten in IE8 sind der Aufmerksamkeit wertvoller als andere Browser.
Im XML -Schema verhalten sich einige DOM -APIs völlig anders, da das DOM -API -Verhalten von XML bei definiert nicht mit dem HTML -Verhalten kompatibel ist.
Moderne Browser verwenden docType Sniffing, um den Motormodus von Text/HTML -Dokumenten zu bestimmen. Dies bedeutet, dass die Auswahl des Schemas auf der Deklaration von Dokumenttypen (oder fehlt) basiert, beginnend mit dem HTML -Dokument. (Dies eignet sich nicht für Dokumente mit XML -Dokumenttyp.)
Dokumenttyperklärung (DOCTYPE) ist eine Syntax -Fälschung von SGML. SGML ist ein Markup-Framework im alten Stil. HTML vor HTML5 wird basierend darauf definiert. In der Spezifikation von HTML4.01 beschreibt die Deklaration von Dokumenttyp die Versionsinformationen von HTML. Obwohl es sich bei dem Namen um eine Deklaration von Dokumenttypen handelt und die Spezifikation von HTML 4.01 Versionsinformationen beschreibt, gelten die Deklarationen von Dokumenttypen nicht für die Klassifizierung von SGML- oder XML -Dokumenten als bestimmte Arten von Dokumenten, auch wenn er aussieht (aufgrund des Namens). (Mehr Inhalte befinden sich im Anhang)
Weder die HTML4.01 -Spezifikation noch ISO 8879 (SGML) sagen alles über die Verwendung von Dokumenttyp -Deklarationen als Konvertierung des Motormodus. DocType Sniffing basiert auf der Beobachtung. Wenn docType -Sniffing gestaltet ist, haben die meisten Macken keine Erklärungen vom Typ Dokumenttyp oder Verweise auf alte DTDs. HTML5 akzeptiert diese Tatsache und definiert docType als die einzige Moduskonvertierung in Text/HTML.
Eine typische Dokumententypdeklaration von Pre-HTML5 (PRE-HTML5) enthält (durch Leerzeichen getrennt) <! DocType-Zeichenfolge, eine gemeinsame Kennung für das Stammelement (HTML), eine öffentliche Zeichenfolge, eine DTD-Common-Identifikatorin in Zitaten, eine mögliche Systemkennung (URL) und ein Zeichen für das gleiche DTD. Die Deklarationstyperklärung erfolgt, bevor das Rootelement des Dokuments das Etikett startet.
Hier finden Sie eine einfache Anleitung, wie Sie docType beim Erstellen eines neuen Textes/HTML -Dokuments auswählen:
Ich empfehle kein xhtml docType, da XHTML als Text/HTML als schädlich angesehen wird. Wenn Sie sich für XHTML DocType entscheiden, beachten Sie, dass die XML -Deklaration IE6 (aber nicht IE7!) Das Quirk -Muster auslösen.
Eine einfache Anleitung zur Anwendung/XHTML+XML ist die Verwendung von docType niemals. Die Webseiten unter dieser Methode stimmen nicht streng mit XHmtl1.0 überein, aber dies spielt keine Rolle. (Weitere Informationen finden Sie im Anhang unten)
Eine Liste, die nach der Einführung von IE8 eine meta-elementbasierte Musterkonvertierung als einer der Faktoren für die Musterauswahl verwendet wird, zusätzlich zu DocType. (Siehe Rezensionen von Ian Hickson, David Baron, David Baron, Robert O'Callahan und Maciej Stachowiak.)
Es gibt 4 Modi für IE8: IE5.5 Quirk-Modus, IE7-Standardmodus, IE8 Qual-Standard-Modus und IE8-Standardmodus. Die Auswahl des Modus hängt von Daten aus mehreren Aspekten ab: DocType, Meta -Elemente, HTTP -Header, regelmäßige Download -Daten von Microsoft, LAN -Domänen, Einstellungen, die von Benutzern vorgenommen wurden, Einstellungen, die von LAN -Administratoren vorgenommen wurden, Modi des übergeordneten Frameworks (falls vorhanden) und die kompatible Ansichtsknopfmodi ausgewiesen werden. (Für andere in den Motor eingebettete Anwendungen hängt das Muster auch von der eingebetteten Anwendung ab.)
Glücklicherweise wird IE8 im Allgemeinen docType -Schnüffeln wie andere Browser verwenden, wenn Folgendes auftritt:
Mit Ausnahme der beiden Fälle in Bezug auf X-UA-kompatible führt IE8 das Dokument wie IE7 durch. IE7 -Emulation (IE7 -Emulation) wird als kompatible Ansicht bezeichnet.
Im Fall von X-UA-kompatibel verhält sich IE8 ganz anders als andere Browser. Ich würde gerne den Anhang oder den Flussdiagramm in PDF- und PNG -Formaten auf dieser Seite sehen.
Leider gibt es keinen HTTP-Header oder META-Tag für X-UA-kompatible, und selbst mit dem entsprechenden DocType können Benutzer die Seite versehentlich vom IE8-Standardmodus in den IE7-Modus reduzieren, der ein simulierter IE7-Standardmodus ist. Schlimmer noch, LAN -Administratoren können dasselbe tun. Microsoft kann auch alle von Ihnen verwendeten Domain -Namen schwarzlistet.
Um mit diesen Effekten umzugehen, reicht docType nicht aus, Sie benötigen X-UA-kompatible HTTP-Header und Meta-Tag.
Die folgende einfache Anleitung für neue Text-/HTML-Dokumente, die bereits in anderen Browsern den Standardmodus oder den Quasi-Standard-Modus für DocType-Trigger-Standardmodus haben, um die X-UA-kompatible HTTP-Header oder Meta-Tag auszuwählen:
Bitte bringen Sie docType nicht nach XML.
DocType Sniffing besteht darin, ein Problem der markierten Chowder-Suppe unter Verwendung einer Chowder-Suppe-ähnlichen Methode zu lösen. DocType Sniffing ist ein vorläufiger Ansatz, der nach der Veröffentlichung von HTML4- und CSS2 -Spezifikationen entworfen wurde, wodurch veraltete Dokumente von Dokumenten unterschieden werden, um Verhaltensweisen zu entsprechen, die ihre Autoren möglicherweise erwarten.
Gelegentlich wird empfohlen, DocType -Sniffing auf XML zu verwenden, um eine andere Verarbeitung zu planen, den verwendeten Wortschatz zu identifizieren oder Merkmale zu aktivieren. Dies ist eine schlechte Idee. Die Planung und Erkennung von Wortschatzern sollte auf dem Namespace basieren, während die Funktionsaktivierung auf expliziten Verarbeitungsanweisungen oder -elementen basieren sollte.
Die ganze Idee der Wohltat ist es, die DTD-Parsen einzuführen, die XML ermöglicht und docType-freie Dokumente fördert. In formalen Fällen haben zwei XML -Dokumente die gleiche kanonische Form und die Bewerbung verarbeitet sie unterschiedlich (und nicht weil es keine Wahl gibt, externe Entitäten zu behandeln), kann die Anwendung unterbrochen werden. Wenn in der Praxis zwei XML -Dokumente in der Praxis dazu führen, dass der gleiche Inhalt gemeldet wird (Qnames ignoriert) dem SAX2 -Inhaltsprozessor und die Bewerbung des Dokuments unterschiedlich verarbeitet, kann die Anwendung unterbrochen werden. Wenn man bedenkt, dass es als Webautor unmöglich ist zu glauben, dass jeder seine Seiten mit XMLProcessoren analysieren wird, die zusätzliche Entitäten ansprechen (auch wenn einige Browser dies zu tun scheinen, wenn sie bestimmte öffentliche Kennungen an eine DTD abbilden, die die Entität mit einem abgestürzten Abgeordneten definiert), geben Sie DocType in XML ein. (Sie verwenden weiterhin die DTD Override -Funktion des W3C -Validators, um einen DTD zu verifizieren, obwohl der W3C -Validator sagt, dass das Ergebnis nur vorübergehend ist. Oder besser, aber Sie können die entspannende NG -Überprüfung verwenden, was das Dokument, in dem das Muster verwiesen wird, nicht verschmutzen.
Wenn eine Spezifikation auf niedriger Ebene zwei gleiche Dinge definiert, sollte eine Spezifikation auf hoher Ebene nicht versuchen, ihnen unterschiedliche Bedeutungen zu geben. Bitte betrachten Sie <! DocType html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>. Wenn die öffentliche Kennung gelöscht wird, ist dieselbe DTD weiterhin angegeben, sodass docType <! DocType html system http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> das gleiche wie das vorherige DocType bedeutet. Sollten sie anders schnüffeln? Es kann weitere Theorie sein. Angenommen, kopieren Sie kopieren Sie zu Beispiel.com A DTD namens foobar.dtd: <! DocType html system http://example.com/foobar.dtd>. Wie schnüffle ich das? Es sollte die gleiche Bedeutung haben. Sogar die gesamte DTD kann im Dokument veröffentlicht werden.
Mit anderen Worten, wenn es #include foo.h gibt, sollten Sie keine schwarze Magie an den Namen foo.h binden, da er das Kopieren des Inhalts von foo.h in das Dokument oder das Kopieren von Foo.h in bar.h und darstellen #include bar.h.
Der Grund, warum ich mir keine Sorgen darüber mache, dass HTML und SGML dieselben Parameter konstruieren, ist, dass der Webbrowser keinen echten SGML -Parser verwendet, um HTML zu analysieren. Daher denke ich, dass es nutzlos ist, als SGML für die Verarbeitung zu tarnen. Wenn Sie es noch nicht glauben, lesen Sie bitte den Artikel von W. Eliot Kimber in dieser Angelegenheit comp.text.sgml
In der folgenden Tabelle werden das Quirk-Muster, das Standardmuster und die Quasi-Kriterien als Q, S bzw. A dargestellt. Wenn der Browser nur zwei Modi hat, ist der Standardmodus als S markiert, wenn die Zeilenhöhe der Tabellenzelle mit der Standardmodusleistung von Mozilla übereinstimmt, und der Standardmodus ist als A markiert, wenn die Zeilenhöhe der Tabellenzelle mit der Standardmodusleistung von Mozilla übereinstimmt.
Bitte beachten Sie, dass XHTML -Serving mit dem XML -Inhaltsmodell im XML -Modus gerendert wird.
Der Zweck dieser Tabelle ist nicht zu sagen, dass alle DocTypes in der Tabelle angemessene Wahl sind, um neue Seiten zu erstellen. Der Zweck dieser Tabelle besteht darin, zu zeigen, auf welche Art von Daten meine Empfehlungen basieren.
Die folgenden Abkürzungssymbole werden für Spalten Titel verwendet:
| DocType | NS6 | Alter Moz | Moz & Safari & Opera10 & HTML5 | Opera9.0 | IE8 & Opera9.5 | IE7 & Opera7.10 | IE6 & Opera7.0 | MAC IE5 | Konq3.2 |
|---|---|---|---|---|---|---|---|---|---|
| Keiner | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! DocType Html public -// w3c // dtd html 3.2 endgültig // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! DocType Html public -// w3c // dtd html 4.0 // en> | S | S | S | S | S | A | A | A | A |
| <! DocType Html public -// w3c // dtd html 4.01 // en> | S | S | S | S | S | A | A | Q | A |
| <! DocType Html public -// w3c // dtd html 4.0 // en http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | A | A | A | A |
| <! DocType Html public -// w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | A | A | A | A |
| <! DocType Html public -// w3c // dtd html 4.0 transitional // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! DocType Html public -// w3c // dtd html 4.01 transitional // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! DocType Html public -// w3c // dtd html 4.01 transitional // en http://www.w3.org/tr/html4/loose.dtd> | S | S | A | A | A | A | A | A | Q |
| <! DocType Html public -// w3c // dtd html 4.01 transitional // en http://www.w3.org/tr/1999/rec-html401-19991224/loose.dtd> | Q | S | A | A | A | A | A | A | Q |
| <! DocType Html public -// w3c // dtd html 4.0 transitional // en http://www.w3.org/tr/html4/loose.dtd> | Q | Q | Q | Q | A | A | A | A | Q |
| <! DocType html public -// w3c // dtd xhtml 1.1 // en http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd> | S | S | S | S | S | A | A | A | A |
| <! DocType html public-// w3c // dtd xhtml basic 1.0 // en http://www.w3.org/tr/xhtml-basic/xhtml-basic10.dtd> | S | S | S | S | S | A | A | A | A |
| <! DocType html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | S | S | S | S | S | A | A | A | A |
| <! DocType html public -// w3c // dtd xhtml 1.0 transitional // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | A | A | A | A | A | A | Q |
| <xml Version = 1.0 coding = utf -8?> <! docType html public -// w3c // dtd xhtml 1.1 // en http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd> | S | S | S | S | S | A | Q | A | Q |
| <xml Version = 1.0 coding = utf-8?> <! docType html public-// w3c // dtd xhtml basic 1.0 // en http://www.w3.org/tr/xhtml-basic/xhtml-basic10.dtd> | S | S | S | S | S | A | Q | A | Q |
| <xml Version = 1.0 coding = utf -8?> <! docType html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | S | S | S | S | S | A | Q | A | Q |
| <xml Version = 1.0 coding = utf -8?> <! docType html public -// w3c // dtd xhtml 1.0 transitional // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | A | A | A | A | Q | A | Q |
| <! DocType HTML Public ISO/IEC 15445: 2000 // dtd html // en> | Q | S | S | Q | Q | Q | Q | Q | Q |
| <! DocType HTML Public ISO/IEC 15445: 2000 // DTD Hypertext Markup Sprache // en> | Q | S | S | S | S | A | A | A | Q |
| <! DocType HTML Public ISO/IEC 15445: 1999 // dtd html // en> | S | S | S | Q | Q | Q | Q | Q | Q |
| <! DocType HTML Public ISO/IEC 15445: 1999 // DTD Hypertext Markup Sprache // en> | S | S | S | S | S | A | A | A | Q |
| <! DocType html> | Q | S | S | S | S | A | A | A |
Moziilas DocType Sniffing Code wurde im Oktober 2000, September 2001 und Juni 2002 erheblich geändert. Die von Mozilla (und Netscape 6.x) in diesem Dokument beschriebenen Staaten sind seit 2000.10.19 auf ftp.mozilla.org zu sehen. In diesem Dokument wird nicht angesprochen, wie docType -Sniffing in Mozilla M18 (und Netscape 6.0 PR3) funktioniert. Safaris docType Sniffing Code wurde seit der ersten öffentlichen Beta auch stark geändert. Dieses Dokument enthält keine Verhaltensweisen früher als Version V73, auch 0,9 genannt.
Der docType -Schnüffelcode vor Konqueror3.5 scheint aus einer frühen Version von Safari zu stammen. Konqueror passt jetzt zu Safari, und sein DocType Sniffing Code stammt von Mozilla.
Wie aus der Tabelle aus hervorgeht, wechselt das Dokument der Opera DocType von einem regulären IE-ähnlich zu einem Mozilla-ähnlichen, obwohl die Opera9.5 und 9.6 auf dem Weg nach hinten sind. In der Zwischenzeit wurde das Layoutverhalten des Opera -Quirk -Modus vom Nachahmungsmodus von IE6 in den Quirk -Modus von Mozilla umgestellt.
Diese Schritte sind durch die Flussdiagramme in PDF- und PNG -Formaten zu sehen.
Vielen Dank an Simon Pieters, Simon Pieters und Anne Van Kesteren, die mir geholfen haben, die Mustertische und ihre Kommentare für verschiedene Opernversionen zu korrigieren. Vielen Dank an Simon Pieters für das weitere IE8 -Flowdiagramm.