最熟悉的往往最容易被忽略 ——DOCTYPE
關(guān)于DTD
wiki解釋
A document type declaration, or DOCTYPE, is an instruction that associates a particular SGML or XML document (for example, a webpage) with a document type definition (DTD) (for example, the formal definition of a particular version of HTML1.0 - HTML 4.0).[1] In the serialized form of the document, it manifests as a short string of markup that conforms to a particular syntax.
這段話的大致意思是 文檔類型聲明(DTD)是用特定的文件類型相關(guān)聯(lián)的指令 (如特定版本的 HTML1.0-html 4.0 的正式定義) 定義sgml 或 xml 文檔(如網(wǎng)頁)。在文檔的序列化中闽瓢,它表現(xiàn)為標(biāo)記的短字符串唆垃,符合特定語法肛真。
w3c 解釋
A DTD is a Document Type Definition.
A DTD defines the structure and the legal elements and attributes of an XML document.
簡單明了袁铐,DTD是文檔類型的申明(這樣描述不太全面学密,我覺的還應(yīng)該包含語法規(guī)則在里面)淘衙,DTD定義了XML文檔的結(jié)構(gòu)與合法元素以及XML屬性。
MDN解釋
<!DOCTYPE> 通知瀏覽器您用來編寫文檔 的HTML(或XML)版本腻暮。Doctype是一個(gè)聲明彤守,而不是標(biāo)簽 ; 您也可以將其稱為“文檔類型聲明”,或簡稱為“DTD”哭靖。
DTD語法結(jié)構(gòu)
HTML 4.01 Strict
該 DTD 包含所有 HTML 元素和屬性具垫,但不包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)试幽。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional
該 DTD 包含所有 HTML 元素和屬性筝蚕,包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
該 DTD 包含所有 HTML 元素和屬性起宽,包括展示性的和棄用的元素(比如 font)洲胖。允許框架集(Framesets)。
HTML 5
<!DOCTYPE html>
一般的結(jié)構(gòu)模式為:
<!DOCTYPE root-element PUBLIC "FPI" ["URI"] [ <!-- internal subset declarations -->]>
or
<!DOCTYPE root-element SYSTEM "URI" [ <!-- internal subset declarations -->]>
公共和系統(tǒng)的關(guān)鍵字坯沪,代表它是什么樣的文檔類型定義的绿映。如果它是公共的,那么這個(gè)關(guān)鍵字后面的“公共標(biāo)識(shí)”稱為FPI(正式公共標(biāo)識(shí))是受限制的屏箍,如果它是系統(tǒng)中,只有一個(gè)系統(tǒng)標(biāo)識(shí)符必須給出橘忱。它指出赴魁,XML解析器必須找到系統(tǒng)中的特定方式的文檔類型定義
HTML5的DOCTYPE聲明,是非常短的钝诚,因?yàn)樗狈σ粋€(gè)URL或FPI(正式公共標(biāo)識(shí))的形式的文檔類型定義(DTD)的引用颖御。在HTML5中,正規(guī)的語法是大寫字母定義凝颇,但即使兩個(gè)小寫字母和小寫大寫混合物是也被視為有效潘拱。此外HTML5不是基于SGML,使用DOCTYPE只為模式選擇拧略。該聲明是在所有主流瀏覽器的支持芦岂。
XHTML與HTML類似,點(diǎn)擊查看
瀏覽器模式
為了能夠很好地顯示滿足標(biāo)準(zhǔn)的頁面垫蛆,又能最大程度兼容不合法的HTML禽最。 瀏覽器廠商一般會(huì)提供兩種瀏覽器模式:
標(biāo)準(zhǔn)模式(standards mode):瀏覽器根據(jù)標(biāo)準(zhǔn)規(guī)約來渲染頁面。
混雜模式(quirks mode):瀏覽器采用更加寬松的袱饭、向后兼容的方式來渲染頁面川无。
混雜模式下,瀏覽器會(huì)模仿舊瀏覽器的行為虑乖,比如IE6懦趋,在此基礎(chǔ)上兼容新的標(biāo)準(zhǔn)特性。 混雜模式又稱兼容模式疹味、怪異模式等仅叫。
DOCTYPE切換
瀏覽器根據(jù)不同的DOCTYPE選擇不同的渲染方法就叫做DOCTYPE切換。 其實(shí)DOCTYPE切換就是用來識(shí)別和兼容舊網(wǎng)頁的糙捺。
以下情況瀏覽器會(huì)采用標(biāo)準(zhǔn)模式渲染:
- 給出了完整的DOCTYPE聲明
- DOCTYPE聲明了Strict DTD
- DOCTYPE聲明了Transitional DTD和URI
以下情況瀏覽器會(huì)采用混雜模式渲染:
- DOCTYPE聲明了Transitional DTD但未給出URI
- DOCTYPE聲明不合法
- 未給出DOCTYPE聲明
tip:如果你是使用最新標(biāo)準(zhǔn)編寫的頁面但未給出DOCTYPE聲明惑芭,這時(shí)就可能會(huì)出現(xiàn)一些怪異的行為。 例如盒模型不正確继找、窗口的size不正確等問題遂跟。所以,盡量為你網(wǎng)站的所有頁面都給出合法的DOCTYPE聲明
<!doctype html> 的作用
- 你可以輕松的寫下這個(gè)doctype,而不用擔(dān)心會(huì)寫錯(cuò)幻锁;
- 你大概省下了105字節(jié)字符凯亮,對于一個(gè)每日PV達(dá)到千萬級的站點(diǎn),它可以省下相當(dāng)客觀流量哄尔;
- 它是向后兼容的假消,是的,html5的doctype就是這樣寫的岭接,并且現(xiàn)代瀏覽器都認(rèn)識(shí)它富拗;
- !doctype申明為標(biāo)準(zhǔn)模式;