HTML 向 XHTML1.0 兼容性指導(dǎo)
更新時(shí)間:2006年12月17日 00:00:00 作者:
1 處理說(shuō)明
一些用戶(hù)代理程序會(huì)顯示處理說(shuō)明。但是,注意當(dāng)文檔中沒(méi)有XML聲明時(shí),文檔只能用缺省的字符編碼UTF-8 或 UTF-16。
2 空元素
在空元素結(jié)束符 / 和 > 前加一個(gè)空格,如 <br />,<hr /> 和 <img src="karen.jpg" alt="Karen" />. 還有,使用最小化的標(biāo)簽語(yǔ)法,如<br />,因?yàn)榱硪环NXML允許的語(yǔ)法 <br></br> 在很多現(xiàn)有用戶(hù)代理程序會(huì)導(dǎo)致不可靠的結(jié)果。
3 元素最小化和空元素內(nèi)容
內(nèi)容模型不是空的元素,在為空的場(chǎng)合(如空title或空段落),不要用最小化形式(如 用 <p> </p>,不用 <p />).
4 嵌入的樣式表和Script
如果你的樣式表使用 < 或 & 或 ]]> 或 --,用外部樣式表。如果你的script用 < 或 & 或 ]]> 或 --,用外部script。 注意XML分析程序會(huì)在不告知的情況下除去注釋的內(nèi)容。因此,以前用注釋的方法”隱藏”script和樣式表的習(xí)慣使文檔可以向后兼容,但是可能在基于XML的執(zhí)行時(shí)不能按預(yù)期工作。
5 在屬性值內(nèi)部分行
在屬性值中避免使用分行和多個(gè)空格符。用戶(hù)代理程序處理這些情況時(shí)不一致。
6 Isindex
在文檔的head部分不要使用超過(guò)一個(gè) isindex 元素. isindex 元素不被贊成使用,贊成使用input元素。
7 lang 和 xml:lang 屬性
在指定元素的語(yǔ)言時(shí)同時(shí)使用 lang 和 xml:lang 屬性。xml:lang 屬性在前。
8 片段標(biāo)識(shí)符
在 XML中,以"#foo"形式結(jié)束片段標(biāo)識(shí)符URI [RFC2396] 不是指元素有一個(gè)屬性name="foo",而是指元素有一個(gè)被定義為ID類(lèi)型的屬性,如,HTML 4中的id屬性。很多HTML客戶(hù)程序不以這種方式支持ID類(lèi)型屬性,所以,可以將相同的值同時(shí)附給這兩個(gè)屬性,以保證最大程度的向后和向前兼容。(如 <a id="foo" name="foo">...</a>).
此外,因?yàn)镮D類(lèi)型屬性的合法值集比CDATA類(lèi)型屬性的值集小得多,name屬性被改為NMTOKEN。這個(gè)屬性被限制為只有和ID類(lèi)型或XML1.0 2.5節(jié)中的Name產(chǎn)品同樣的值。不幸的是,XHTML的DTD不能表示出這個(gè)限制。因?yàn)檫@個(gè)改變,在轉(zhuǎn)換現(xiàn)有的HTML文檔時(shí)要加以注意。 如果在轉(zhuǎn)換時(shí)值可能會(huì)改變,這些屬性的值在文檔中必須是唯一的,有效的,任何對(duì)這些片段標(biāo)識(shí)符的引用(不管是內(nèi)部還是外部)必須更新。
最后,注意不贊成在 a,applet,form,frame,iframe,img,和 map 元素中使用name屬性,在以后的XHTML版本中,它將被去除。
9 字符編碼
要指定文檔中的字符編碼,同時(shí)在xml聲明中使用編碼屬性指定 (如. <?xml version="1.0" encoding="EUC-JP"?>) 和在meta中用 http-equiv 語(yǔ)句 (如 <meta http-equiv="Content-type" content='text/html; charset="EUC-JP"' />).xml處理指令的編碼屬性值在前。
10 布爾屬性
一些HTML用戶(hù)代理程序在布爾屬性以完全(非最小化)形式出現(xiàn)時(shí)不能解釋它們,而這是XML1.0必須的。注意這個(gè)問(wèn)題不會(huì)影響用戶(hù)代理程序?qū)TML 4的兼容。包括以下一些屬性: compact,nowrap,ismap,declare,noshade,checked,disabled,readonly,multiple,selected,noresize,defer.
11 文檔對(duì)象模型和 XHTML
文檔對(duì)象模型 level 1 推薦標(biāo)準(zhǔn) [DOM] 定義XML和HTML 4的文檔對(duì)象模型。 HTML 4 文檔對(duì)象模型規(guī)定HTML元素名和屬性名以大寫(xiě)形式返回。XML文檔對(duì)象模型規(guī)定元素名和屬性名以它們被指定的形式返回。在 XHTML 1.0中,元素和屬性指定為小寫(xiě)形式。對(duì)這個(gè)顯著的差別可以用兩種方式處理:
通過(guò)DOM訪問(wèn)text/html internet媒體類(lèi)型XHTML文檔的應(yīng)用程序可以使用HTML DOM,還可以依賴(lài)這些界面返回的大寫(xiě)的元素名和屬性名。
通過(guò)DOM訪問(wèn)text/xml或application/xml internet媒體類(lèi)型XHTML文檔的應(yīng)用程序也可以使用XML DOM. 元素名和屬性名將以小寫(xiě)形式返回。 并且,一些 XHTML 元素可以也可以不出現(xiàn)在對(duì)象樹(shù)中,因?yàn)樵趦?nèi)容模型中它們是可選的(如table中的 tbody 元素). 在HTML 4中,一些元素可以允許被最小化以至于它們的開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽都被忽略(SGML特性),所以可以發(fā)生。但是在XML中不行。XHTML使元素成為可選的,而不是要由文檔作者來(lái)插入外來(lái)元素。相應(yīng)地,應(yīng)用程序需要適應(yīng)這一點(diǎn)。
12 在屬性值中使用 &
在屬性值中含有&符號(hào)時(shí),它必須用字符實(shí)體引用來(lái)表示 (即 "&"). 例如,當(dāng)一個(gè)元素的 href 屬性指向一個(gè)接收參數(shù)的 CGI腳本時(shí),它必須表示為http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user,而不是 http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user.
13 層疊樣式表和XHTML
層疊樣式表 level 2推薦標(biāo)準(zhǔn) [CSS2] 定義style的屬性,用于分析HTML和XML文檔的樹(shù)形結(jié)構(gòu)。分析時(shí)的不通將導(dǎo)致不同的視覺(jué)或聽(tīng)覺(jué)效果,這依賴(lài)于使用的選擇器。
下面的技術(shù)可以減少對(duì)文檔的這種影響,而用不修改這兩中媒體類(lèi)型:
一、XHTML的CSS樣式表應(yīng)該用小寫(xiě)的元素和屬性名。
二、在table中,tbody 元素會(huì)被HTML用戶(hù)代理程序的分析器推斷出,但是XML用戶(hù)代理程序的分析器不會(huì)這么做。所以如果在CSS選擇器中要被引用到,你應(yīng)該總是明晰地加上tbody元素。
三、在XHTML 名址空間,用戶(hù)代理程序?qū)选眎d”屬性認(rèn)作為一個(gè)ID類(lèi)型的屬性。因此,即使用戶(hù)代理程序不能認(rèn)出DTD,樣式表也應(yīng)該能夠繼續(xù)使用”#”簡(jiǎn)化選擇器語(yǔ)法。
四、在XHTML 名址空間,用戶(hù)代理程序?qū)⒆R(shí)別class屬性,因此,樣式表應(yīng)該能構(gòu)繼續(xù)使用”.”簡(jiǎn)化選擇器語(yǔ)法。
五、CSS 定義HTML和XML文檔的不同一致性標(biāo)準(zhǔn); 在XHTML文檔以HTML表達(dá)時(shí),用HTML規(guī)則,在XHTML文檔以XML表達(dá)時(shí),用XML規(guī)則。
一些用戶(hù)代理程序會(huì)顯示處理說(shuō)明。但是,注意當(dāng)文檔中沒(méi)有XML聲明時(shí),文檔只能用缺省的字符編碼UTF-8 或 UTF-16。
2 空元素
在空元素結(jié)束符 / 和 > 前加一個(gè)空格,如 <br />,<hr /> 和 <img src="karen.jpg" alt="Karen" />. 還有,使用最小化的標(biāo)簽語(yǔ)法,如<br />,因?yàn)榱硪环NXML允許的語(yǔ)法 <br></br> 在很多現(xiàn)有用戶(hù)代理程序會(huì)導(dǎo)致不可靠的結(jié)果。
3 元素最小化和空元素內(nèi)容
內(nèi)容模型不是空的元素,在為空的場(chǎng)合(如空title或空段落),不要用最小化形式(如 用 <p> </p>,不用 <p />).
4 嵌入的樣式表和Script
如果你的樣式表使用 < 或 & 或 ]]> 或 --,用外部樣式表。如果你的script用 < 或 & 或 ]]> 或 --,用外部script。 注意XML分析程序會(huì)在不告知的情況下除去注釋的內(nèi)容。因此,以前用注釋的方法”隱藏”script和樣式表的習(xí)慣使文檔可以向后兼容,但是可能在基于XML的執(zhí)行時(shí)不能按預(yù)期工作。
5 在屬性值內(nèi)部分行
在屬性值中避免使用分行和多個(gè)空格符。用戶(hù)代理程序處理這些情況時(shí)不一致。
6 Isindex
在文檔的head部分不要使用超過(guò)一個(gè) isindex 元素. isindex 元素不被贊成使用,贊成使用input元素。
7 lang 和 xml:lang 屬性
在指定元素的語(yǔ)言時(shí)同時(shí)使用 lang 和 xml:lang 屬性。xml:lang 屬性在前。
8 片段標(biāo)識(shí)符
在 XML中,以"#foo"形式結(jié)束片段標(biāo)識(shí)符URI [RFC2396] 不是指元素有一個(gè)屬性name="foo",而是指元素有一個(gè)被定義為ID類(lèi)型的屬性,如,HTML 4中的id屬性。很多HTML客戶(hù)程序不以這種方式支持ID類(lèi)型屬性,所以,可以將相同的值同時(shí)附給這兩個(gè)屬性,以保證最大程度的向后和向前兼容。(如 <a id="foo" name="foo">...</a>).
此外,因?yàn)镮D類(lèi)型屬性的合法值集比CDATA類(lèi)型屬性的值集小得多,name屬性被改為NMTOKEN。這個(gè)屬性被限制為只有和ID類(lèi)型或XML1.0 2.5節(jié)中的Name產(chǎn)品同樣的值。不幸的是,XHTML的DTD不能表示出這個(gè)限制。因?yàn)檫@個(gè)改變,在轉(zhuǎn)換現(xiàn)有的HTML文檔時(shí)要加以注意。 如果在轉(zhuǎn)換時(shí)值可能會(huì)改變,這些屬性的值在文檔中必須是唯一的,有效的,任何對(duì)這些片段標(biāo)識(shí)符的引用(不管是內(nèi)部還是外部)必須更新。
最后,注意不贊成在 a,applet,form,frame,iframe,img,和 map 元素中使用name屬性,在以后的XHTML版本中,它將被去除。
9 字符編碼
要指定文檔中的字符編碼,同時(shí)在xml聲明中使用編碼屬性指定 (如. <?xml version="1.0" encoding="EUC-JP"?>) 和在meta中用 http-equiv 語(yǔ)句 (如 <meta http-equiv="Content-type" content='text/html; charset="EUC-JP"' />).xml處理指令的編碼屬性值在前。
10 布爾屬性
一些HTML用戶(hù)代理程序在布爾屬性以完全(非最小化)形式出現(xiàn)時(shí)不能解釋它們,而這是XML1.0必須的。注意這個(gè)問(wèn)題不會(huì)影響用戶(hù)代理程序?qū)TML 4的兼容。包括以下一些屬性: compact,nowrap,ismap,declare,noshade,checked,disabled,readonly,multiple,selected,noresize,defer.
11 文檔對(duì)象模型和 XHTML
文檔對(duì)象模型 level 1 推薦標(biāo)準(zhǔn) [DOM] 定義XML和HTML 4的文檔對(duì)象模型。 HTML 4 文檔對(duì)象模型規(guī)定HTML元素名和屬性名以大寫(xiě)形式返回。XML文檔對(duì)象模型規(guī)定元素名和屬性名以它們被指定的形式返回。在 XHTML 1.0中,元素和屬性指定為小寫(xiě)形式。對(duì)這個(gè)顯著的差別可以用兩種方式處理:
通過(guò)DOM訪問(wèn)text/html internet媒體類(lèi)型XHTML文檔的應(yīng)用程序可以使用HTML DOM,還可以依賴(lài)這些界面返回的大寫(xiě)的元素名和屬性名。
通過(guò)DOM訪問(wèn)text/xml或application/xml internet媒體類(lèi)型XHTML文檔的應(yīng)用程序也可以使用XML DOM. 元素名和屬性名將以小寫(xiě)形式返回。 并且,一些 XHTML 元素可以也可以不出現(xiàn)在對(duì)象樹(shù)中,因?yàn)樵趦?nèi)容模型中它們是可選的(如table中的 tbody 元素). 在HTML 4中,一些元素可以允許被最小化以至于它們的開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽都被忽略(SGML特性),所以可以發(fā)生。但是在XML中不行。XHTML使元素成為可選的,而不是要由文檔作者來(lái)插入外來(lái)元素。相應(yīng)地,應(yīng)用程序需要適應(yīng)這一點(diǎn)。
12 在屬性值中使用 &
在屬性值中含有&符號(hào)時(shí),它必須用字符實(shí)體引用來(lái)表示 (即 "&"). 例如,當(dāng)一個(gè)元素的 href 屬性指向一個(gè)接收參數(shù)的 CGI腳本時(shí),它必須表示為http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user,而不是 http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user.
13 層疊樣式表和XHTML
層疊樣式表 level 2推薦標(biāo)準(zhǔn) [CSS2] 定義style的屬性,用于分析HTML和XML文檔的樹(shù)形結(jié)構(gòu)。分析時(shí)的不通將導(dǎo)致不同的視覺(jué)或聽(tīng)覺(jué)效果,這依賴(lài)于使用的選擇器。
下面的技術(shù)可以減少對(duì)文檔的這種影響,而用不修改這兩中媒體類(lèi)型:
一、XHTML的CSS樣式表應(yīng)該用小寫(xiě)的元素和屬性名。
二、在table中,tbody 元素會(huì)被HTML用戶(hù)代理程序的分析器推斷出,但是XML用戶(hù)代理程序的分析器不會(huì)這么做。所以如果在CSS選擇器中要被引用到,你應(yīng)該總是明晰地加上tbody元素。
三、在XHTML 名址空間,用戶(hù)代理程序?qū)选眎d”屬性認(rèn)作為一個(gè)ID類(lèi)型的屬性。因此,即使用戶(hù)代理程序不能認(rèn)出DTD,樣式表也應(yīng)該能夠繼續(xù)使用”#”簡(jiǎn)化選擇器語(yǔ)法。
四、在XHTML 名址空間,用戶(hù)代理程序?qū)⒆R(shí)別class屬性,因此,樣式表應(yīng)該能構(gòu)繼續(xù)使用”.”簡(jiǎn)化選擇器語(yǔ)法。
五、CSS 定義HTML和XML文檔的不同一致性標(biāo)準(zhǔn); 在XHTML文檔以HTML表達(dá)時(shí),用HTML規(guī)則,在XHTML文檔以XML表達(dá)時(shí),用XML規(guī)則。
相關(guān)文章
CSS 浮動(dòng)清理,不使用 clear:both標(biāo)簽
CSS:浮動(dòng)清理,不使用 clear:both標(biāo)簽 在進(jìn)行浮動(dòng)布局時(shí),大多數(shù)人都深知,在必要的地方進(jìn)行浮動(dòng)清理:<div style="clear:both;"></div>。2008-07-07超級(jí)連接的提示中換行效果實(shí)現(xiàn)代碼
前段時(shí)間有網(wǎng)友在論壇發(fā)帖問(wèn)"如何實(shí)現(xiàn)超級(jí)連接的多行顯示",其實(shí)方法很簡(jiǎn)單就是使用title 和 alt就可以實(shí)現(xiàn)。2008-05-0595%的中國(guó)網(wǎng)站需要重寫(xiě)CSS
95%的中國(guó)網(wǎng)站需要重寫(xiě)CSS...2007-01-01