聲明位於文檔最前端,在 標籤之前,用於告知瀏覽器文檔遵循哪種 HTML 或 XHTML 規範。它可聲明三種 DTD 類型:嚴格版、過渡版、框架版。若文檔標記不符合聲明的 DTD,不僅無法通過代碼驗證,還可能導致瀏覽器渲染異常。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
上例中,根元素為 html,公共標識符為 "-//W3C//DTD XHTML 1.0 Strict//EN"。瀏覽器會尋找匹配的 DTD,找不到則使用 URL 定位。關鍵字段含義:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "https://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "https://www.w3.org/TR/html4/frameset.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
關鍵在於讓 DTD 與文檔遵循的標準對應。若文檔遵循 XHTML 1.0 Strict,聲明必須引用對應 DTD;混用會導致不匹配。若無有效聲明,瀏覽器會使用內建預設 DTD 嘗試渲染(通常是寫得很糟的頁面才會觸發)。
主流大站(京東、淘寶、博客園)多採用 XHTML 1.0 Transitional,但百度、Google 已改用 <!doctype html>。因 HTML5 不基於 SGML,無需引用 DTD,僅需 DOCTYPE 觸發瀏覽器標準模式。建議今後直接使用 <!doctype html>,開啟標準兼容模式,雖不保證兼容 IE6 以前版本,但已是最佳實踐。