1、深刻淺出HTML與XHTML的區別php
2、<!DOCTYPE>css
Document Type 文檔類型,縮寫成DOCTYPE,在html中它就是個標籤:<!DOCTYPE>,它有本身的聲明格式,不是在html標籤前加上它就完事了的,查看qq.com頁面源碼可見以下聲明:html
1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
DOCTYPE 包含 6 部分:chrome
看上去蠻複雜的,不用去糾結,通常只有三種(Strict Transitional Frameset)聲明(以XHTML爲例)瀏覽器
1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
簡單舉例說說strict和transitional的不一樣,按照XHTML Strict DTD的規定(看DTD內容),th標籤是不能有width屬性的,但transitional能夠有網絡
在XHTML Strict DTD聲明的html中出現th標籤屬性width時,則會出現警告信息(以下圖),改爲transitional dta就不會出現警告app
Doctype起啥做用? 框架
上面也提到,Doctype告訴瀏覽器使用什麼樣的html或xhtml規範來解析html文檔,上文說到的DOCTYPE組成中的第5部分所引入的dtd文件則包含了標記、attributes 、properties、約束規則。除此外,Doctype還會對瀏覽器的渲染模式產生影響,不一樣的渲染模式會影響到瀏覽器對於 CSS 代碼甚至 JavaScript 腳本的解析,因此Doctype是很是關鍵的,尤爲是在 IE 系列瀏覽器中,由DOCTYPE 所決定的 HTML 頁面的渲染模式相當重要。ide
兩種渲染模式:佈局
長話短說兩種渲染模式的由來,好久之前W3C標準沒出現的時候,江湖很混亂,頁面上根本就沒有doctype這個東西,亂世出英雄啊,w3c標準出現後頁面上就有了doctype,爲了照顧老前輩的頁面(沒有doctype或使用HTML4如下[不包括HTML4]的DTD聲明),怪異模式就出現了,保證古董頁面能正常顯示;江湖統一以後,你們都開始使用w3c標準,這就是標準模式。
測試ie 八、 ff十、 chrome16的渲染模式,測試文檔以下:(只是給予直觀感覺,並不是全面周到的測試)
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<!--未聲明DOCTYPE-->
<script>document.write(document.compatMode);</script>
</body>
</html>
結果爲:
IE 8.0:BackCompat Firefox 10.0:BackCompat Chrome 16.0:BackCompat
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<!--聲明DOCTYPE-->
<script>document.write(document.compatMode);</script>
</body>
</html>
結果爲:
IE 8.0:CSS1Compat Firefox 10.0:CSS1Compat Chrome 16.0:CSS1Compat
說了半天的doctype對渲染模式的影響,有什麼用呢?不一樣的渲染模式對CSS2.1規範的解析有很大差別,尤爲是對盒模型的解釋,因此咱們的目標是如何聲明doctype以使咱們的頁面被以標準模式解析,這是關鍵。
Doctype的選擇!!
上面已經提到,頁面中的Doctype的聲明會影響瀏覽器的渲染模式,渲染模式又跟頁面最終的呈現效果息息相關,因此儘可能選擇那些能「激活」主流瀏覽器標準模型的Doctype。
[from KB001: 兼容性問題與瀏覽器的內核及渲染模式]
表中提到了「近似標準模式」
近似標準模式(Almost Standards Mode)從字面意思上看與標準模式很是相似,但確實有小的差異。主要體如今對於表格單元格內垂直方向佈局渲染差別。IE8 開始、Firefox、Chrome、Safari、Opera 7.5 開始,這些瀏覽器的標準模式更加嚴格的遵循了 CSS2.1 規範,故對於在目前看來不太「標準」的之前的標準模式,被賦予了「近似標準模式」的名字。可是在較早的 IE6 IE7 以及 Opera 7.5 以前版本中,瀏覽器沒法嚴格遵循 CSS2.1 規範,故對於它們來講沒有這個近似標準模式,也能夠理解爲它們的近似標準模式就是標準模式。
至於如何選擇,參考表格天然明白,不用廢話了!
參考資料很重要!!
【HTML <!DOCTYPE> 標籤】http://www.w3cschool.cn/tag_doctype.html
【CS002: DOCTYPE 與瀏覽器模式分析】http://w3help.org/zh-cn/casestudies/002
【KB001: 兼容性問題與瀏覽器的內核及渲染模式】http://w3help.org/zh-cn/kb/001