A comutação de modo incluída neste artigo é adequada para o Firefox e outros navegadores baseados em lagartixas, Safari, Chrome e outros navegadores baseados em webkit, Opera, KonQueror, Internet Explorer para Mac, Internet Explorer para Windows e navegadores com IE embutido. Evite mencionar o nome do mecanismo do navegador e use o nome do navegador mais conhecido do motor.
Este artigo se concentra no mecanismo de seleção dos padrões, em vez de registrar o comportamento exato de cada padrão.
Aqui estão vários modos diferentes:
A seleção de padrões do conteúdo de texto/HTML depende do Sniffing Doctype (Sniffing Doctype, discutido mais adiante neste artigo). No IE8, o padrão também depende de outros fatores. No entanto, por padrão no IE8, os padrões de sites não intranets que não são fornecidos na lista negra da Microsoft dependem do tipo de documento.
Não é um exagero enfatizar a diferença no comportamento preciso dos padrões em cada navegador, mesmo que haja uma discussão unificada neste artigo.
No Firefox, Safari, Chrome e Opera, o tipo de conteúdo Application/xhtml+xml http (não um elemento meta ou doctype!) Acionará o padrão XML. No padrão XML, o navegador tenta dar a XML documenta as especificações corretas na medida em que está no navegador.
IE6, 7 e 8 não suportam o aplicativo/xhtml+xml, e o mesmo acontece com o Mac IE5.
No navegador Nokia S60 baseado em Webkit, o tipo de conteúdo Application/XHTML+XML HTTP não pode acionar o esquema XML, porque o foco em jardins de paredes móveis é compatibilidade com o conteúdo irregular. (Os navegadores móveis de estilo antigo não podem usar analisadores XML reais porque o conteúdo fora do padrão foi marcado com XML.)
Como o KonQueror não está totalmente testado, não posso dizer exatamente o que acontecerá neste navegador.
Os padrões que alguns motores não têm nada a ver com o conteúdo da Web. Para completude, eles são mencionados apenas aqui. Opera possui um modo WML2.0. O WebKit no Leopard possui um modo específico para widgets de painel herdado.
Aqui estão os principais efeitos desses padrões:
O padrão de texto/html afeta principalmente o layout CSS. Por exemplo, é uma peculiaridade para que as tabelas não herdem estilos. No modo peculiar de alguns navegadores, o modelo da caixa se torna o modelo de caixa do IE5.5. Este documento não lista todas as peculiaridades do layout.
O modo quase padrão (nos navegadores com esse modo), apenas as células da tabela que contêm imagens diferem no modo alto e padrão.
No esquema XML, os seletores têm diferentes comportamentos sensíveis ao caso. Além disso, regras exclusivas para elementos do corpo HTML não podem ser aplicadas a navegadores mais antigos que não implementam as mais recentes alterações do CSS2.1.
Existem também algumas peculiaridades que afetam a análise HTML e CSS e causam páginas da Web que atendem aos padrões a serem analisados incorretamente. O layout das peculiaridades determina se essas peculiaridades estão ligadas. De qualquer forma, é muito importante entender as principais semelhanças e diferenças de padrões de peculiaridade e padrões padrão no layout e análise de CSS (análise não-HTML).
Algumas pessoas chamam erroneamente o modo de análise rigoroso do modo padrão, o que faz com que as pessoas entendam mal as regras de sintaxe HTML do navegador e a avaliação do navegador sobre a correção das tags. Este não é o caso. Mesmo quando o layout do modo padrão entrar em vigor, o navegador ainda fará sopa de tags (sopa de etiqueta, http://en.wikipedia.org/wiki/Tag_Soup). (Antes de o Netscape6 ser lançado em 2000, Mozilla possuía padrões de análise para aplicar regras de sintaxe HTML. Esses padrões foram abandonados incompatíveis com o conteúdo da Web existente.)
Outro equívoco comum é sobre a análise XHTML. Geralmente, acredita -se que diferentes pacotes sejam obtidas usando o XHTML Doctype. De fato, esse não é o caso. O tipo de conteúdo é o mesmo que o documento analisador e html usado no documento XHTML do texto/html. O que os navegadores se preocupam agora é que o xhtml com texto de documento Text/HTML é apenas uma sopa de tags com brasas (barras extras em todos os lugares).
Somente quando um documento de documento XML (por exemplo: Application/xhtml+xml ou xmapplication/) for usado, o analisador acionará o esquema XML para análise. O analisador neste momento é completamente diferente do analisador HTML.
Enquanto o padrão de peculiaridade é principalmente sobre CSS, alguns são sobre scripts. Por exemplo, no padrão Quirk do Firefox, o atributo HTML ID estabelece referências de objeto ao escopo do script global, como no IE. O impacto dos scripts no IE8 é mais digno de atenção do que outros navegadores.
No esquema XML, algumas APIs de DOM se comportam de maneira completamente diferente porque o comportamento da API DOM do XML não é compatível com o comportamento HTML quando definido.
Os navegadores modernos usam Snifting Doctype para determinar o modo de mecanismo de documentos de texto/HTML. Isso significa que a escolha do esquema é baseada na declaração do tipo de documento (ou ausente) começando com o documento HTML. (Isso não é adequado para documentos usando o tipo de documento XML.)
Declaração de tipo de documento (Doctype) é uma falsificação de sintaxe do SGML. O SGML é uma estrutura de marcação antiga. HTML antes do HTML5 ser definido com base nele. Na especificação HTML4.01, a declaração do tipo de documento descreve as informações da versão do HTML. Embora o nome seja uma declaração de tipo de documento e a especificação HTML 4.01 descreva informações da versão, as declarações do tipo de documento não se aplicam para classificar documentos SGML ou XML como tipos específicos de documentos, mesmo que pareça (por causa do nome). (Mais conteúdo está no apêndice)
Nem a especificação HTML4.01 nem a ISO 8879 (SGML) dizem algo sobre o uso de declarações do tipo de documento como conversão do modo do motor. Doctype Sniffing é baseado na observação. Quando o Sniffing Doctype é projetado, a maioria das peculiaridades não possui declarações ou referências de tipo de documento a DTDs antigos. O HTML5 aceita esse fato e define o Doctype como a única conversão de modo no texto/html.
Uma declaração de documento pré-HTML5 (pré-html5) típica contém (separada por espaços em branco) <! Doctype String, um identificador comum para o elemento raiz (html), uma string pública, um identificador comum de DTD em citações, um possível identificador de sistema (URL) e um personagem para o mesmo dtd. A declaração do tipo de documento está antes do elemento raiz do documento iniciar o rótulo.
Aqui está um guia simples de como escolher Doctype ao criar um novo documento de texto/html:
Eu não recomendo nenhum XHTML doctype, pois o XHTML é considerado prejudicial para usar como texto/html. De qualquer forma, se você optar por usar o XHTML Doctype, observe que a declaração XML faz com que o IE6 (mas não o IE7!) Deixe acionar o padrão Quirk.
Um guia simples para aplicação/xhtml+xml nunca deve usar o doctype. As páginas da Web neste método não são estritamente consistentes com o XHMTL1.0, mas isso não importa. (Por favor, veja o apêndice abaixo)
Uma lista separada depois de introduzida que o IE8 usará a conversão de padrões baseada em meta-elementos como um dos fatores para a seleção de padrões, além do Doctype. (Veja críticas de Ian Hickson, David Baron, David Baron novamente, Robert O'Callahan e Maciej Stachowiak.)
Existem 4 modos para o modo IE8: IE5.5 Quirk, Modo padrão IE7, modo de padrão qualificado IE8 e modo padrão IE8. A seleção do modo depende de dados de vários aspectos: Doctype, Meta elementos, cabeçalhos HTTP, dados regulares de download da Microsoft, domínios LAN, configurações feitas por usuários, configurações feitas por administradores de LAN, modos da estrutura pai (se houver) e botão de exibição compatível com barra de endereço são acionados pelos usuários. (Para outras aplicações incorporadas no motor, o padrão também depende do aplicativo incorporado.)
Felizmente, o IE8 geralmente usa Doctype Sniffing como outros navegadores se ocorrer o seguinte:
Exceto pelos dois casos relacionados ao X-UA compatível, o IE8 realiza Doctype Sniffing como o IE7. A emulação do IE7 (emulação do IE7) é chamada de visualização compatível.
No caso de compatível com X-UA, o IE8 se comporta completamente diferente dos outros navegadores. Eu gostaria de ver o apêndice ou o fluxograma nos formatos PDF e PNG nesta página.
Infelizmente, não há cabeçalho HTTP ou meta-tag para compatível com X-UA e, mesmo com o Doctype apropriado, o IE8 permite que os usuários reduzam acidentalmente a página do modo padrão do IE8 para o modo IE7, que é um modo padrão IE7 simulado. Pior, os administradores da LAN podem fazer o mesmo. A Microsoft também pode na lista negra de todos os nomes de domínio que você usa.
Para lidar com esses efeitos, o Doctype não é suficiente, você precisa de cabeçalho HTTP compatível com X-UA.
O seguinte guia simples é para novos documentos de texto/html que já possuem o modo padrão de acionamento Doctype ou o modo quase padrão em outros navegadores para como escolher o cabeçalho HTTP compatível com X-UA ou a meta tag:
Por favor, não traga Doctype Sniffing para XML.
Doctype Sniffing é resolver um problema de sopa de sopa marcada usando um método de sopa de sopa. Doctype Sniffing é uma abordagem provisória projetada após o lançamento das especificações HTML4 e CSS2, que distingue documentos desatualizados de documentos para combinar comportamentos que seus autores possam esperar.
Ocasionalmente, sugere -se que o Doctype Sniffing no XML para agendar processamento diferente, identificar o vocabulário que está sendo usado ou para ativar recursos. Esta é uma má ideia. A programação e o reconhecimento de vocabulário devem ser baseados no espaço para nome, enquanto a ativação de recursos deve ser baseada em instruções ou elementos explícitos de processamento.
Toda a idéia de boa formação é introduzir a análise DTD que permite o XML e promover documentos livres de Doctype. Em casos formais, dois documentos XML têm a mesma forma canônica e o aplicativo os processa de maneira diferente (e não porque não há escolha de lidar com entidades externas), o aplicativo pode ser quebrado. Na prática, se dois documentos XML causarem o mesmo conteúdo a ser relatado (os QNames ignoram) ao processador de conteúdo Sax2 e o aplicativo processa o documento de maneira diferente, o aplicativo poderá ser quebrado. Considerando que, como autor da web, é impossível acreditar que todos analisarão suas páginas usando o XMLProcessors que abordam entidades adicionais (mesmo que alguns navegadores pareçam fazê -lo, pois mapeiam certos identificadores públicos para um DTD que define a entidade com um liderança de que os frequentes), a inserção de Doctype em XML para uso na web é sem sentido e frequentemente os hábitos para o LEDERS para o LEDERS para o LEDERS para o uso de um pouco de uso. (Você ainda usa o recurso de substituição do DTD do validador W3C para verificar um DTD, embora o validador W3C diga que o resultado é apenas temporário. Ou melhor ainda, você pode usar a verificação de NG relaxante, que não polui o documento referenciado pelo padrão.
Além disso, quando uma especificação de baixo nível define duas coisas iguais, uma especificação de alto nível não deve tentar dar a eles significados diferentes. Por favor, considere <! Doctype html public -// w3c // dtd xhtml 1.0 stry // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>. Se o identificador público for excluído, o mesmo DTD ainda será especificado; portanto, o Sistema Doctype <! Eles deveriam ser cheirados de maneira diferente? Pode ser uma teoria adicional. Suponha que cópia para exemplo.com um DTD chamado Foobar.dtd: <! Doctype HTML System http://example.com/foobar.dtd>. Como farejar isso? Deve ter o mesmo significado. Até todo o DTD pode ser publicado no documento.
Em outras palavras, se houver #include foo.h, você não deve vincular nenhuma magia negra ao nome foo.h, pois deve permitir a cópia do conteúdo de foo.h no documento ou copiar foo.h em bar.h e representar #include bar.h.
A razão pela qual não estou preocupado com o HTML e o SGML construindo os mesmos parâmetros é que o navegador da Web não usa um analisador SGML real para analisar o HTML, então acho que é inútil disfarçar como SGML para processamento. De qualquer forma, se você ainda não acredita, leia o artigo de W. Eliot Kimber sobre este assunto comp.text.sgml
Na tabela a seguir, o padrão de peculiaridade, o padrão padrão e os quase-critérios são representados como q, s e a, respectivamente. Quando o navegador possui apenas dois modos, o modo padrão é marcado como S se a altura da linha da célula da tabela for consistente com o desempenho do modo padrão da Mozilla e o modo padrão for marcado como se a altura da linha da célula da tabela for consistente com o desempenho do modo padrão da mozilla.
Observe que a porção XHTML usando o modelo de conteúdo XML é renderizada no modo XML.
O objetivo desta tabela não é dizer que todos os doctypes da tabela são opções razoáveis para criar novas páginas. O objetivo desta tabela é mostrar em que tipo de dados meus recomendações são baseados.
Os seguintes símbolos de abreviação são usados para títulos de colunas:
| Doctype | NS6 | Velho Moz | Moz & Safari & Opera10 e Html5 | Opera9.0 | IE8 & Opera9.5 | IE7 & Opera7.10 | IE6 & Opera7.0 | Mac ie5 | KONQ3.2 |
|---|---|---|---|---|---|---|---|---|---|
| Nenhum | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html público -// w3c // dtd html 3.2 final // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html público -// w3c // dtd html 4.0 // en> | S | S | S | S | S | UM | UM | UM | UM |
| <! Doctype Html público -// w3c // dtd html 4.01 // en> | S | S | S | S | S | UM | UM | Q | UM |
| <! Doctype Html público -// w3c // dtd html 4.0 // pt http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | UM | UM | UM | UM |
| <! Doctype Html público -// w3c // dtd html 4.01 // pt http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | UM | UM | UM | UM |
| <! Doctype Html público -// w3c // dtd html 4.0 transição // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html público -// w3c // dtd html 4.01 transição // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html público -// w3c // dtd html 4.01 transição // pt http://www.w3.org/tr/html4/loose.dtd> | S | S | UM | UM | UM | UM | UM | UM | Q |
| <! Doctype Html público -// w3c // dtd html 4.01 transição // pt http://www.w3.org/tr/1999/rec-html401-19991224/loose.dtd> | Q | S | UM | UM | UM | UM | UM | UM | Q |
| <! Doctype Html público -// w3c // dtd html 4.0 transição // pt http://www.w3.org/tr/html4/loose.dtd> | Q | Q | Q | Q | UM | UM | UM | UM | Q |
| <! Doctype html public -// w3c // dtd xhtml 1.1 // en http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd> | S | S | S | S | S | UM | UM | UM | UM |
| <! 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 | UM | UM | UM | UM |
| <! Doctype html public -// w3c // dtd xhtml 1.0 stric // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | S | S | S | S | S | UM | UM | UM | UM |
| <! http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | UM | UM | UM | UM | UM | UM | Q |
| <? xml versão = 1.0 Encoding = utf -8?> <! | S | S | S | S | S | UM | Q | UM | Q |
| <? xml versão = 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 | UM | Q | UM | Q |
| <? xml versão = 1.0 coding = utf -8?> <! doctype html public -// w3c // dtd xhtml 1.0 rigoroso // en pg http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | S | S | S | S | S | UM | Q | UM | Q |
| <? xml versão = 1.0 coding = utf -8?> <! doctype html public -// w3c // dtd xhtml 1.0 transitional // pt http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | UM | UM | UM | UM | Q | UM | 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 Idioma // en> | Q | S | S | S | S | UM | UM | UM | 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 Idioma // en> | S | S | S | S | S | UM | UM | UM | Q |
| <! Doctype html> | Q | S | S | S | S | UM | UM | UM |
O código de fungamento Doctype de Moziila foi modificado significativamente em outubro de 2000, setembro de 2001 e junho de 2002. Os estados estabelecidos por Mozilla (e Netscape 6.x) descritos neste documento podem ser vistos em ftp.mozilla.org desde 2000.10.19. Este documento não aborda como o Sniffing Doctype funciona em Mozilla M18 (e Netscape 6.0 PR3). O código Sniffing Doctype do Safari também foi bastante modificado desde a primeira versão beta pública. Este documento não inclui comportamentos antes da versão V73, também chamado de 0.9.
O código Sniffing Doctype antes do KonQueror3.5 parece vir de uma versão inicial do Safari. O KonQueror agora corresponde ao Safari, e seu código Sniffing Doctype vem de Mozilla.
Como pode ser visto na tabela, o Sniffing Doctype da Opera está mudando de um IE regular para um mozilla, embora o Opera9.5 e 9,6 estejam a caminho. Enquanto isso, o comportamento do layout do modo Opera Quirk foi alterado do modo peculiar do IE6 para o modo peculiar de Mozilla.
Essas etapas podem ser vistas através dos fluxogramas nos formatos PDF e PNG.
Graças a Simon Pieters, Simon Pieters e Anne Van Kesteren por me ajudarem a corrigir as tabelas de padrões e seus comentários para várias versões da ópera. Agradeço a Simon Pieters por fazer outro fluxograma do IE8.