body tags is certainly allowed by the HTML specs. The underlying reason is that browsers have always sought to be consistent with existing web pages, and the very early versions of HTML didn't define those elements. When HTML
2.0 first did, it was done in a way that the tags would be inferred when missing.
I often find it convenient to omit the tags when prototyping and especially when writing test cases as it helps keep the mark-up focused on the test in question. The inference process should create the elements in exactly the manner that you see in Firebug, and browsers are pretty consistent in doing that.
IE has at least one known bug in this area. Even IE9 exhibits this. Suppose the markup is this:
<!DOCTYPE html> <title>Test case</title> <form action='#'> <input name="var1"> </form>
You should (and do in other browsers) get a DOM that looks like this:
HTML HEAD TITLE BODY FORM action="#" INPUT name="var1"
But in IE you get this:
HTML HEAD TITLE FORM action="#" BODY INPUT name="var1" BODY
This bug seems limited to the
form start tag preceding any text content and any
body start tag.
~ Answered on 2011-04-12 23:57:38