其實XHTML 1.0還分兩種(加上Frameset DOCTYPE的話算三種,本文不討論),Transitional(過渡型)和Strict(嚴格)DOCTYPEs。並且HTML 4.01也有同樣的文檔聲明。
在推廣Web標準的今天,那些崇尚Web標準的人經常說XHTML比HTML更加嚴格,當然從某種意義上說是的,比如它要求所有的標籤關閉並且所有的屬性都用引號。但其實XHTML 1.0還分兩種(加上Frameset DOCTYPE的話算三種,本文不討論),Transitional(過渡型)和Strict(嚴格)DOCTYPEs。並且HTML 4.01也有同樣的文檔聲明。
從字面上就可以看出來意思:Transitional DOCTYPEs只是為了實現從舊時代到新時代的過渡,而且Strict DOCTYPEs是默認的文檔聲明, 對構造HTML 4.01和XHTML 1.0都適用。
使用Transitional DOCTYPE一般是由於代碼中含有過多陳舊的寫法,並且一下子很難完全轉換到Strict DOCTYPE來。但是Strict DOCTYPE才應該是你的目標。它鼓勵甚至有時是強迫你把結構與表現區分開來,把表現層的代碼都寫在CSS裡。 HTML 4 Document Type Definition:
本HTML 4.01 Strict DTD不包括表現層屬性和標籤,W3C將逐漸淘汰這些屬性和標籤,您完全可以使用樣式表來實現。您應該使用Strict DTD,如需獲得表現層屬性和標籤的支持,請使用Transitional DTD。
用Strict DOCTYPE還有一個好處,即可以讓瀏覽器使用它們最嚴格、(一定程度上)最符合標準的模式來渲染頁面。
Tommy Olsson在Web Standards Group的Ten questions for Tommy Olsson一文中很好的闡述了使用Strict的好處:
我覺得,使用Strict DTD,無論是HTML 4.01 Strict還是XHTML 1.0 Strict,遠比討論是用HTML還是XHTML重要的多。它代表了未來互聯網的質量。它將結構和表現分開,使得維護一個站點非常容易。
對於剛開始接觸web standards和正確的、語義化的結構的人,認清Transitional和Strict DOCTYPEs的區別非常重要。更多詳細列表請參考:XHTML: Differences between Strict & Transitional、Comparison of Strict and Transitional XHTML和XHTML1.0 Element Attributes by DTD。
對於準備向Strict進發的人來說,兩者的有些區別很可能會使開發者犯錯誤,接下來我將會談到。在Strict DOCTYPEs下不支持的標籤center font iframe srike u 在Strict DOCTYPEs下不支持的屬性align (表格相關的支持:col, colgroup, tbody, td, tfoot, th, thead, and tr) language background bgcolor border (table支持) height (img和object支持) hspace name (在HTML 4.01 Strict中支持,XHTML 1.0 Strict中的form和img不支持) noshade nowrap target text, link, vlink, 和alink vspace width (img, object, table, col, 和colgroup都支持) 內容模型的區別
元素類型的內容模型描述了什麼樣的元素類型實例可以被包含。這一點上,兩種文檔聲明的最大區別在於blockquote, body, 和form元素僅能夠包含塊級元素,如: 文本和圖像不允許直接包含在body中,必須被p或者div等塊級元素包含input元素不能直接是form元素的下一層blockquote元素內的文本,必須被p或者div等塊級元素包含將所有的表現都交給CSS,恪守Strict標準
在向Strict DOCTYPEs過渡的過程中,了解每個元素是做什麼的比知道每個元素長啥樣有效的多。
首先考慮結構和語義,然後再擔心表現。