La commutation de mode incluse dans cet article convient à Firefox et à d'autres navigateurs basés sur Gecko, Safari, Chrome et d'autres navigateurs basés sur WebKit, Opera, Konqueror, Internet Explorer pour Mac, Internet Explorer pour Windows et navigateurs avec IE intégré. Évitez de mentionner le nom du moteur du navigateur et utilisez plutôt le nom du navigateur le plus connu du moteur.
Cet article se concentre sur le mécanisme de sélection des modèles plutôt que sur l'enregistrement du comportement exact de chaque modèle.
Voici une variété de modes différents:
La sélection de motifs du contenu texte / html dépend du reniflement doctype (reniflement doctype, discuté plus loin dans cet article). Dans IE8, le modèle dépend également d'autres facteurs. Cependant, par défaut dans IE8, les modèles de sites non intranet qui ne sont pas fournis sur la liste noire de Microsoft dépendent du type de document.
Ce n'est pas une exagération de souligner la différence dans le comportement précis des modèles dans chaque navigateur, même s'il y a une discussion unifiée dans cet article.
Dans Firefox, Safari, Chrome et Opera, le type de contenu Application / XHTML + XML HTTP (pas un méta élément ou doctype!) Déclenchera le modèle XML. Dans le modèle XML, le navigateur essaie de donner aux documents XML les spécifications correctes dans la mesure où elle se trouve dans le navigateur.
IE6, 7 et 8 ne prennent pas en charge l'application / xhtml + xml, tout comme Mac IE5.
Dans le navigateur Nokia S60 basé sur WebKit, le type de contenu Application / XHTML + XML HTTP ne peut pas déclencher le schéma XML car l'accent dans les jardins à paroi mobile est la compatibilité avec un contenu irrégulier. (Les navigateurs mobiles à l'ancienne ne peuvent pas utiliser de vrais analyseurs XML car le contenu non standard a été marqué XML.)
Étant donné que Konqueror n'est pas entièrement testé, je ne peux pas dire exactement ce qui se passera dans ce navigateur.
Les modèles que certains moteurs n'ont rien à voir avec le contenu Web. Pour l'exhaustivité, ils ne sont mentionnés que ici. Opera a un mode WML2.0. WebKit sur Leopard a un mode spécifique pour les widgets de tableau de bord hérités.
Voici les principaux effets de ces modèles:
Le modèle texte / HTML affecte principalement la disposition CSS. Par exemple, c'est une bizarrerie pour les tables de ne pas hériter de styles. En mode bizarrerie de certains navigateurs, le modèle de boîte devient le modèle de boîte de IE5.5. Ce document ne répertorie pas toutes les bizarreries de mise en page.
Mode quasi standard (dans les navigateurs avec ce mode), seules les cellules de table contenant des images diffèrent en mode haut et standard.
Dans le schéma XML, les sélecteurs ont différents comportements sensibles à la casse. De plus, des règles uniques pour les éléments du corps HTML ne peuvent pas être appliquées aux navigateurs plus anciens qui n'implémentent pas les dernières modifications CSS2.1.
Il y a aussi certaines bizarreries qui affectent l'analyse HTML et CSS et entraîneront mal l'analyse des pages Web qui répondent à des normes. La disposition des bizarreries détermine si ces bizarreries sont activées. Dans tous les cas, il est très important de comprendre les principales similitudes et différences des modèles de bizarrerie et des modèles standard dans la disposition et l'analyse CSS (analyse non-HTML).
Certaines personnes appellent à tort le mode d'analyse strict en mode standard, ce qui fait mal comprendre les règles de syntaxe HTML applicables du navigateur et l'évaluation par le navigateur de l'exactitude des étiquettes. Ce n'est pas le cas. Même lorsque la disposition du mode standard prend effet, le navigateur fera toujours des tags (tag soupe, http://en.wikipedia.org/wiki/tag_soup) du travail de correction. (Avant la sortie de Netscape6 en 2000, Mozilla avait des modèles d'analyse pour appliquer les règles de syntaxe HTML. Ces modèles ont été abandonnés incompatibles avec le contenu Web existant.)
Une autre idée fausse commune concerne l'analyse XHTML. On pense généralement que différents parses sont obtenus à l'aide de Doctype XHTML. En fait, ce n'est pas le cas. Le type de contenu est le même que le document Parser et HTML utilisé dans le document XHTML de Text / HTML. Ce dont les navigateurs se soucient en ce moment, c'est que XHTML avec texte de type de document / HTML n'est qu'une soupe d'étiquette avec des croûtes (des barres obliques supplémentaires partout).
Ce n'est que lorsqu'un document de type de document XML (par exemple: Application / XHTML + XML ou XMApplication /) est utilisé, l'analyseur déclenchera le schéma XML pour l'analyse. L'analyseur à ce moment est complètement différent de l'analyseur HTML.
Bien que le motif de bizarrerie concerne principalement CSS, certains concernent les scripts. Par exemple, dans le modèle Quirk de Firefox, l'attribut ID HTML établit des références d'objets à la portée du script global comme dans IE. L'impact des scripts dans IE8 est plus digne d'attention que les autres navigateurs.
Dans le schéma XML, certaines API DOM se comportent complètement différemment parce que le comportement de l'API DOM de XML n'est pas compatible avec le comportement HTML lorsqu'il est défini.
Les navigateurs modernes utilisent des reniflements Doctype pour déterminer le mode moteur des documents texte / HTML. Cela signifie que le choix du schéma est basé sur la déclaration de type de document (ou manquant) à commencer par le document HTML. (Ceci ne convient pas aux documents à l'aide du type de document XML.)
La déclaration de type de document (doctype) est une fausse syntaxe de SGML. SGML est un cadre de balisage à l'ancienne. HTML avant HTML5 est défini sur la base de celui-ci. Dans la spécification HTML4.01, la déclaration de type de document décrit les informations de version de HTML. Bien que le nom soit une déclaration de type de document et que la spécification HTML 4.01 décrit les informations de la version, les déclarations de type de documents ne s'appliquent pas à la classement des documents SGML ou XML en tant que types de documents spécifiques, même s'il ressemble (en raison du nom). (Plus de contenu est en annexe)
Ni la spécification HTML4.01 ni ISO 8879 (SGML) ne disent quoi que ce soit sur l'utilisation des déclarations de type de documents comme conversion en mode moteur. Le reniflement doctype est basé sur l'observation. Lorsque le reniflement du doctype est conçu, la plupart des bizarreries n'ont pas de déclarations de type de documents ou de références aux anciens DTD. HTML5 accepte ce fait et définit Doctype comme la seule conversion de mode dans le texte / HTML.
Une déclaration de type de document typique pré-HTML5 (pré-HTML5) contient (séparée par des blancs) <! Doctype String, un identifiant commun pour l'élément racine (HTML), une chaîne publique, un identifiant commun DTD dans les citations, un identifiant de système possible (URL) et un caractère DTD pour le même DTD. La déclaration de type de document est avant que l'élément racine du document ne démarre l'étiquette.
Voici un guide simple sur la façon de choisir Doctype lors de la création d'un nouveau document texte / HTML:
Je ne recommande aucun doctype xhtml, car xhtml est considéré comme nocif à utiliser comme texte / html. Quoi qu'il en soit, si vous choisissez d'utiliser XHTML Doctype, notez que la déclaration XML provoque IE6 (mais pas IE7!) Pour déclencher le motif de bizarrerie.
Un guide simple de l'application / xhtml + xml est d'utiliser Doctype. Les pages Web sous cette méthode ne sont pas strictement cohérentes avec XHMTL1.0, mais cela n'a pas d'importance. (Veuillez consulter l'annexe ci-dessous)
Une liste séparée une fois introduite que IE8 utilisera la conversion de motifs basée sur les méta-éléments comme l'un des facteurs de sélection de motifs, en plus de Doctype. (Voir les critiques de Ian Hickson, David Baron, David Baron Again, Robert O'Callahan et Maciej Stachowiak.)
Il y a 4 modes pour IE8: IE5.5 Mode Quirk, Mode standard IE7, mode Qual-standard IE8 et mode standard IE8. La sélection du mode dépend des données de plusieurs aspects: doctype, éléments méta-éléments, en-têtes HTTP, données de téléchargement régulières à partir de Microsoft, domaines LAN, paramètres fabriqués par les utilisateurs, paramètres fabriqués par les administrateurs LAN, les modes du framework parent (le cas échéant) et la vision compatible de la barre d'adresse sont déclenchées par les utilisateurs. (Pour les autres applications intégrées dans le moteur, le modèle dépend également de l'application intégrée.)
Heureusement, IE8 utilisera généralement le reniflement doctype comme les autres navigateurs si ce qui suit se produit:
À l'exception des deux cas concernant X-UA compatible, IE8 effectue un reniflement doctype comme IE7. L'émulation IE7 (émulation IE7) est appelée vue compatible.
Dans le cas de la compatible X-UA, IE8 se comporte complètement différemment des autres navigateurs. Je voudrais voir l'annexe ou l'organigramme dans les formats PDF et PNG sur cette page.
Malheureusement, il n'y a pas d'en-tête HTTP ou de balise META pour compatible X-UA, et même avec le doctype approprié, IE8 permet aux utilisateurs de réduire accidentellement la page du mode standard d'IE8 en mode IE7, qui est un mode standard SIMULIER IE7. Pire, les administrateurs LAN peuvent faire de même. Microsoft peut également liste noire tous les noms de domaine que vous utilisez.
Pour gérer ces effets, Doctype ne suffit pas, vous avez besoin d'une en-tête HTTP compatible X-UA et d'une balise META.
Le guide simple suivant concerne les nouveaux documents texte / HTML qui ont déjà le mode standard Doctype Trigger ou le mode quasi standard dans d'autres navigateurs pour choisir une en-tête HTTP ou META compatible X-UA:
Veuillez n'apporter pas de reniflement doctype à XML.
Le reniflement des doctype consiste à résoudre un problème de soupe de chaudrée étiquetée à l'aide d'une méthode de type soupe à la chaudrée. Le reniflement des doctype est une approche provisoire conçue après la libération de spécifications HTML4 et CSS2, qui distingue les documents obsolètes des documents pour faire correspondre les comportements auxquels leurs auteurs pourraient s'attendre.
Parfois, il est suggéré d'utiliser le reniflement doctype sur XML pour planifier différents traitements, identifier le vocabulaire utilisé ou pour activer les fonctionnalités. C'est une mauvaise idée. La planification et la reconnaissance du vocabulaire doivent être basées sur l'espace de noms, tandis que l'activation des fonctionnalités doit être basée sur des instructions ou des éléments de traitement explicites.
L'idée de bien formée est d'introduire l'analyse DTD qui permet XML et de promouvoir des documents sans doctype. Dans les cas formels, deux documents XML ont le même formulaire canonique et l'application les traite différemment (et non parce qu'il n'est pas le choix de gérer les entités externes), l'application peut être rompue. Dans la pratique, si deux documents XML provoquent la déclaration du même contenu (QNames ignore) au processeur de contenu SAX2 et que l'application traite le document différemment, l'application peut être rompue. Étant donné qu'en tant qu'auteur Web, il est impossible de croire que tout le monde analyse ses pages en utilisant XMLProcessors qui s'adressent à des entités supplémentaires (même si certains navigateurs semblent le faire, car ils cartographient certains identifiants publics à un DTD qui définit l'entité avec un abrégé), inservant les doctype pour les docype pour une utilisation dans le Web est inlessie et entraîne souvent des cargos de doctype. (Vous utilisez toujours la fonction de remplacement DTD du validateur W3C pour vérifier un DTD, bien que le validateur W3C dise que le résultat n'est que temporaire. Ou mieux encore, vous pouvez utiliser la vérification Ng relaxante, qui ne pollue pas le document référencé par le modèle.)
De plus, lorsqu'une spécification de bas niveau définit deux choses égales, une spécification de haut niveau ne devrait pas essayer de leur donner des significations différentes. Veuillez considérer <! Doctype html public - // w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>. Si l'identifiant public est supprimé, le même DTD est toujours spécifié, donc doctype <! Doctype html System http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> signifie le même que le doctype précédent. Devraient-ils être reniflés différemment? Il peut s'agir d'une plus grande théorie. Supposons une copie sur example.com un dtd appelé foobar.dtd: <! Doctype html système http://example.com/foobar.dtd>. Comment renifler cela? Il devrait avoir la même signification. Même l'ensemble du DTD peut être publié dans le document.
En d'autres termes, s'il y a #include foo.h, vous ne devez pas lier la magie noire au nom foo.h, car il devrait permettre de copier le contenu de foo.h dans le document ou de copier foo.h dans Bar.h et de représenter #include bar.h.
La raison pour laquelle je ne m'inquiète pas pour la construction de HTML et SGML les mêmes paramètres est que le navigateur Web n'utilise pas un véritable analyseur SGML pour analyser HTML, donc je pense qu'il est inutile de se déguiter comme SGML pour le traitement. Quoi qu'il en soit, si vous ne le croyez pas encore, veuillez lire l'article de W. Eliot Kimber sur cette matière comp.text.sgml
Dans le tableau suivant, le modèle de bizarrerie, le modèle standard et les quasi-critères sont représentés respectivement comme q, s et a. Lorsque le navigateur n'a que deux modes, le mode standard est marqué comme S si la hauteur de ligne de la cellule de table est cohérente avec les performances en mode standard de Mozilla, et que le mode standard est marqué comme une hauteur de ligne de la cellule de table est cohérente avec les performances en mode standard de Mozilla.
Veuillez noter que le service XHTML à l'aide du modèle de contenu XML est rendu en mode XML.
Le but de ce tableau n'est pas de dire que tous les doctypes du tableau sont des choix raisonnables pour créer de nouvelles pages. Le but de ce tableau est de montrer sur quel type de données sur mes recommandations.
Les symboles d'abréviation suivants sont utilisés pour les titres de colonne:
| Doctype | Ns6 | Old Moz | Moz & safari & opera10 & html5 | Opéra9.0 | IE8 & Opera9.5 | IE7 & Opera7.10 | IE6 & Opera7.0 | Mac ie5 | Konq3.2 |
|---|---|---|---|---|---|---|---|---|---|
| Aucun | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html public - // w3c // dtd html 3.2 final // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html public - // w3c // dtd html 4.0 // en> | S | S | S | S | S | UN | UN | UN | UN |
| <! Doctype Html public - // w3c // dtd html 4.01 // en> | S | S | S | S | S | UN | UN | Q | UN |
| <! Doctype Html public - // w3c // dtd html 4.0 // en http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | UN | UN | UN | UN |
| <! Doctype Html public - // w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | UN | UN | UN | UN |
| <! 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 | UN | UN | UN | UN | UN | UN | Q |
| <! Doctype Html public - // w3c // dtd html 4.01 transitional // en http://www.w3.org/tr/1999/rec-html401-19991224/loose.dtd> | Q | S | UN | UN | UN | UN | UN | UN | Q |
| <! Doctype Html public - // w3c // dtd html 4.0 transitional // en http://www.w3.org/tr/html4/loose.dtd> | Q | Q | Q | Q | UN | UN | UN | UN | Q |
| <! Doctype html public - // w3c // dtd xhtml 1.1 // en http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd> | S | S | S | S | S | UN | UN | UN | UN |
| <! 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 | UN | UN | UN | UN |
| <! 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 | UN | UN | UN | UN |
| <! Doctype html public - // w3c // dtd xhtml 1.0 transitional // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | UN | UN | UN | UN | UN | UN | Q |
| <? xml version = 1.0 Encoding = 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 | UN | Q | UN | Q |
| <? xml version = 1.0 Encoding = 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 | UN | Q | UN | Q |
| <? Xml Version = 1.0 Encoding = 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 | UN | Q | UN | Q |
| <? Xml Version = 1.0 Encoding = UTF-8?> <! Doctype html public - // w3c // dtd xhtml 1.0 transitional // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | UN | UN | UN | UN | Q | UN | 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 Marquage Langue // en> | Q | S | S | S | S | UN | UN | UN | 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 // Marquage d'hypertexte DTD Langue // en> | S | S | S | S | S | UN | UN | UN | Q |
| <! Doctype html> | Q | S | S | S | S | UN | UN | UN |
Le code de reniflement de Doctype de Moziila a été considérablement modifié en octobre 2000, septembre 2001 et juin 2002. Les États créés par Mozilla (et Netscape 6.x) décrits dans ce document peuvent être vus sur FTP.Mozilla.org depuis 2000.10.19. Ce document ne explique pas comment fonctionne Doctype Sniffing dans Mozilla M18 (et Netscape 6.0 PR3). Le code de reniflement Doctype de Safari a également été considérablement modifié depuis la première version bêta publique. Ce document n'inclut pas les comportements plus tôt que la version V73, également appelée 0.9.
Le code de reniflement doctype avant Konqueror3.5 semble provenir d'une première version de Safari. Konqueror correspond désormais à Safari, et son code de reniflement doctype vient de Mozilla.
Comme on peut le voir depuis la table, le reniflement doctype de l'opéra passe d'un IE régulier à un Mozilla, bien que les opéra9,5 et 9.6 soient en route. Pendant ce temps, le comportement de mise en page du mode Quirk Opera est passé de l'imitation du mode Quirk d'IE6 au mode Quirk de Mozilla.
Ces étapes peuvent être vues à travers les organigrammes dans les formats PDF et PNG.
Merci à Simon Pieters, Simon Pieters et Anne Van Kesteren pour m'avoir aidé à corriger les tables de modèle et leurs commentaires pour diverses versions d'opéra. Merci à Simon Pieters d'avoir fait un autre organigramme IE8.