Doctype:(Document Type)文檔類型,它位於文檔中最前面的位置,處於標簽之前。如果你想制作符合標准的頁面,一個必不可少的關鍵組成部分就是DOCTYPE的聲明。確定了正確的Doctype,xhtml里面的標識和css才能正常生效(也就是說它會很負責地告訴瀏覽器怎么解釋你的這個標簽和你寫的css)。既然它是一種聲明,它的責任就是告訴瀏覽器文檔使用哪種html或者xhtml規范。為了獲取正確的Doctype聲明,關鍵就是讓dtd與文檔所遵循的標准對應。例如:假定文檔遵循的是xhtml 1.0 strict,那么文檔的Doctype聲明就應該是相應的dtd,如果Doctype聲明指定的是xhtml dtd,但文檔包含的依舊是html標記就是不恰當的。類似的,如果文檔包含的是xhtml 1.0 strict標記,但是Doctype聲明指定是html dtd也是不恰當的。
一、選擇什么樣的DOCTYPE?
xhtml 1.0中有3種dtd聲明可以選擇,過渡性的(Transitional)、嚴格的(Strict)、框架的(Frameset)。下面我們來分別介紹:
1、過渡的:一種要求不很嚴格的,允許在html中使用html 4.01的標識(符合xhtml語法標准),過渡的dtd寫法如下:
|
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2、嚴格的:一種要求嚴格的dtd,不允許使用任何表現層的標識和屬性,嚴格的dtd寫法如下:
|
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3、框架的:一種專門針對框架頁面所使用的dtd,當頁面中含有框架元素時,就要采用這種dtd,寫法如下:
|
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
PS:使用嚴格的dtd來制作頁面當然是最理想的方式,但是對於還沒有深入了解web標准的網頁設計者,比較適合用過渡的dtd,因為這種dtd還允許使用表現層的標識、元素和屬性,比較適合大多數的網頁制作人員(當然量力而為了!)
二、什么是標准模式與混雜模式?
不同文檔模式主要影響CSS內容的呈現,尤其是瀏覽器對盒模型的解析,但在某些情況下也會影響到JavaScript的解釋執行。
1、文檔模式目前有四種:
混雜模式(quirks mode)
//讓IE的行為與(包含非標准特性的)IE5相同
標准模式(standards mode)
//讓IE的行為更接近標准行為
准標准模式(almost standards mode)
//這種模式下的瀏覽器特性有很多都是符合標准的,不標准的地方主要體現在處理圖片間隙的時候(在表格中使用圖片時問題最明顯)。
超級標准模式:
//IE8引入的一種新的文檔模式,超級文檔模式可以讓IE以其所有版本中最符合標准的方式來解釋網頁內容。
ps:
總的來看,混雜模式讓IE像IE5,標准模式使用IE7的呈現引擎,而超級標准模式則是IE8的默認文檔模式。
(另一篇關於混雜模式解釋:
什么是混雜模式呢?
混雜模式是一種比較寬松的向后兼容的模式。混雜模式通常模擬老式瀏覽器的行為,以防止老站點無法工作。
為什么會有混雜模式呢?
當年Netscape4(譯注:網景公司早期的瀏覽器)和IE4(微軟公司早期的瀏覽器)實現CSS機制時,並沒有遵循W3C提出的標准。Netscape4 提供了糟糕的支持,而IE4 雖然接近標准,但依舊未能完全正確的支持標准。盡管IE 5 修復了IE4 許多的問題(bugs),但是依然延續CSS實現中的其它故障(主要是盒模型(box model)問題)。為了保障自己的網站在各個瀏覽器上顯示正確,網頁開發者們不得不依據各個瀏覽器自身的規范來使用css,因此大部分網站的css實現並不符合W3C規范的標准。然而隨着標准一致性越來越重要,瀏覽器開發商不得不面臨一個艱難的抉擇:逐漸遵循W3C的標准是前進的方向。但是改變現有的 css,完全去遵循標准,會使許多舊網站或多或少受到破壞,如果瀏覽器突然以正確的方式解析現存的css,陳舊的網站的顯示必然會受到影響。所以,所有的瀏覽器都需要提供兩種模式:混雜模式服務與舊式規則,而嚴格模式服務於標准規則
三、怎么觸發它們呢?
根據Doctype是否存在以及使用哪種DTD來觸發其不同的模式。如果Doctype不存在或者其形式不正確那么默認為混雜模式。如果XHTMLl文檔中包含完整的Doctype,那么它一般以標准模式呈現。
2、如何觸發文檔模式:
- 觸發混雜模式:
如果在文檔開始處沒有發現文檔類型聲明,則所有瀏覽器都會默認開啟混雜模式。但采用混雜模式不是什么值得推薦的做法,因為不同瀏覽器在這種模式下的行為差異非常大,如果不使用某些hack技術,跨瀏覽器的行為根本就沒有一致性可言。 - 觸發標准模式:
<!-- HTML 4.01 嚴格型 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!-- XHTML 1.0 嚴格型 --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- 觸發准標准模式:
<!-- HTML 4.01 過渡型 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!-- HTML 4.01 框架集型 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <!-- XHTML 1.0 過渡型 --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- XHTML 1.0 框架集型 --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
- IE8中關閉超級標准模式:
<meta http-equiv="X-UA-Compatible" content="IE=7" /> //content屬性中IE的值用於指定使用哪個版本的呈現引擎來呈現頁面。設計這個值的目的就是為了向后兼容那些專門為老版本的IE設計的站點和頁面。
