Il est vrai que les spécifications HTML autorisent l'omission de certaines balises dans certains cas, mais il n'est généralement pas judicieux de le faire.
Il a deux effets - il rend la spécification plus complexe, ce qui rend plus difficile pour les auteurs de navigateurs d'écrire des implémentations correctes (comme le démontre IE en se trompant).
Cela rend la probabilité d'erreurs de navigateur dans ces parties de la spécification élevée. En tant qu'auteur de site Web, vous pouvez éviter le problème en incluant ces balises.Ainsi, bien que la spécification ne dise pas que vous devez le faire, cela réduit le risque de problèmes, ce qui est une bonne pratique d'ingénierie.
De plus, la dernière spécification HTML 5.1 WG indique actuellement (gardez à l'esprit que c'est un travail en cours et peut encore changer).
La balise de début d'un élément body peut être omise si l'élément est vide, ou si la première chose à l'intérieur de l'élément body n'est pas un caractère espace ou un commentaire, sauf si la première chose à l'intérieur de l'élément body est une méta, un lien, un script, un style ou élément de modèle.
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
C'est un peu subtil. Vous pouvez omettre le corps et la tête, et le navigateur déduira alors où ces éléments doivent être insérés. Cela comporte le risque de ne pas être explicite, ce qui pourrait prêter à confusion.
Donc ça
<html>
<h1>hello</h1>
<script ... >
...
résulte que l'élément de script est un enfant de l'élément corps, mais cela
<html>
<script ... >
<h1>hello</h1>
entraînerait la balise de script étant un enfant de l'élément head.
Vous pourriez être explicite en faisant cela
<html>
<body>
<script ... >
<h1>hello</h1>
et ensuite, selon ce que vous avez en premier, le script ou le h1, ils apparaîtront tous les deux de manière prévisible dans l'élément body. Ce sont des choses faciles à ignorer lors de la refactorisation et du débogage du code. (par exemple, vous avez JS qui recherche le 1er élément de script dans le corps - dans le deuxième extrait, il cesserait de fonctionner).
En règle générale, être explicite sur les choses vaut toujours mieux que de laisser les choses ouvertes à l'interprétation. À cet égard, XHTML est meilleur car il vous oblige à être complètement explicite sur la structure de votre élément dans votre code, ce qui le rend plus simple et donc moins sujet à une mauvaise interprétation.
Alors oui, vous pouvez les omettre et être techniquement valide, mais il est généralement imprudent de le faire.
title
balise. C'est le plus petit document qu'il considère valide:<!DOCTYPE html> <title>A</title>