É necessário escrever <html>
, <head>
e <body>
tags?
Por exemplo, eu posso criar uma página assim:
<!DOCTYPE html>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Page Title</title>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<script src="js/head_script.js"></script><!-- this script will be in head //-->
<div>Some html</div> <!-- here body starts //-->
<script src="js/body_script.js"></script>
E o Firebug separa corretamente a cabeça e o corpo:
A validação do W3C diz que é válido.
Mas raramente vejo essa prática na web.
Existe algum motivo para escrever essas tags?
title
tag. Este é o menor documento que considera válido:<!DOCTYPE html> <title>A</title>
Respostas:
Omitindo os
html
,head
ebody
marcas é certamente permitido pelas especificações HTML. A razão subjacente é que os navegadores sempre procuraram ser consistentes com as páginas da Web existentes, e as versões iniciais do HTML não definiram esses elementos. Quando HTML2.0primeiro, foi feito de uma maneira que as tags seriam inferidas quando ausentes.Costumo achar conveniente omitir as tags ao prototipar e, especialmente, ao escrever casos de teste, pois ajuda a manter a marcação focada no teste em questão. O processo de inferência deve criar os elementos exatamente da maneira que você vê no Firebug, e os navegadores são bastante consistentes ao fazer isso.
Mas...
O IE possui pelo menos um bug conhecido nessa área. Até o IE9 exibe isso. Suponha que a marcação seja esta:
Você deve (e faz em outros navegadores) obter um DOM parecido com este:
Mas no IE você obtém isso:
Veja você mesmo.
Esse bug parece limitado à
form
tag inicial que precede qualquer conteúdo de texto e qualquerbody
tag inicial.fonte
O Guia de Estilo do Google para HTML recomenda a omissão de todas as tags opcionais.
Isso inclui
<html>
,<head>
,<body>
,<p>
e<li>
.https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags
fonte
<script src="http://localhost:35729/livereload.js"></script>
. Para modelos exóticos, eles não entendem onde devem inserir seu código.Ao contrário da observação de @Liza Daly sobre HTML5, essa especificação é realmente bastante específica sobre quais tags podem ser omitidas e quando (e as regras são um pouco diferentes do HTML 4.01, principalmente para esclarecer onde elementos ambíguos como comentários e espaço em branco pertencem)
A referência relevante é http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags e diz:
A tag inicial de um elemento html pode ser omitida se a primeira coisa dentro do elemento html não for um comentário.
A tag final de um elemento html pode ser omitida se o elemento html não for seguido imediatamente por um comentário.
A tag inicial de um elemento principal pode ser omitida se o elemento estiver vazio ou se a primeira coisa dentro do elemento principal for um elemento.
A tag final de um elemento principal pode ser omitida se o elemento principal não for seguido imediatamente por um caractere de espaço ou um comentário.
A tag inicial de um elemento do corpo pode ser omitida se o elemento estiver vazio ou se a primeira coisa dentro do elemento do corpo não for um caractere de espaço ou um comentário, exceto se a primeira coisa dentro do elemento do corpo for um script ou um elemento de estilo.
A tag final de um elemento do corpo pode ser omitida se o elemento do corpo não for seguido imediatamente por um comentário.
Portanto, seu exemplo é HTML5 válido e seria analisado dessa maneira, com as tags html, head e body em suas posições implícitas:
Observe que o comentário "este script estará na cabeça" é realmente analisado como parte do corpo, embora o próprio script faça parte da cabeça. De acordo com a especificação, se você quiser que isso seja diferente, as tags
</HEAD>
e<BODY>
não podem ser omitidas. (Embora as tags correspondentes<HEAD>
e</BODY>
ainda possam ser)fonte
É válido omiti-los no HTML4:
http://www.w3.org/TR/html401/struct/global.html
No HTML5, não existem elementos "obrigatórios" ou "opcionais" exatamente, pois a sintaxe do HTML5 é mais vagamente definida. Por exemplo
title
:http://www.w3.org/TR/html5/semantics.html#the-title-element-0
Não é válido omiti-los no XHTML5 verdadeiro, embora isso quase nunca seja usado (versus o XHTML que age como o HTML5).
No entanto, do ponto de vista prático, você geralmente deseja que os navegadores sejam executados no "modo de padrões", para previsibilidade na renderização de HTML e CSS. Fornecer um DOCTYPE e uma árvore HTML mais estruturada garantirá resultados mais previsíveis entre navegadores.
fonte
html
,head
ebody
, os elementos são obrigatórios, mas as tags são opcionais.É verdade que as especificações HTML permitem que certas tags sejam omitidas em certos casos, mas geralmente isso é imprudente.
Ele tem dois efeitos - torna as especificações mais complexas, o que torna mais difícil para os autores do navegador escrever implementações corretas (como demonstrado pelo IE errando).
Isso aumenta a probabilidade de erros do navegador nessas partes da especificação. Como autor de um site, você pode evitar o problema incluindo essas tags - portanto, embora as especificações não digam que você precisa, isso reduz a chance de dar errado, o que é uma boa prática de engenharia.
Além do mais, a especificação mais recente do HTML 5.1 WG diz atualmente (lembre-se de que é um trabalho em andamento e que ainda pode mudar).
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
Isso é um pouco sutil. Você pode omitir corpo e cabeça, e o navegador inferirá onde esses elementos devem ser inseridos. Isso implica o risco de não ser explícito, o que pode causar confusão.
Então, é isso
resulta no elemento script ser filho do elemento body, mas isso
resultaria na tag de script um filho do elemento head.
Você pode ser explícito fazendo isso
e, o que você tiver primeiro, o script ou o h1, os dois aparecerão previsivelmente no elemento body. São coisas fáceis de ignorar ao refatorar e depurar o código. (digamos, por exemplo, você tem JS que está procurando o primeiro elemento de script no corpo - no segundo trecho, ele para de funcionar).
Como regra geral, ser explícito sobre as coisas é sempre melhor do que deixar as coisas abertas à interpretação. Nesse aspecto, o XHTML é melhor porque obriga a ser completamente explícito sobre a estrutura do elemento em seu código, o que o torna mais simples e, portanto, menos propenso a erros de interpretação.
Portanto, sim, você pode omiti-los e ser tecnicamente válido, mas geralmente não é aconselhável fazê-lo.
fonte
<!DOCTYPE html>
.O Firebug mostra isso corretamente porque o seu navegador corrige automaticamente a marcação incorreta para você. Esse comportamento não é especificado em nenhum lugar e pode (irá) variar de navegador para navegador. Essas tags são necessárias pelo DOCTYPE que você está usando e não devem ser omitidas.
O elemento html é o elemento raiz de todas as páginas html. Se você olhar para a descrição de todos os outros elementos, ele diz onde um elemento pode ser usado (e quase todos os elementos requerem cabeça ou corpo).
fonte
<title>
após a<p></p>
, por exemplo.)