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


1.背景介紹

DOCTYPE是什么?

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

2.知識剖析

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

超文本嚴格文檔類型定義:HTML Strict DTD。

如果需要干凈的標記,免于表現層的混亂,請使用此類型。請與層疊樣式表配合使用。該 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 所期望移入樣式表的呈現屬性和元素。如果您的讀者使用了不支持層疊樣式表(CSS)的瀏覽器以至于您不得不使用 HTML 的呈現特性時,請使用此類型。該 DTD 包含所有 HTML 元素和屬性,包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。

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

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

此類型定義應當被用于帶有框架的文檔。除 frameset 元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD。該 DTD 等同于 HTML 4.01 Transitional,但允許框架集內容。

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

DOCTYPE的作用是什么?

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

DTD是什么

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

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

通過它,獨立的團體可一致地使用某個標準的文檔類型定義來交換數據。而您的應用程序也可使用某個標準的文檔類型定義來驗證從外部接收到的數據。

標準模式和怪異模式

CSS1Compat:標準模式,瀏覽器使用W3C的標準解析渲染頁面。在標準模式中,瀏覽器以其支持的最高標準呈現頁面。

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

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

模式觸發

如果XHTML、HTML 4.01文檔包含形式完整的DOCTYPE,那么它一般以標準模式呈現。

包含過渡DTD和URI的DOCTYPE也導致頁面以標準模式呈現,但是有過渡DTD而沒有URI會導致頁面以混雜模式呈現。

DOCTYPE不存在或形式不正確會導致HTML和XHTML文檔以混雜模式呈現。

3.常見問題

如果不聲明doctype會發生什么?如何解決?

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

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

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

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

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

4.擴展思考

關于 DOCTYPE 的一個小發現:

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

考慮以下兩段代碼:

實際測試如下圖所示:

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

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

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

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

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

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

參考文獻:

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

HTML_嚴格模式與混雜模式

嚴格模式與混雜模式-如何觸發這兩種模式,區分它們有何意義


PPT點擊

視頻點擊

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容

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