DOCTYPE描述了html文檔的類型,對不同的DOCTYPE類型,瀏覽器會使用不同的方法來解析。
沒有 <!DOCTYPE html> 會以怪異模式來渲染頁面
在ie9往上的瀏覽器中,三種模式在渲染方面幾乎沒有區別
在ie 7 8 9中,理論上存在怪異模式,實際只有標准模式
在ie6中,標准模式和怪異模式渲染的區別最大
在ie6以下的瀏覽器中,只有怪異模式
###H5
1.DOCTYPE和瀏覽器渲染模式
DOCTYPE,或者稱為 Document Type Declaration(文檔類型聲明,縮寫 DTD)
通常情況下,DOCTYPE 位於一個 HTML 文檔的最前面的位置,位於根元素 HTML 的起始標簽之前。
因為瀏覽器必須在解析 HTML 文檔正文之前就確定當前文檔的類型,以決定其需要采用的渲染模式,
不同的渲染模式會影響到瀏覽器對於 CSS 代碼甚至 JavaScript 腳本的解析
到目前為止,各瀏覽器主要包含了三種模式。在 HTML5 草案中,更加明確的規定了模式的定義:
傳統名稱 HTML5 草案名稱 document.compatMode 返回值
standards mode(strict mode) no-quirks mode CSS1Compat
almost standards mode limited-quirks mode CSS1Compat
quirks mode quirks mode BackCompat
document.compatMode
document.compatMode 屬性最初由微軟在 IE 中創造出來,這是一個只讀的屬性,返回一個字符串,
只可能存在兩種返回值:
BackCompat:標准兼容模式未開啟(怪異模式)
CSS1Compat:標准兼容模式已開啟(標准模式)
在現代主流瀏覽器中,其實怪異模式的渲染和標准與幾乎標准間沒有太大的差別(ie9+ 谷歌 火狐 ...)
ie5.5之前都是ie自己的渲染模式,怪異模式
ie6才開始慢慢支持標准,標准模式,在ie6 中怪異和標准模式的區別最大
ie7 8 9都是基於標准模式升級的,他們理論上存在怪異模式
HTML5提供的<DOCTYPE html>是標准模式,向后兼容的,等同於開啟了標准模式,
那么瀏覽器就得老老實實的按照W3C的 標准解析渲染頁面
一個不含任何 DOCTYPE 的網頁將會以 怪異(quirks) 模式渲染。
2.DTD
<!DOCTYPE html>
當 doctype 信息如上時,表明該頁面是遵守了 HTML5 規范的,瀏覽器會選擇 Standards Mode,這種 doctype 是最推薦的一種,
我們平時設計頁面都應該加上這一個 doctype。
HTML5 不基於 SGML,所以不需要引用 DTD,瀏覽器內部本身有對標簽進行解析渲染驗證的模塊
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
當 doctype 如上時,瀏覽器同樣會選擇 Standards Mode,雖然和第一種 doctype 有一些區別,但是幾乎可以認為是一樣的。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
當 doctype 如上時,瀏覽器會選擇 Almost Standards Mode,渲染時和標准會有一些區別
當 doctype 缺失的時候,瀏覽器會選擇 Quirks Mode,這是非常不推薦的方式,
當 doctype上面有注釋,標簽或者空行時,某些瀏覽器都會認為該頁面不具有doctype。
我們應該盡量避免 Quirks Mode,這對一個 web 應用是非常不利的地方。
4.每種doctype在瀏覽器中對應的渲染模式
https://en.wikipedia.org/wiki/Quirks_mode