DOCTYPE是document type(文檔類型)的簡寫,在web設(shè)計中用來聲明文檔類型。
在所有 HTML 文檔中規(guī)定 DOCTYPE 是非常重要的邀层,這樣瀏覽器就能了解預(yù)期的文檔類型夫植, 告訴瀏覽器要通過哪一種規(guī)范(DTD)解析文檔(比如HTML或XHTML規(guī)范)。
DOCTYPE聲明必須在 HTML 文檔的第一行把沼,它不屬于 HTML 標簽; 它是一條指令吁伺,告訴瀏覽器編寫頁面所用的標記的版本饮睬。
doctype會影響代碼驗證,并決定了瀏覽器最終如何顯示你的Web文檔篮奄。
DOCTYP與DTD與SGML
HTML 4.01 中的 doctype 需要對 DTD 進行引用捆愁,因為 HTML 4.01 基于 SGML割去。
DTD:(Document Type Definition)文檔類型定義是一種特殊文檔,它規(guī)定昼丑、約束符合標準通用標示語言(SGML)或SGML子集可擴展標示語言(XML)規(guī)則的定義和陳述呻逆。
SGML:標準通用標記語言,是一種定義電子文檔結(jié)構(gòu)和描述其內(nèi)容的國際標準語言菩帝; 通用標言為語法置標提供了異常強大的工具咖城,同時具有極好的擴展性,因此在數(shù)據(jù)分類和索引中非常有用胁附; 是所有電子文檔標記語言的起源酒繁,早在萬維網(wǎng)發(fā)明之前“通用標言”就已存在。
Doctype可聲明三種DTD類型控妻,分別表示嚴格版本州袒、過渡版本以及基于框架的 HTML 文檔。
以HTML4.01為例
超文本嚴格文檔類型定義HTML Strict DTD 弓候,不允許使用表現(xiàn)性郎哭、廢棄元素(如font)以及frameset。聲明:
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
? ? "http://www.w3.org/TR/html4/strict.dtd">
超文本過渡文檔類型定義HTML Transitional DTD 允許使用表現(xiàn)性菇存、廢棄元素(如font)夸研,不允許使用frameset。聲明:
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
? ? "http://www.w3.org/TR/html4/loose.dtd">
超文本框架集文檔類型定義HTML Strict DTD 允許表現(xiàn)性元素依鸥,廢棄元素以及frameset亥至。聲明:
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
? ? "http://www.w3.org/TR/html4/frameset.dtd">
瀏覽器的呈現(xiàn)模式
現(xiàn)代的瀏覽器需要不同模式, 既要呈現(xiàn)久遠的HTML界面贱迟, 不至于界面結(jié)構(gòu)混亂不堪姐扮,也需要呈現(xiàn)W3C標準的界面:
標準模式(strict)---是指瀏覽器按照 W3C 標準解析代碼,呈現(xiàn)頁面
怪異模式---是指瀏覽器用自己的方式解析代碼衣吠,即使用一種比較寬松的向后兼容的方式來顯示頁面
DOCTYPE切換
瀏覽器根據(jù)不同的DOCTYPE選擇不同的渲染方法就叫做DOCTYPE切換茶敏。 其實DOCTYPE切換就是用來識別和兼容舊網(wǎng)頁的。
以下情況瀏覽器會采用標準模式渲染:
給出了完整的DOCTYPE聲明
DOCTYPE聲明了Strict DTD
DOCTYPE聲明了Transitional DTD和URI
以下情況瀏覽器會采用怪異模式渲染:
DOCTYPE聲明了Transitional DTD但未給出URI
DOCTYPE聲明不合法
未給出DOCTYPE聲明
現(xiàn)今情況
HTML5協(xié)議下 統(tǒng)一寫 < !DOCTYPE html>缚俏。
HTML 5 不基于 SGML惊搏,因此不需要對 DTD 進行引用,也就沒有嚴格模式與怪異模式的區(qū)別忧换,但是需要 doctype 來規(guī)范瀏覽器的行為(html 5簡化了這種聲明恬惯,意在告訴瀏覽器使用統(tǒng)一的標準即可);HTML5 有相對寬松的語法包雀,實現(xiàn)時宿崭,已經(jīng)盡可能大的實現(xiàn)了向后兼容。( HTML5 沒有嚴格和混雜之分)
如果不聲明DOCTYPE會發(fā)生什么才写?
如果你是使用最新標準編寫的頁面但未給出DOCTYPE聲明葡兑,瀏覽器會采用怪異模式渲染,這時就可能會出現(xiàn)一些怪異的行為。 例如盒模型不正確赞草、窗口的size不正確等問題讹堤。所以,盡量為你網(wǎng)站的所有頁面都給出合法的DOCTYPE聲明厨疙。
有沒有其他進入怪異模式的方法?
除了不寫DOCTYPE聲明外洲守,最常見的就是在DOCTYPE聲明前面出現(xiàn)了這些內(nèi)容:普通文本、HTML 標簽沾凄、HTML 注釋梗醇、XML 聲明、IE條件注釋撒蟀。
參考文獻:
參考一:?為何說 HTML5「no longer based on SGML」叙谨?
參考二:?HTML_嚴格模式與混雜模式
參考四:?嚴格模式與混雜模式-如何觸發(fā)這兩種模式保屯,區(qū)分它們有何意義
什么是 XHTML與XML有什么關(guān)系手负?
W3C 下與網(wǎng)頁(超文本)相關(guān)的標準有兩個系列:HTML 系列和 XHTML 系列。
HTML 系列從 HTML 第一版一直發(fā)展到 HTML 4.x姑尺、HTML5竟终,HTML 系列的工作重點在于豐富與超文本相關(guān)的功能、標記切蟋,提供較好的兼容性统捶,更加面向“人”;
?XHTML 系列從 XHTML 1.0柄粹、1.1喘鸟、2.0 跳躍到 HTML5 的一部分:所謂的“XHTML5”。而 XHTML 系列的工作重點在于將 HTML 改為更加符合 XML 嚴格規(guī)范的格式镰惦,更加面向“機器”迷守。
XML 的語法很嚴格,是 W3C 的寶貝旺入,所以 W3C 試圖把各種東西都變成 XML 的子集或應(yīng)用兑凿,比如 MathML,SVG 等茵瘾±窕可是其地位逐漸受到其他一些輕量標記語言的威脅。
為何html5的頭部申明如此不同拗秘?
html5的頭聲明圣絮,其實是一種回歸,回歸簡單聲明方式
HTML5 不再是基于 SGML 的語言雕旨,而 doctype 只是用來激活模式的扮匠。
HTML5 之前捧请,HTML 都是用 SGML 來書寫的,DOCTYPE 則用來聲明文檔類型棒搜,它可以告訴 SGML parser 使用什么 DTD 來解析文檔疹蛉。所以到了 HTML5,根本就沒有對應(yīng)的 DTD力麸,也就沒有后面一串異常復(fù)雜的表述了可款。
為什么 HTML5 不再是 SGML 了呢?
SGML 需要在 DTD 中定義好標簽和屬性克蚂,但是 HTML5 中要允許自定的標簽和屬性的闺鲸,原來的框架太過束縛,它需要更加廣大的范圍來放飛自己埃叭。