1. 程式人生 > >深入理解DOCTYPE的作用

深入理解DOCTYPE的作用

        現在的程式碼編輯器越來越人性化,各種外掛、快捷鍵都能夠幫助我們快速生成程式碼。比如:使用vscode編輯器在html文件中輸入!再按tab鍵就能快速生成一個完整的html結構。如圖所示

        今天我們要說的不是程式碼編輯器,我們將目光移到文件的頂部,會發現頂部有一個<!DOCTYPE html>宣告,很多人不知道這個這個宣告有何作用,甚至還想把它給刪除。

1.DOCTYPE的作用

        DOCTYPE是document type (文件型別) 的縮寫。<!DOCTYPE >宣告位於文件的最前面,處於標籤之前,它不是html標籤。主要作用是告訴瀏覽器的解析器使用哪種HTML規範或者XHTML規範來解析頁面。

2.刪除<!DOCTYPE>會發生什麼?

        在W3C標準出來之前,不同的瀏覽器對頁面渲染有不同的標準,產生了一定的差異。這種渲染方式叫做混雜模式。在W3C標準出來之後,瀏覽器對頁面的渲染有了統一的標準,這種渲染方式叫做標準模式。<!DOCTYPE>不存在或者形式不正確會導致HTML或XHTML文件以混雜模式呈現,就是把如何渲染html頁面的權利交給了瀏覽器,有多少種瀏覽器就有多少種展示方式。因此要提高瀏覽器相容性就必須重視<!DOCTYPE>

3.嚴格模式和混雜模式

         嚴格模式和混雜模式都是瀏覽器的呈現模式,瀏覽器究竟使用混雜模式還是嚴格模式呈現頁面與網頁中的DTD(檔案型別定義)有關,DTD裡面包含了文件的規則。比如:loose.dtd

嚴格模式:又稱標準模式,是指瀏覽器按照W3C標準來解析程式碼,呈現頁面

混雜模式:又稱為怪異模式或者相容模式,是指瀏覽器按照自己的方式來解析程式碼,使用一種比較寬鬆的向後相容的方式來顯示頁面。

4.常見的DOCTYPE宣告

HTML5

<!DOCTYPE html>

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

 

該 DTD 等同於 HTML 4.01 Transitional,但允許框架集內容。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

XHTML 1.0 Strict
該 DTD 包含所有 HTML 元素和屬性,但不包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。必須以格式正確的 XML 來編寫標記。

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

XHTML 1.0 Transitional
該 DTD 包含所有 HTML 元素和屬性,包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。必須以格式正確的 XML 來編寫標記。

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTML 1.0 Frameset

 

該 DTD 等同於 XHTML 1.0 Transitional,但允許框架集內容。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

XHTML 1.1

該 DTD 等同於 XHTML 1.0 Strict,但允許新增模型(例如提供對東亞語系的 ruby 支援)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">