DTD(Document Type Definition)是一個(gè)XML文檔,解釋了哪些標(biāo)簽、屬性或值對(duì)于HTML的一個(gè)特定類型是有效的。HTML遵循一定的規(guī)則。這些規(guī)則包含在一個(gè)文檔類型定義(Document Type Definition)文件中,或者如大家所知的DTD。每一個(gè)HTML版本,都有一個(gè)對(duì)應(yīng)的DTD,F(xiàn)在你可能會(huì)問(wèn):“所有這些和CSS又有什么關(guān)系呢?”
如果想讓網(wǎng)頁(yè)中的所有內(nèi)容都在網(wǎng)頁(yè)瀏覽器上正確、一致地顯示,就得告訴網(wǎng)頁(yè)瀏覽器你正使用HTML或者XHTML的哪個(gè)版本,包括一個(gè)網(wǎng)頁(yè)開(kāi)頭處的文檔類型聲明(doctype declaration)是什么意思。這個(gè)文檔類型聲明是在HTML文件的第一行,不僅定義你正使用的HTML版本(比如HTML 4.01 Transitional),而且指向網(wǎng)頁(yè)中適當(dāng)?shù)腄TD文件。當(dāng)鍵錯(cuò)文檔聲明時(shí),你會(huì)使大部分瀏覽器進(jìn)入一個(gè)叫怪異模式(Quirks Mode)(譯注1)的警告狀態(tài)。
怪異模式(Quirks Mode)是瀏覽器制造商為使他們的軟件運(yùn)行起來(lái)就像大約1999年(Netscape 4和Internet Explorer 5時(shí)代)時(shí)的瀏覽器所采用的方法。如果一個(gè)現(xiàn)代瀏覽器遇到一張沒(méi)有正確文檔類型的網(wǎng)頁(yè),它就會(huì)以為:“嗯,這張網(wǎng)頁(yè)一定是很早很早以前用HTML編輯器寫的。我得假裝自己是一個(gè)真正很舊的瀏覽器來(lái)顯示網(wǎng)頁(yè),就像那些bug重重的舊瀏覽器所顯示的那樣!边@就是為什么當(dāng)沒(méi)有一個(gè)正確的文檔類型時(shí),你用CSS進(jìn)行樣式設(shè)置的可愛(ài)網(wǎng)頁(yè),可能看起來(lái)并不像它根據(jù)當(dāng)前的標(biāo)準(zhǔn)所應(yīng)該顯示的樣子。當(dāng)你在瀏覽器上檢測(cè)時(shí),無(wú)意中用怪異模式(Quirks Mode)瀏覽到你的網(wǎng)頁(yè),你可能會(huì)停止嘗試去修正與不正確的文檔類型有關(guān)、而不是不正當(dāng)使用HTML或者CSS所引起的顯示問(wèn)題。
所幸的是,獲得正確的文檔類型很簡(jiǎn)單。你所要知道的就是正在使用哪個(gè)HTML版本。目前最流行的HTML和XHTML的版本是HTML 4.01 Transitional和XHTML 1.0 Transitional。這些HTML類型仍然讓你使用展示型的標(biāo)簽,如標(biāo)簽,在這方面還提供一個(gè)從舊版HTML到新版HTML的過(guò)渡:更嚴(yán)格的HTML和XHTML標(biāo)簽。雖然最好不要使用這些標(biāo)簽,但它們?cè)赥ransitional版中仍然起作用,因此你可以根據(jù)自己的情況,逐步淘汰這些舊式標(biāo)簽。在嚴(yán)格版的HTML和XHTML中,有些舊式標(biāo)簽根本不起作用。
注意:一般來(lái)說(shuō),HTML和XHTML的嚴(yán)格版均不接受僅使網(wǎng)頁(yè)展現(xiàn)效果好看的標(biāo)簽和屬性,如標(biāo)簽和一個(gè)段落的置中屬性。它們也不接受一些曾經(jīng)流行的屬性,比如一個(gè)鏈接的目標(biāo)屬性——讓你在一個(gè)新窗口中打開(kāi)鏈接。