Menu

Doctype em HTML: o que <!DOCTYPE html> faz e onde fica

<!DOCTYPE html> é a primeira linha de todo documento HTML. Ele diz ao navegador para renderizar a página no modo padrão, e não no modo quirks. Veja a sintaxe, o que os doctypes antigos provocam e como verificar o modo.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

O que é <!DOCTYPE html>

<!DOCTYPE html> é a declaração de doctype: a primeira linha de um arquivo HTML, antes da tag <html>. Ela diz ao navegador "este é um documento HTML moderno", e o navegador responde renderizando a página no modo padrão, seguindo as especificações atuais de HTML e CSS.

Essa única linha é o doctype inteiro do HTML5. Ela não tem tag de fechamento e nada mais vai dentro dela.

Regras de sintaxe

  • Ele vem primeiro. Só espaços em branco e comentários podem aparecer antes dele. Qualquer texto ou tag antes do doctype faz o navegador ignorá-lo.
  • Ele não diferencia maiúsculas de minúsculas. <!DOCTYPE html> e <!doctype html> são idênticos. Escolha um estilo e mantenha.
  • Ele não é um elemento. Não existe </!DOCTYPE>, e você não pode adicionar uma class nem outros atributos a ele.
  • A palavra depois de DOCTYPE precisa ser html. <!DOCTYPE html5> não é uma versão mais nova; o navegador trata essa página como se não tivesse um doctype válido.
  • Um por documento. Páginas montadas a partir de vários arquivos (templates, includes) ainda geram um único doctype no topo do HTML final.

Modo padrão e modo quirks

Os navegadores têm três modos de renderização, e o doctype escolhe um deles:

ModoAcionado porO que muda
Modo padrão<!DOCTYPE html> e outros doctypes modernosTudo segue as especificações atuais
Modo quirks limitadoHTML 4.01 Transitional ou Frameset com URL, XHTML 1.0 Transitional ou FramesetQuase padrão: só uma regra de altura de linha muda, então uma imagem sozinha numa linha (em geral numa célula de tabela) não tem espaço abaixo dela
Modo quirksNenhum doctype, um doctype digitado errado ou alguns antigos, como HTML 4.01 Transitional sem URLImita navegadores dos anos 90: alturas em porcentagem, tamanho do texto em tabelas e alturas de linha se comportam de outro jeito

O modo quirks existe para que páginas escritas antes dos padrões web continuem com a aparência que seus autores viam. Em páginas novas ele só traz problemas: um height: 100% que funciona numa página e não em outra, ou tabelas que ignoram o tamanho da fonte, são sintomas clássicos de doctype ausente.

As prévias do editor nesta página sempre renderizam no modo padrão, então apagar um doctype ali não vai mostrar o modo quirks. O verificador abaixo usa DOMParser, que aplica as mesmas regras que os navegadores usam ao carregar um arquivo. Edite o doctype na caixa de texto e o modo é atualizado:

Tente apagar a linha, digitar <!DOCTYPE html5> ou colocar uma palavra antes do doctype: cada uma dessas mudanças troca o resultado para quirks.

Doctypes antigos: HTML 4.01 e XHTML

Antes do HTML5, um doctype apontava para um arquivo DTD com um identificador público longo. Você ainda encontra esses doctypes no topo de sites mais antigos:

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

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Os navegadores nunca baixaram esses arquivos DTD. Eles só liam o identificador para escolher um modo: HTML 4.01 Strict e XHTML 1.0 Strict dão modo padrão, as versões Transitional dão modo quirks limitado e HTML 4.01 Transitional sem a URL dá modo quirks completo. Cole um deles no verificador acima para testar; repare que compatMode informa o modo quirks limitado como CSS1Compat, o mesmo valor do modo padrão, então só o modo quirks completo aparece como BackCompat.

Trocar um doctype antigo por <!DOCTYPE html> é seguro em páginas que já estão no modo padrão. Uma página que estava no modo quirks pode mudar um pouco (em geral alturas e espaços abaixo de imagens), então revise-a depois da troca.

O doctype no DOM

O doctype vira um nó DocumentType, separado do elemento <html>. Scripts o leem por document.doctype, e document.compatMode informa o modo em que a página ficou:

document.compatMode é o jeito mais rápido de verificar qualquer site no ar: abra o console do navegador e digite. "CSS1Compat" significa modo padrão (ou quirks limitado), "BackCompat" significa modo quirks.

Um modelo inicial completo de HTML5

O doctype é uma parte do documento mínimo com que toda página deve começar. Cada linha abaixo tem uma função:

O atributo lang e a tag meta viewport têm cada um a sua própria página.

Erros comuns

  • Algo antes do doctype. Um caractere solto, um echo de depuração de um script no servidor ou uma tag HTML acima de <!DOCTYPE html> coloca a página inteira no modo quirks. Comentários e linhas em branco não têm problema.
  • Inventar uma versão. <!DOCTYPE html5> ou <!DOCTYPE HTML 5> não são válidos e acionam o modo quirks. O doctype do HTML5 é só <!DOCTYPE html>.
  • Fechar o doctype. <!DOCTYPE html></!DOCTYPE> não é HTML válido. A declaração não tem tag de fechamento.
  • Deixá-lo de fora em arquivos de teste pequenos. Bugs de layout que você persegue num arquivo de rascunho sem doctype podem não existir na página real, e o contrário também.
  • Manter um doctype Transitional antigo. Ele coloca a página no modo quirks limitado sem nenhum benefício. Troque por <!DOCTYPE html>.

Perguntas frequentes

O que <!DOCTYPE html> faz?

Ele informa ao navegador que a página é um documento HTML moderno, e por isso ela é renderizada no modo padrão. Sem ele, os navegadores caem no modo quirks, que imita bugs dos navegadores do fim dos anos 90 e muda o cálculo de alguns layouts e alturas.

O <!DOCTYPE html> é obrigatório?

A página carrega sem ele, mas o padrão HTML exige o doctype e os navegadores renderizam a página no modo quirks. Coloque sempre <!DOCTYPE html> na primeira linha.

O doctype diferencia maiúsculas de minúsculas?

Não. <!DOCTYPE html>, <!doctype html> e <!DocType HTML> significam a mesma coisa. DOCTYPE em maiúsculas com html em minúsculas é o estilo mais comum.

DOCTYPE é uma tag HTML?

Não. É uma declaração, não um elemento: não tem tag de fechamento, não aceita atributos e não aparece em document.body. No DOM ele é um nó DocumentType separado, disponível como document.doctype.

Qual é o doctype do HTML5?

<!DOCTYPE html>. O HTML5 abandonou os identificadores públicos longos e as URLs do HTML 4.01 e do XHTML, e a forma curta é o único doctype de que você precisa em qualquer página nova.

Como saber se uma página está no modo quirks?

Abra o console do navegador e execute document.compatMode. "CSS1Compat" significa modo padrão (ou modo quirks limitado), "BackCompat" significa modo quirks.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR