首先我們來了解一下什么是文檔聲明:
文檔聲明就是文檔告訴游覽器該以什么樣的標准去解析它。游覽器可以解析的文檔可不止html,還有xhtml,xml...當然在這里我們並不需要知道xhtml、xml是什么以及和html的區別,我們只需要知道,游覽器可以解析的文檔不止html ,所以文檔聲明是必須的,為的就是保證游覽器能夠正確解析文檔類型。
然后我們再來了解下html(Hyper Text Markup Language)<超文本標記語言>:
所謂的超文本就是超級文本,或者超越文本的意思,因為它可以呈現圖片,音樂甚至是音頻,普通的文本當然就是只能呈現文字,標記你可以理解為就是標簽<a><div>等,在一個文檔里通過標簽(標記)去對文檔進行分類整理。至於語言,當然就是交流的工具,超文本標記語言就是供人和游覽器交流的語言。
xhml,xml 各是什么語言我就不做贅述了,總之游覽器都能識別他們,但是他們都有各自的文檔規則,甚至同種語言不同版本的文檔規則也有差別,下面給出部分文檔的聲明:
1.XHTML1.1
語法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2.XHTML 1.0 Frameset
語法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
3.XHTML 1.0 Transitional
語法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4.XHTML 1.0 Strict
語法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5.HTML 4.01 Frameset
語法:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
6.HTML 4.01 Strict
語法:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
其中 Frameset(框架) strict(嚴格) transitional (過渡),在這里我們只需要知道是用來給文檔划分使用條件的,比如使用strict的類型聲明的文檔,游覽器解析起來就會更加嚴格
我們可以看到<!doctype html 后面跟了一大串屎一樣的的尾巴,這個尾巴就是DTD.
那么什么是DTD?
其實xhtml html(html5 之前),還有xml 都是基於一個標准或語言制定的,這個標准就是sgml(standard gernerate makeup laugue)<標准通用標記語言>,你可以把這個語言當做xhtml html(h5 以前)xml的母親,而sgml 有一個DTD(document type definition) <文檔類型申明>用來區分這些語言,游覽器對於每一個DTD 都有一整套制定好的規則,用來幫助解析文檔。。
最后到了我們的html5了。html5則一反常態直接脫離sgml ,自己形成了一套標准。這套標准目前已經被幾乎所有游覽器收錄,而html5的文檔聲明很簡單:只有<! doctype html>
那么對於那些沒有收錄html5標准的游覽器,當遇到html5的聲明會如何處理呢?
其實幾乎所有版本的游覽器都有處理文檔頭不正確的方法,對於識別不了的文檔頭則當做不正確處理,針對缺失的不正確的文檔頭游覽器都有自己的默認兼容模式去解析文檔