好问题。
答案是:<html>/<head>/<body> 都是 optional tags,当然可以省略(在 HTML5 标准下
事实上,让我们扔掉 <html>/<head>/<body> ,这也是一个合法的 HTML5 document 哦。
<!doctype html> <title>demo</title> <p>This is a paragraph</p>
更进一步,扔掉 <body> 里的内容,依然是合法的。
<!doctype html> <title>demo</title>
继续努力,扔掉 <title> 就剩一个 doctype
<!doctype html>
这就不合法了,必须要有一个 <title>
那么为什么大多数情况下,我们看到的 HTML5 源码里都有 <html>/<head>/<body> 呢?那可能是工程师的自觉,也可能是为了兼容老旧的浏览器,对于现代浏览器来说,并不是必须的。
===========
关于 optional tags ,以及什么属于 optional tags ,见 spec
HTML Standard