說起HTML的結構,很多人都能說得頭頭是道,一般來說答案可能是這樣的:
一個DOCTYPE,一個html,裡面有head和body元素。
這當然不能說是不正確的,但是如果問到一個最小的HTML源文件必須有哪一些東西的話,恐怕很少有人能正確地做出回答。
先來回答一下這個問題,一個最簡的HTML5源碼文件需要的內容如下:
<!DOCTYPE html>
是的,就這樣,一個字符不多,一個字符不少,除了大小寫可任意變化外,其他的任何內容都是不能變動的。
那麼究竟是怎麼樣的規則,導致一個最簡的源碼文件必須有doctype聲明呢?根據標准,一個HTML文檔有如下內容組成(嚴格按照順序):
這裡存在著一些和HTML4的不同,一個HTML4的最簡源碼文件是這樣的:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<title>這裡是標題</title>
兩者的區別是顯而易見的:
<!DOCTYPE html>
,這個已經眾所周知了。<title>
標簽。這裡的重點就是<title>
標簽了,關於這個標簽,在HTML4.01標准中是這麼說的:
Every HTML document must have a TITLE element in the HEAD section.
也即是說,HTML4要求<title>
標簽是必須存在的。
而在HTML5的標准中,又是這麼說的:
There must be no more than one title element per document.
HTML5中只設定了<title>
標簽數量的上限,卻沒有指明下限,也就是說,沒有<title>
的文檔已經被視為一個合法的文檔了。
對於DOCTYPE,HTML4中設定了6種DOCTYPE,HTML5中將DOCTYPE分為3種,這個在以後的章節中再具體說明。
再回過來看一下文檔組成,除去0-n個空格或注釋
這樣並沒有多大意義的元素之外,組成的列表中還說明有一個HTML元素,但是最簡的源碼中卻沒有這東西。這是因為在HTML的規范中,一直存在“隱式標簽”這樣的概念,關於隱式標簽,大致可以這麼解釋:
一部分元素,當滿足特定的前提條件時,其開始標簽或結束標簽可以在源碼中省略。在這種情況下,被省略的標簽稱為“隱式標簽”。
需要注意的是,此處的省略指的是在源碼中省略,而在最終成型的DOM樹中,這個標簽是存在的,因此才稱為隱式標簽。因此上面最簡的源碼結構,在生成DOM樹後,其真正的結構是這樣的:
<!DOCTYPE html>
<html>
<head></head>
<body></body>
</html>
最後,再總結一下XHTML中的一些規范:
http://www.w3.org/1999/xhtml
。text/html
了,text/xml
、application/xml
、application/xml+html
都是比較好的選擇。<html>
,即<html>
的開始和結束標簽不能省略了。因為是XML,文檔變得嚴格了很多,也因為是XML,其可讀性和規范性提高了不少。但最終,我們始終要在HTML的寬容性和XML的規范性之間找到最佳的平衡點,一味地追求極端始終是一個錯誤。