發展歷史
在HTML的早期發展中,W3C成立之前,很多標準的制定都是在瀏覽器的開發者們互相討論的情況下完成的,比如HTML 2.0, 3.2直到4.0, 4.01,這些標準大部分都是所謂的retro-spec,即先有實現后有標準。在這種情況下,HTML標準不是很規范,瀏覽器也對HTML頁面中的錯誤相當寬容。這反過來又導致了HTML作者寫出了大量的含有錯誤的HTML頁面。
W3C隨后意識到了這個問題,并認為這是互聯網的一個基礎性問題,應該加以解決。為了規范HTML,W3C結合XML制定了XHTML 1.0標準,這個標準沒有增加任何新的tag,只是按照XML的要求來規范HTML,并定義了一個新的MIME type,application/xhtml+xml。W3C的初衷是對這個MIME type瀏覽器要實行強錯誤檢查,既如果頁面有HTML錯誤,就要顯示錯誤信息。但是由于已有的web頁面中已經有了大量的錯誤,很多開發者拒絕使用新的MIME type。W3C不得已,在XHTML 1.0的標準之后加了一個附錄C,允許開發者使用XHTML語法來寫頁面,同時使用舊的MIME type,application/html,來分發頁面。這個舊的MIME type不會觸發瀏覽器的強錯誤檢查。這就是我們今天看到的情況,很多網站宣稱自己遵守XHTML 1.0標準,那只不過是說,他的頁面中用了XHTML語法,但并不能保證完全沒有錯誤。要驗證XHTML有沒有真正起效,需要查看web服務器使用哪種MIME type來分發頁面的。
W3C隨后在XHTML 1.1中取消了附錄C,即使用XHTML 1.1標準的頁面必須用新的MIME type來分發。于是這個標準并沒有很多人采用。這種情況同樣發生在尚未完成的XHTML 2.0身上,它要求強錯誤檢查,于是沒有人采用。XHTML的故事也告訴我們,有時候先有標準再來實現,是行不通的。
當XHTML 1.0和XHTML 1.1取得比較大的成功時,W3C自信心爆棚,整個業界都認為W3C聯盟戰勝了IE,IE受到越來越多瀏覽器的挑戰,如Chrome、Firefox、Webkit,終于,內容提供商開始傾向于提供非IE兼容的內容,IE瀏覽器的絕對市場壟斷地位被打破了。人們都以為這是民眾的勝利,標準的勝利,W3C的勝利。
同時,XML的成功也沖昏了W3C HTML工作小組的頭腦,越來越多的協議選擇XML作為底層接口。讓我們全部都使用XML吧,W3C就這么愉快的決定了。但很顯然的,W3C真是圖樣圖森破。標準,永遠是掌握在瀏覽器廠家手里的。事實上,IE的市場份額只是被WebKit核心蠶食了而已。市場標準只是從一個寡頭手里到了另一個寡頭手里。一意孤行的XHTML 2.0竟然大膽的與原先的HTML不再兼容,瀏覽器廠商終于怒了,Mozilla和蘋果牽頭,WHATWG小組成立。失去了廠商支持的W3C的XHTML2標準很快就成為了一個笑話
HTML5誕生
關于XHTML失勢的原因其實很簡單,因為網頁開發比起學術與嚴謹性來說,更看重的是功能性與健壯性。XHTML是學術派的w3c開發的,并未給HTML帶來新功能,只是用XML來規范HTML,試圖用XML來抹平HTML設計的一些缺陷(最重要的就是瀏覽器的不同解釋——而導致瀏覽器解釋不同的原因是HTML4并未規定對于不合法的HTML頁面統一的容錯體系,這導致了不同瀏覽器各自采用了自己的容錯機制,間接導致了同一個頁面在不同瀏覽器上的不同渲染),這對于網頁設計師來說,除了自己以前寫的一些不大規范的HTML頁面無法工作外,不能帶來任何正面意義(對于整個業界的正面意義倒是有——就是讓HTML更加規范和嚴謹——不過顯然這樣的“意義”太過空泛而無法被大多數設計人員接受)。
HTML5則是直接由站在HTML應用第一線的網絡公司(Google, Adobe)和瀏覽器廠商(Moz, Opera, Apple)開發的,比起規范限制,采用了更容易被接受的做法:對HTML的容錯方法做出統一定義,這樣無論是什么瀏覽器,只要根據標準實現容錯方法,即使網頁出現缺陷,其渲染結果也是完全一樣的。換句話說,網頁設計師在遷移到HTML5的時候,基本可以不做任何事情。以前即使存在一定缺陷的非標準網頁也能正常而且同一地被渲染出來。在這之上,HTML5增加了非常多的應用特性,包括新tags, CSS3, 更多系統JS API等等,極大增強了網頁app的功能,能被廣泛接受和推廣也是情理之中的事情。說到這里再解釋預測失誤就很容易理解了,贊同XHTML的人是被HTML4標準缺陷深受其害,覺得業界會向一個更標準更完備的方向前進;然后HTML5不僅解決了標準缺陷的問題,還帶來了更多更好的特性,當然就勝出了。