HTML文件里開頭的!Doctype有什么作用?


1.背景介紹

DOCTYPE是什么?

DOCTYPE是document type的簡寫,它并不是 HTML 標(biāo)簽,也沒有結(jié)束標(biāo)簽,它是一種標(biāo)記語言的文檔類型聲明,即告訴瀏覽器當(dāng)前 HTML 是用什么版本編寫的。DOCTYPE的聲明必須是 HTML 文檔的第一行,位于html標(biāo)簽之前。大多數(shù)Web文檔的頂部都有doctype聲明,它是在新建一個文檔時,由Web創(chuàng)作軟件草率處理的眾多細節(jié)之一。很少人會去注意 doctype ,但在遵循標(biāo)準(zhǔn)的任何Web文檔中,它都是一項必需的元素。doctype會影響代碼驗證,并決定了瀏覽器最終如何顯示你的 Web文檔。

2.知識剖析

DOCTYPE可聲明三種 DTD 類型:嚴(yán)格、過渡以及框架集的 HTML 文檔。

超文本嚴(yán)格文檔類型定義:HTML Strict DTD。

如果需要干凈的標(biāo)記,免于表現(xiàn)層的混亂,請使用此類型。請與層疊樣式表配合使用。該 DTD 包含所有 HTML 元素和屬性

但不包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)

代碼為:DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//en" "http://www.w3. org/TR/html4/strict.dtd"

超文本過渡文檔類型定義:HTML Transitional DTD。

可包含 W3C 所期望移入樣式表的呈現(xiàn)屬性和元素。如果您的讀者使用了不支持層疊樣式表(CSS)的瀏覽器以至于您不得不使用 HTML 的呈現(xiàn)特性時,請使用此類型。該 DTD 包含所有 HTML 元素和屬性,包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。

代碼為:DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

超文本框架集文檔類型定義:Frameset DTD。

此類型定義應(yīng)當(dāng)被用于帶有框架的文檔。除 frameset 元素取代了 body 元素之外,F(xiàn)rameset DTD 等同于 Transitional DTD。該 DTD 等同于 HTML 4.01 Transitional,但允許框架集內(nèi)容。

代碼為:DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"

DOCTYPE的作用是什么?

DOCTYPE聲明中指出閱讀程序應(yīng)該用什么規(guī)則來解釋文檔中的標(biāo)記。在Web文檔的情況下,閱讀程序通常是瀏覽器或者校驗器這樣的一個程序,規(guī)則是W3C所發(fā)布的一個文檔類型定義 DTD 中包含的規(guī)則。制作一個符合標(biāo)準(zhǔn)的網(wǎng)頁,DOCTYPE聲明是是不可缺少的,它在Web設(shè)計中用來說明你用的XHTML或者HTML是什么版本,如果不做DOCTYPE聲明或聲明不正確的情況下,將有可能導(dǎo)致你的標(biāo)識與CSS失效,從而令你網(wǎng)頁的布局變亂,造成網(wǎng)頁在瀏覽器中不能正常的顯示。我們還可以通過W3C提供的驗證工具來檢查頁面的內(nèi)容是否符合在DOCTYPE中聲明的標(biāo)準(zhǔn)。

DTD是什么

DTD是文檔類型定義(Document Type Definition)是一套為了進行程序間的數(shù)據(jù)交換而建立的關(guān)于標(biāo)記符的語法規(guī)則。

它使用一系列合法的元素來定義文檔的結(jié)構(gòu)。是SGML的一部分,可被成行地聲明于 XML 文檔中,也可作為一個外部引用。

通過它,獨立的團體可一致地使用某個標(biāo)準(zhǔn)的文檔類型定義來交換數(shù)據(jù)。而您的應(yīng)用程序也可使用某個標(biāo)準(zhǔn)的文檔類型定義來驗證從外部接收到的數(shù)據(jù)。

標(biāo)準(zhǔn)模式和怪異模式

CSS1Compat:標(biāo)準(zhǔn)模式,瀏覽器使用W3C的標(biāo)準(zhǔn)解析渲染頁面。在標(biāo)準(zhǔn)模式中,瀏覽器以其支持的最高標(biāo)準(zhǔn)呈現(xiàn)頁面。

BackCompat:怪異模式,瀏覽器使用自己的怪異模式解析渲染頁面。在怪異模式中,頁面以一種比較寬松的向后兼容的方式顯示。

怪異模式通常模擬老式瀏覽器的行為以防止老站點無法工作。

模式觸發(fā)

如果XHTML、HTML 4.01文檔包含形式完整的DOCTYPE,那么它一般以標(biāo)準(zhǔn)模式呈現(xiàn)。

包含過渡DTD和URI的DOCTYPE也導(dǎo)致頁面以標(biāo)準(zhǔn)模式呈現(xiàn),但是有過渡DTD而沒有URI會導(dǎo)致頁面以混雜模式呈現(xiàn)。

DOCTYPE不存在或形式不正確會導(dǎo)致HTML和XHTML文檔以混雜模式呈現(xiàn)。

3.常見問題

如果不聲明doctype會發(fā)生什么?如何解決?

聲明文檔的解析類型(document.compatMode),避免瀏覽器的怪異模式。這個屬性會被瀏覽器識別并使用,但是如果你的頁面沒有DOCTYPE的聲明,那么compatMode默認就是BackCompat,

這也就是怪異的開始 -- 瀏覽器按照自己的方式解析渲染頁面,那么,在不同的瀏覽器就會顯示不同的樣式。

如果你的頁面添加了那么,那么就等同于開啟了標(biāo)準(zhǔn)模式,那么瀏覽器就得老老實實的按照W3C的標(biāo)準(zhǔn)解析渲染頁面,這樣一來,你的頁面在所有的瀏覽器里顯示的就都是一個樣子了。

有沒有其他進入怪異模式的方法?

除了不寫DOCTYPE聲明外,最常見的就是在DOCTYPE聲明前面出現(xiàn)了這些內(nèi)容:普通文本、HTML 標(biāo)簽、HTML 注釋、XML 聲明、IE條件注釋。

4.擴展思考

關(guān)于 DOCTYPE 的一個小發(fā)現(xiàn):

使用 XHTML 聲明時,圖片是完美貼合包裹 DIV 元素的,但使用 HTML 5 標(biāo)準(zhǔn)聲明時,包裹 DIV 元素底部會被撐開 2~5 個像素不等。

考慮以下兩段代碼:

實際測試如下圖所示:

對于圖片,一般都會使用vertical-align: middle使其與周邊對齊,但是為什么使用老舊的文檔聲明反而是符合我們直觀的顯示呢?

首先,瀏覽器并沒有所謂的“HTML 5 模式",而是只有三種:怪異模式(Quirks),幾乎標(biāo)準(zhǔn)的模式(Limited Quirks)和標(biāo)準(zhǔn)模式(Standards),其中幾乎標(biāo)準(zhǔn)的模式和標(biāo)準(zhǔn)模式之間的唯一差異在于是否對? 元素給定行高(line-height)和基線(baseline)

幾乎標(biāo)準(zhǔn)模式中,如果? 標(biāo)簽所在行沒有其他的行內(nèi)元素,將不指定基線(baseline),? 標(biāo)簽因此會緊貼著父元素底部在標(biāo)準(zhǔn)模式中,行框總是會包含類似字母 g,f 尾巴下伸出來的那一部分空間(針對下行字母),即使行框內(nèi)并沒有任何內(nèi)容。因此這種情況下你看到的? 跟父元素底部幾個像素的間隙實際上就是為”字母尾巴“預(yù)留的

使用 XHTML Transitional Doctype 會是瀏覽器運行在”幾乎標(biāo)準(zhǔn)模式(Limited Quirks)”。如果你使用XHTML Strict 或者HTML 4 Strict模式,你將看到和使用HTML 5 模式同樣的間隙,因為這是標(biāo)準(zhǔn)模式(Standards mode)

圖片本質(zhì)上就是一個內(nèi)聯(lián)元素(或者說 inline-block,因為本身具有寬高),所以只要你在實際工作中,有若干個具備內(nèi)聯(lián)性質(zhì)的元素水平對齊,就會出現(xiàn)這種情況:

你實際看到的.wrap在不同的瀏覽器中高度都是略大于 100px 的,因為它給隱形的 “尾巴” 留了空間(把 inline 當(dāng)作圖片啦)!

參考文獻:

為何說 HTML5「no longer based on SGML」?

HTML_嚴(yán)格模式與混雜模式

嚴(yán)格模式與混雜模式-如何觸發(fā)這兩種模式,區(qū)分它們有何意義


PPT點擊

視頻點擊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J的外補...
    _Yfling閱讀 14,108評論 1 92
  • 格式后期處理。 Jeremy Keith在 Fronteers 2010 上的主題演講 今天我想跟大家談一談HTM...
    LordZhou閱讀 1,213評論 0 17
  • HTML、XML、XHTML 有什么區(qū)別 1.HTML 是用來描述網(wǎng)頁的一種語言,指的是超文本標(biāo)記語言 (Hype...
    饑人谷_牛牛閱讀 821評論 0 2
  • “Be conservative in what you send; be liberal in what you...
    Rella7閱讀 1,211評論 0 2
  • 兩生花開,相望彼岸。 一念天堂,一念地獄。
    似夢似醒似醉似清閱讀 544評論 0 0

友情鏈接更多精彩內(nèi)容