HTML網頁設計與XHTML網頁設計的差別
現在有許多網站前台網頁設計師可能仍然混淆HTML和XHTML這兩種規範標準,雖然HTML和XHTML看起來在語法上類似,但在很多方面顯著的不同。
本文詳細介紹了這兩者之間的區別不同。
1.MIME[1]類型(MIME Types)
2.解析(Parsing)
3.語法(Syntax)
4.標記(Markup)
5.字元編碼(Character Encoding)
6.程式碼(Scripts)
7.樣式表(Stylesheets)
請注意以下資訊是基於(X)HTML5的當前規範,某些技術上問題並不適用於HTML的早先版本。
雖然HTML和XHTML看起來在語法上類似,但在很多方面顯著的不同。
注:由於當前的WHATWG[2]文檔是一個草案,這個部分需要跟隨一個變化的物件。標記@@@的不同是從理論上可以被改變且不影響向後相容的不同。
MIME類型(MIME Types)
1.XHTML必須以XML MIME類型來提供,例如application/xml 或 application/xhtml+xml。
2.HTML必須以text/html來提供。
MIME類型決定了使用檔的類型。如果嘗試使用text/html來發送XHTML,你實際上僅使用了HTML,可能有語法錯誤。
技術上,依據規範,XHTML1.0被允許作為text/html來發送。但是正是由於上面的原因,這樣的一個檔被認為是HTML檔而不是XHTML檔
解析(Parsing)
XHTML用XML解析請求。HTML用它自己定義的更接近當前瀏覽器實際處理HTML的方式。
1.在XHTML中,良構性(well-formedness)錯誤是致命的。在HTML中,錯誤處理規則更加優雅。良構性錯誤在HTML也是語法錯誤,包括以下:1.未編碼的和符號(&替代&)和小於符號(<替代<)(這並不應用於CDATA)。(注:在HTML中,未編碼的和符號在一些情況下是被允許的。)
2.注釋包含額外的連接字元或以一個連接字元結尾。例如:<!--語法--錯誤--> or <!--語法錯誤--->
3.不匹配結束標籤。(不適用於可選標籤元素)
4.不閉合標籤。
5.非法字元出現在屬性名稱前或中。
6.檔結束(EOF)意外發生。
7.非法的字元出現在DOCTYPE名前。
8.丟失DOCTYPE名。
9.在DOCTYPE中PUBLIC識別字沒有SYSTEM識別字。(注:在HTML5中包含這些中的任何一個是語法錯誤,在XML中允許唯一的SYSTEM識別字出現在它自己中。)
10.有屬性的結束標籤。
11.非法結束標籤。(在HTML中,一個非法的</br>和</p>會導致產生隱含在它之前的開始標籤。)
1.內部子集在XML中是允許的,在HTML中是無意義的(且被禁止)
1.在一些情況下,HTML中的內部子集最終部分內聯呈現。
2.當符號序列“]]>”在內容中不標記一個CDATA段的結束時,在XHTML中是一個良構性錯誤,但在HTML中是有效的。
3.<![CDATA[...]]>,在XHTML中是一個CDATA片段,在HTML中是一個偽造的注釋。
4.<?foo …?>,在XHTML中是一個處理指令,在HTML中是一個偽造的注釋。
5.在HTML中,用於空元素語法的尾部斜線在非空(non-void)元素(見下)中會有解析錯誤,但在所有情況下都被忽略。
6.在HTML中,script和style元素作為CDATA解析。(注:這個CDATA的定義不同於XML中的。)在XML中,它們作為普通元素解析(這意味著注釋被當著真正的注釋,看起來像起始標籤的就是起始標籤)。
7.在HTML中,title和textarea元素作為RCDATA被解析。(RCDATA定義不同於SGML中的,也不是XML的RCDATA.)
8.在HTML中,如果程式碼執行(scripting)是可用,noscript元素作為CDATA被解析。如果程式碼執行是不可用的,它作為PCDATA被解析。在XHTML中,這個元素是沒有作用的,當程式碼執行不可用時,不能真正被用於阻止內容將要呈現。
9.在HTML中,iframe,noembed和noframes作為CDATA解析。在XHTML中作為普通元素被解析,因此不能阻止內容被使用。
10.在XHTML中屬性值的空格(white space)符被標準化為空白[3]。
11.在HTML中,可選標籤的元素在特定情況下被隱藏。
12.在HTML中,在body中出現的帶標籤的title元素被轉移到head中。在XHTML中,它停在指定它的地方。
13.在HTML中,脫離上下文(context)出現的特定元素的標籤被忽略。包括:caption,col,colgroup,frame, frameset,head,option,optgroup,tbody,td,tfoot,th,thead,tr。
14.plaintext在HTML中有一個特別的解析請求。(無論如何,它都是被禁止的。)
15.這並不是全部的在HTML中發生的邊界狀態和錯誤條件。
語法(Syntax)
1.在HTML中,doctype是必須的。在XHTML中是可選的。
2.在XHTML中,標籤名和屬性名是大小寫敏感的。在HTML中,它們是不敏感的。
3.在XHTML中,非空元素必須有一個開始標籤和一個結束標籤。在HTML中,某些元素允許省略一個或兩個標籤。
1.html (兩個)
2.head (兩個)
3.body(兩個)
4.li (結束標籤)
5.dt (結束標籤)
6.dd (結束標籤)
7.p (結束標籤)
8.colgroup (兩個)
9.thead (結束標籤)
10.tbody(兩個)
11.tfoot (結束標籤)
12.tr (結束標籤)
13.td (結束標籤)
14.th (結束標籤)
4.在XHTML中,空元素可以用空元素語法(<br />)或一個結束標籤緊跟在開始標籤的後面(<br></br>)。在HTML中,空元素(empty elements)語法(尾部斜線)允許出現在空元素(void elements)上[4],但是禁止在非空元素上。無論如何,它沒有任何意義可言,可以省略。對於空元素,結束標籤是禁止的。1.base, link, meta, hr, br, img, embed, param, area, col 和 input。
2.注:在解析請求時,下面的元素被當作空元素對待,因為它們是過時和不標準的。尾部斜線是不允許的:basefont, bgsound, spacer,wbr(在任何方式下這些元素都是不允許的,所以它們沒有太多不同)。
5.HTML允許屬性最簡化(minimisation),比如省略這個值,而XHTML不允許。
6.HTML允許使用沒有引號的屬性值,而XHTML不允許。
7.XHTML允許使用CDATA片段,而HTML不允許。
8.XHTML允許處理指令,而HTML不允許。
9.在HTML中,所有實體引用(entity references)都是預定義的,不請求一個文檔類型定義(DTD[5])。但是由於XHTML5沒有DTD,實體引用不能用在XHTML中(包括5中預定義的實體:&amp;,&lt;,&gt;,&quot; 和&apos;)。1.可以用自己的驗證解釋器提供自己的DTD,但是瀏覽器不能使用這個驗證解析器而將無法讀取DTD。
10.一套合法的unicode字元集在XML1.0中的限制遠超在HTML中。
11.XHTML允許命名空間首碼,但是HTML禁止。
標記(Markup)
1.在XHTML中,命名空間聲明(xmlns屬性)是必須的。在HTML中的html元素也允許xmlns屬性出現,其值是”http://www.w3.org/1999/xhtml”。1.<html xmlns=”http://www.w3.org/1999/xhtml”>
2.在HTML中,xmlns沒有絕對作用。它基本上是一個護身符。它被允許僅僅是為了從XHTML移植過來更容易。當被HTML解析器解析時,這個屬性最終處於無效的(null)命名空間中。
3.在XML(和XML命名空間理解的解析器)中,xmlns屬性是其命名空間聲明機制的一部分,一個元素實際上在無效的命名空間中是不能有xmlns屬性的。當DOM執行時,這個屬性最終在”http://www.w3.org/2000/xmlns/”命名空間中。
2.XHTML允許使用非XHTML元素和屬性(在不同的命名空間),HTML不允許。
3.XHTML用xml:lang屬性,HTML用lang屬性代替。
4.XML ID引入xml:id,能用在XHTML中,但在HTML中沒有作用。
5.在HTML中,noscript能被使用,在XHTML中,它是禁止的。
6.HTML用base元素,XHTML用xml:base代替。
7.在XHTML中,p元素也許包含結構化的內聯級(inline level)元素,包括blockquote, dl, menu, ol, ul, pre 和 table。在HTML序列化中,由於向後相容的限制,這是不可能的(雖然它或許可以通過DOM操作實現)。
8.在XHTML中,table元素或許包含子tr元素。在HTML序列化中,由於向後相容的限制,這是不可能的(雖然它或許可以通過DOM操作實現)。
字元編碼(Character Encoding)
1.在XHTML中,XML聲明被用於指定的字元編碼。在HTML中,禁止XML聲明。
2.在HTML中,帶有一個charset屬性的meta可以用於代替。在XHTML中,如果有包含它,它是被禁止且忽略的。
3.XHMTL的預設編碼是依據XML規則,UTF-8或UTF-16。在HTML中如果沒有聲明編碼,它應該決定執行一個特別的啟發式的或退回到一個預設的值。(規範中本章節還未完成)
程式碼(Scripts)
1.document.write()和document.writeln()不能用在XHTML中,但能用在HTML中。
2.在XHTML中,通過innerHTML屬性獲取的字串必須是一個良構的XML片段。
3.DOM APIs在XHTML中是大小寫敏感的,但是一些在HTML中是不敏感的。(不適用於那些不在HTML命名空間的元素。)1.Element.tagName, Node.nodeName,和 Node.localName 返回是大寫的值。
2.Document.createElement()是大小寫不敏感的(規範寫法是小寫)。
3.Element.setAttributeNode()將會把屬性名改成小寫。
4.Element.setAttribute()是大小寫不敏感的(規範寫法是小寫)。
5.Document.getElementsByTagName()和 Element.getElementsByTagName()是大小寫不敏感的。
6.Document.renameNode()。如果新的命名空間是HTML命名空間,在重命名執行之前新的合格的名字必須是小寫。
4.在HTML中,Document.createElement()在HTML命名空間下創建一個元素。在XML(包括XHTML),這個被DOM2和DOM3定義的命名空間是空的。
5.在XHTML中,瀏覽器在這個領域缺乏通用性。在Firefox,這個命名空間依賴於MIME類型。在Opera它依賴於根元素,而在Safari,它一直是無效的。
樣式表(Stylesheets)
1.用於CSS中的選擇器(selectors)匹配在XHTML中是大小寫敏感的,在HTML中大小寫不敏感的。
2.在HTML中在畫布上渲染背景,CSS請求body元素的特殊處理,但不適用於XHTML。
原文: Differences Between HTML and XHTML
轉貼來源:網頁設計博客
參考文獻:
1.林建煌 (2007), 消費者行為, 台北市: 智勝文化.
2.林永惟、宋同正 (2008), 商業平面設計之設計品質, 商業設計學報, 12(), 19-34.
3.陳良進 (2000), 台灣地區公民營風景遊樂區網站比較之研究, 高雄餐旅學報, 3(), 19-28.
相關文章
簡單應用網頁設計編輯器操作智慧手機與網頁設計不同之處網頁設計與平面設計的差別網頁設計一些問題與技巧注重一個好的網站需要什麼網頁設計要素
最新文章
HVACKer:入侵隔離網絡的新型攻擊技術還有什麼不會被入侵?路由器 LED 燈已成為攻擊入口美 5 家獨角獸同天申請 IPO 掛牌,最狂的是一家估值 124 億美的數據分析新創!【台灣「智慧產業」開始佈局】緯創集團領投跨國 AI 新創 iKala,下一步拓展東南亞市場快可以用手機遠端遙控你的所有家電了