Modo peculiares - Quirks mode

Na computação , o modo quirks se refere a uma técnica usada por alguns navegadores da web para manter a compatibilidade com versões anteriores de páginas da web projetadas para navegadores da web antigos, em vez de cumprir estritamente os padrões W3C e IETF no modo de padrões .

Visão geral

A estrutura e a aparência de uma página da web são descritas por uma combinação de duas linguagens padronizadas:

  • HTML , uma linguagem de marcação projetada para uso na web, que descreve a estrutura e o conteúdo da página; e
  • CSS , uma linguagem de folha de estilo generalizada , que especifica como a página deve ser renderizada em várias mídias (estilos visuais para exibição na tela, estilos de impressão a serem usados ​​ao imprimir a página, estilos auditivos a serem usados ​​quando a página é lida em voz alta por um leitor de tela , etc. .).

No entanto, a maioria dos navegadores mais antigos não implementou totalmente as especificações para esses idiomas ou foi desenvolvida antes da finalização das especificações (o Microsoft Internet Explorer versão 5.0 para a plataforma Macintosh , lançado em 2000, foi o primeiro navegador principal com suporte total para CSS Nível 1, por exemplo). Como resultado, muitas páginas da web mais antigas foram construídas para depender de implementações incompletas ou incorretas dos navegadores mais antigos e só serão renderizadas conforme pretendido quando manipuladas por esse navegador.

O suporte para HTML e CSS padronizados nos principais navegadores da web aumentou significativamente, mas o grande corpo de documentos legados que dependem das peculiaridades de navegadores mais antigos representa um obstáculo para desenvolvedores de navegadores, que desejam melhorar seu suporte para HTML e CSS padronizados, mas também desejam manter compatibilidade com versões anteriores de páginas mais antigas e não padronizadas. Além disso, muitas novas páginas da web continuam a ser criadas da maneira mais antiga, uma vez que as soluções alternativas de compatibilidade introduzidas pelos desenvolvedores de navegador significam que uma compreensão dos métodos padronizados não é estritamente necessária.

Para manter a compatibilidade com o maior número possível de páginas da web, os navegadores modernos são geralmente desenvolvidos com vários modos de renderização: no "modo padrão" as páginas são renderizadas de acordo com as especificações HTML e CSS, enquanto no "modo peculiar" são feitas tentativas de emular o comportamento de navegadores mais antigos. Alguns navegadores (aqueles baseados em Mozilla 's Gecko motor de renderização, ou Internet Explorer 8 no modo estrito , por exemplo) também usam um modo 'quase normas' que tenta compromisso entre os dois, implementando uma peculiaridade de célula da tabela de dimensionamento enquanto em conformidade outra forma com as especificações.

Diferenças de modo e exemplos

Uma diferença proeminente entre peculiaridades e modos de padrões é o tratamento do bug do modelo de caixa do Internet Explorer CSS . Antes da versão 6, o Internet Explorer usava um algoritmo para determinar a largura da caixa de um elemento que conflitava com o algoritmo detalhado na especificação CSS e, devido à popularidade do Internet Explorer, muitas páginas foram criadas com base nesse algoritmo não padrão. A partir da versão 6, o Internet Explorer usa o algoritmo da especificação CSS ao renderizar no modo padrão e usa o algoritmo anterior não padrão ao renderizar no modo quirks.

Outra diferença notável é o alinhamento vertical de certos tipos de conteúdo embutido; muitos navegadores mais antigos alinhavam as imagens com a borda inferior da caixa que os contém, embora a especificação CSS exija que elas sejam alinhadas com a linha de base do texto dentro da caixa. No modo padrão, os navegadores baseados no Gecko serão alinhados à linha de base e no modo quirks eles serão alinhados na parte inferior.

Além disso, muitos navegadores mais antigos não implementavam a herança de estilos de fonte nas tabelas; como resultado, os estilos de fonte tiveram que ser especificados uma vez para o documento como um todo e novamente para a tabela, embora a especificação CSS exija que o estilo da fonte seja herdado na tabela. Se os tamanhos das fontes forem especificados usando unidades relativas, um navegador compatível com os padrões herdará o tamanho da fonte básica e, em seguida, aplicará o tamanho da fonte relativa dentro da tabela: por exemplo, uma página que declarou um tamanho da fonte básica de 80% e uma fonte da tabela tamanho de 80% (para garantir um tamanho de 80% em navegadores que não herdam adequadamente os tamanhos de fonte), em um navegador compatível com os padrões, exibiria tabelas com um tamanho de fonte de 64% (80% de 80%). Como resultado, os navegadores normalmente não herdam os tamanhos das fontes nas tabelas no modo quirks.

Modo quase padrão

Um terceiro modo de compatibilidade conhecido como "modo quase padrão" ou "modo estrito", que mantém o dimensionamento vertical "tradicional" das células da tabela de acordo com a especificação CSS2 , foi implementado nestes navegadores: Safari, Opera 7.5 (e posterior) , todos os navegadores baseados no Gecko desde 1.0.1 (como Firefox) e Internet Explorer 8.

A renderização do modo "quase padrões" corresponde ao modo "padrões" em todos os detalhes, exceto em um. O layout das imagens dentro das células da tabela é tratado da mesma forma que o modo "peculiaridades" opera, o que é bastante consistente com navegadores legados como o Internet Explorer 7 (e anteriores). Isso significa que layouts de imagens fatiadas em tabelas têm menos probabilidade de desmoronar nos navegadores quando estão no modo "peculiaridades" ou "quase padrões", em vez do modo "padrões".

Acionando diferentes modos de renderização

Na maioria das vezes, os navegadores determinam qual modo de renderização usar com base na presença de uma Declaração de tipo de documento na página; se um DOCTYPE completo estiver presente, o navegador usará o modo padrão e, se estiver ausente, o navegador usará o modo quirks. Por exemplo, uma página da web que comece com o seguinte DOCTYPE acionaria o modo de padrões:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

O seguinte DOCTYPE é sintaticamente inválido, contendo a palavra-chave do identificador público "PUBLIC", mas nenhum identificador público (indicando o nome da versão do HTML em uso) e nenhum identificador de sistema URL de uma Definição de Tipo de Documento HTML . Isso acionaria o modo quirks:

<!DOCTYPE html PUBLIC>

Além disso, uma página da web que não inclui um DOCTYPE será renderizada no modo quirks.

Uma notável exceção a isso é Microsoft 's Internet Explorer 6 navegador, que irá processar uma página em peculiaridades modo se o DOCTYPE é precedida por um XML prólogo, independentemente de um DOCTYPE completo é especificado. Assim, uma página XHTML que começa com o código a seguir seria renderizada no modo quirks pelo IE 6:

<?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">

O texto acima é útil na medida em que pode ser usado para acionar o modo peculiaridades apenas no IE 6.

O modo peculiar em qualquer versão do IE também será acionado se algo preceder o DOCTYPE. Por exemplo, se um documento de hipertexto contém um comentário, espaço ou qualquer tag antes da declaração DOCTYPE, o IE usará o modo quirks:

<!-- This comment will put IE 6, 7, 8, and 9 in quirks mode -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

O problema com a declaração XML foi corrigido na versão 7 do Internet Explorer, em que o prólogo XML é simplesmente ignorado. No entanto, para compatibilidade máxima com navegadores da web existentes e mais antigos, o World Wide Web Consortium , que mantém a especificação XHTML, sugere que os autores de documentos XHTML podem considerar a omissão da declaração XML.

Comparação de tipos de documentos

Henri Sivonen compilou uma lista de vários tipos de documentos e como eles são tratados nos navegadores mais comuns, mostrando se as páginas são renderizadas em Q uirks, S ORMAS, ou A uase modo de padrões. O critério usado para o "modo Quase padrão" é a renderização da altura da célula da tabela não padrão. Esta tabela se aplica ao conteúdo veiculado com o Content-Type text / html. O conteúdo veiculado com o aplicativo Content-Type / xhtml + xml é renderizado no modo Padrões no Chrome, Firefox, Internet Explorer 9, Safari e Opera. Os Internet Explorer 6, 7 e 8 não oferecem suporte ao aplicativo Content-Type / xhtml + xml.

Doctype NS6 Mozilla 0.9.5-1.0 IE 8+
Firefox
Chrome
Safari
Opera 7.5+
Netscape
7.0 Mozilla 1.0.1+
Konq 3.5+
HTML5 spec
IE 7
Opera 7.10
IE 6
Opera 7.0
Mac IE 5 Konq 3.2
Nenhum Q Q Q Q Q Q Q
HTML 2
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
Q Q Q Q Q Q Q
HTML 3
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN//">
Q Q Q Q Q Q Q
HTML 3.2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
Q Q Q Q Q Q Q
HTML 4.01
Rigoroso com identificador de sistema
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
S S S UMA UMA UMA UMA
sem identificador de sistema
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
S S S UMA UMA Q UMA
Transitório com identificador de sistema
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
S S UMA UMA UMA UMA Q
sem identificador de sistema
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Q Q Q Q Q Q Q
HTML5
<!DOCTYPE html>
Q S S UMA UMA UMA ?
XHTML Básico
com identificador de sistema e sem declaração XML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
S S S UMA UMA UMA UMA
XHTML 1.0
Rigoroso com identificador de sistema e declaração XML
<?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 UMA Q UMA Q
com identificador de sistema e sem uma declaração XML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
S S S UMA UMA UMA UMA
sem identificador de sistema e sem uma declaração XML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
S S S UMA UMA UMA ?
Transitório com identificador de sistema e com declaração XML
<?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 UMA UMA Q UMA Q
com identificador de sistema e sem uma declaração XML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
S S UMA UMA UMA UMA Q
sem identificador de sistema e sem uma declaração XML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
S S UMA UMA UMA UMA ?
XHTML 1.1
com identificador de sistema e uma declaração XML
<?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 UMA Q UMA Q
com identificador de sistema e sem declaração XML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
S S S UMA UMA UMA UMA
Doctype NS6 Mozilla 0.9.5-1.0 IE 8+
Firefox
Chrome
Safari
Opera 7.5+
Netscape
7.0 Mozilla 1.0.1+
Konq 3.5+
HTML5 spec
IE 7
Opera 7.10
IE 6
Opera 7.0
Mac IE 5 Konq 3.2

Verificação de modo

Na maioria dos navegadores, a extensão Document Object Model document.compatMode indica o modo de renderização da página atual. No modo padrão e no modo quase padrão, document.compatMode contém o valor "CSS1Compat", enquanto no modo quirks é igual a "BackCompat".

Além disso, no Mozilla Firefox e no Opera, o modo de renderização em uso para uma determinada página é indicado na caixa de informações 'Informações da página'.

Referências

links externos