HTML 5標(biāo)準(zhǔn)學(xué)習(xí)入門之文檔結(jié)構(gòu)
51CTO推薦專題:HTML 5 下一代Web開發(fā)標(biāo)準(zhǔn)詳解
說起HTML的結(jié)構(gòu),很多人都能說得頭頭是道,一般來說答案可能是這樣的:
一個(gè)DOCTYPE,一個(gè)html,里面有head和body元素。
這當(dāng)然不能說是不正確的,但是如果問到一個(gè)最小的HTML源文件必須有哪一些東西的話,恐怕很少有人能正確地做出回答。
先來回答一下這個(gè)問題,一個(gè)最簡(jiǎn)的HTML5源碼文件需要的內(nèi)容如下:
- <!DOCTYPE html>
是的,就這樣,一個(gè)字符不多,一個(gè)字符不少,除了大小寫可任意變化外,其他的任何內(nèi)容都是不能變動(dòng)的。
那么究竟是怎么樣的規(guī)則,導(dǎo)致一個(gè)最簡(jiǎn)的源碼文件必須有doctype聲明呢?根據(jù)標(biāo)準(zhǔn),一個(gè)HTML文檔有如下內(nèi)容組成(嚴(yán)格按照順序):
一個(gè)BOM標(biāo)記,且這個(gè)BOM標(biāo)記必須為U+FEFF。
- · 0-n個(gè)空格或注釋。
- · DOCTYPE聲明。
- · 0-n個(gè)空格或注釋。
- · 一個(gè)HTML元素。
- · 0-n個(gè)空格或注釋。
這里存在著一些和HTML4的不同,一個(gè)HTML4的最簡(jiǎn)源碼文件是這樣的:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
- <title>這里是標(biāo)題</title>
兩者的區(qū)別是顯而易見的:
- HTML5把DOCTYPE修改為更簡(jiǎn)單的<!DOCTYPE html>,這個(gè)已經(jīng)眾所周知了。
- 在HTML4中多了一個(gè)<title>標(biāo)簽。
這里的重點(diǎn)就是<title>標(biāo)簽了,關(guān)于這個(gè)標(biāo)簽,在HTML4.01標(biāo)準(zhǔn)中是這么說的:
Every HTML document must have a TITLE element in the HEAD section.
也即是說,HTML4要求<title>標(biāo)簽是必須存在的。
而在HTML5的標(biāo)準(zhǔn)中,又是這么說的:
There must be no more than one title element per document.
HTML5中只設(shè)定了<title>標(biāo)簽數(shù)量的上限,卻沒有指明下限,也就是說,沒有<title>的文檔已經(jīng)被視為一個(gè)合法的文檔了。
對(duì)于DOCTYPE,HTML4中設(shè)定了6種DOCTYPE,HTML5中將DOCTYPE分為3種,這個(gè)在以后的章節(jié)中再具體說明。
再回過來看一下文檔組成,除去0-n個(gè)空格或注釋這樣并沒有多大意義的元素之外,組成的列表中還說明有一個(gè)HTML元素,但是最簡(jiǎn)的源碼中卻沒有這東西。這是因?yàn)樵贖TML的規(guī)范中,一直存在“隱式標(biāo)簽”這樣的概念,關(guān)于隱式標(biāo)簽,大致可以這么解釋:
一部分元素,當(dāng)滿足特定的前提條件時(shí),其開始標(biāo)簽或結(jié)束標(biāo)簽可以在源碼中省略。在這種情況下,被省略的標(biāo)簽稱為“隱式標(biāo)簽”。
需要注意的是,此處的省略指的是在源碼中省略,而在最終成型的DOM樹中,這個(gè)標(biāo)簽是存在的,因此才稱為隱式標(biāo)簽。因此上面最簡(jiǎn)的源碼結(jié)構(gòu),在生成DOM樹后,其真正的結(jié)構(gòu)是這樣的:
- <!DOCTYPE html>
- <html>
- <head></head>
- <body></body>
- </html>
***,再總結(jié)一下XHTML中的一些規(guī)范:
- · 因?yàn)槭荴ML,所以為了表示這是一個(gè)HTML文檔,必須有一個(gè)命名空間,其值為http://www.w3.org/1999/xhtml。
- · 因?yàn)槭荴ML,所以MIME type不能是text/html了,text/xml、application/xml、application/xml+html都是比較好的選擇。
- · 因?yàn)槭荴ML,必須有根元素,根元素為<html>,即<html>的開始和結(jié)束標(biāo)簽不能省略了。
- · 因?yàn)槭荴ML,所有元素只要有了開始標(biāo)簽,就不能沒有結(jié)束標(biāo)簽,或者自閉合。
- · 因?yàn)槭荴ML,所有元素都得嚴(yán)格遵守大小寫,元素名稱必須為小寫。
因?yàn)槭荴ML,文檔變得嚴(yán)格了很多,也因?yàn)槭荴ML,其可讀性和規(guī)范性提高了不少。但最終,我們始終要在HTML的寬容性和XML的規(guī)范性之間找到***的平衡點(diǎn),一味地追求極端始終是一個(gè)錯(cuò)誤。
原文鏈接:http://www.cnblogs.com/GrayZhang/archive/2011/03/28/learning-html5-structure.html
【編輯推薦】