Web标准:关于web标准的一些初学的知识
佚名
Web标准使您能通过最少的工作,生成可被最广大受众访问的Web站点。Web标准的承诺是:只需设计页面一次,即可让该页以完全相同的方式在任何现代的浏览器中显示和工作。例如,在按照标准生成以后,旨在在MicrosoftInternetExplorer中以某种方式显示的页可在其他浏览器(如,MozillaFirefox、NetscapeNavigator、Opera、Camino和Safari)中以相同的方式显示,而无需完成任何额外的工作。
Web标准的一个额外好处是—使Web站点更易于为残疾人士访问。这是一个范围广泛的受众群体,包括视力衰退的中年人士,刚刚在滑雪时跌断胳膊的人士,以及完全失明的人士等。使用标准可避免无意中阻止那些具有暂时性或永久性身体残疾的人士访问Web页。
HTML在正式的场合已经过时了。WorldWideWebConsortium(W3C)于2000年6月26日发布了XHTML的第一个版本作为推荐标准。XHTML标准的目标是取代HTML。按照W3C的说法,“XHTML是HTML的继承者”(http://www.w3.org/MarkUp/)。
XHTML标准的制定者具有两大目标:
在文档结构和表示形式之间创建更明显的分离。
将HTML重新表示为XML的应用程序。
为了实现第一个目标,W3C一直在坚定地从HTML中删除纯粹描述性的元素和属性(他们是从HTML4.0开始这一过程的)。例如,XHTML1.0Strict不包含诸如<font>标记之类的元素或诸如bgcolor属性之类的属性,因为这些元素和属性完全用于描述文档的外观,它们与文档的结构没有任何关系。
W3C一直在努力使Web站点设计人员和开发人员摒弃特定标记应当具有特定外观这一观念。例如,您可能会认为<h1>标记(标题标记)的用途是在页中呈现大的加粗文本。这实际上是错的。<h1>标记用来在文档中标记标题而不是其他任何东西。如何呈现标题标记由浏览器确定。视力衰退的人士使用的屏幕阅读器可能利用抑扬顿挫的声音来大声朗读标题标记的内容。不支持多个字体大小的PDA可能用闪烁文本呈现标题标记的内容。
您不应当试图使用诸如<h1>标记之类的页元素来控制Web页的外观。相反,您应当通过使用层叠样式表来指示Web页的外观。而且,您所使用的层叠样式表应当是外部层叠样式表。请使用标记和属性来标记文档的结构,而使用样式表来控制文档的表示形式。
XHTML的第二个目标是迫使HTML开发人员遵守更为严格的XML规则。按照W3C的说法,“XHTML1.0是HTML4.01的作为XML1.0应用程序的修订”(http://www.w3.org/MarkUp/)。换句话说,使用XHTML生成Web页时,实际上是在创建XML文档。
XML文档具有比HTML文档更严格的语法。例如,XML区分大小写,所有XML属性都必须放在引号内,而且XML标记不能重叠。强迫Web站点开发人员和设计人员遵守有更高要求的语言规则有很多好处。
好处之一,用XHTML标记编写的页具有更高的跨浏览器、跨设备和跨操作系统兼容性。如果在浏览器中打开传统的HTML页,浏览器将千方百计地呈现该页。浏览器将试图呈现该页,即使您的HTML一团糟。例如,InternetExplorer(以及Firefox和Opera)能够很好地显示下面的HTML页。
<i><B>thisisboldanditalic</I>andthisisbold</body></HTML>InternetExplorer会恰当地显示该页—即使该页缺少<html>和<body>开始标记,<b>标记不具有匹配的结束标记,并且开始和结束<i>标记的大小写不一致。所有主要的浏览器都能适应几乎任何HTML标记“混合物”,并且不顾一切地呈现一些内容。
浏览器的这种适应行为是危险的,因为不同的浏览器(或相同浏览器的将来版本,或在不同操作系统上运行的相同浏览器)可能以不同方式呈现错乱的HTML。实际上,对于最新版本的InternetExplorer、MozillaFirefox和Opera而言,它们呈现无效HTML的方式惊人地一致。但是,一旦开始违反游戏规则,就不会得到任何保证。
然而,如果用XHTML的更严格的规则编写Web页,那么Web页就更有可能以一致的方式与当前浏览器协作,并且它们将继续与当前浏览器的未来新版本协作。对于任何公司而言,几乎都不具备针对每个浏览器、在每个操作系统和每个设备上测试其Web站点的资源。如果按照Web标准编写页面,那么就不必具有这样的资源。
XHTML标准的版本
有三个版本的XHTML1.0,它们分别对应三个版本的HTML4.01:
XHTML1.0Transitional
XHTML1.0Strict
XHTML1.0Frameset
XHTML1.0Transitional包含HTML4.01Transitional中的全部标记和属性。引入XHTML1.0Transitional标准的目的是,使现有HTML设计人员和开发人员无需经历太多的痛苦就能迁移到XHTML。
XHTML1.0Strict与XHTML1.0Transitional的不同之处在于,它在文档结构和表示形式之间实施了一种更为明显的分离。与XHTML1.0Transitional不同,XHTML1.0Strict强迫您使用层叠样式表来控制页的外观。
XHTML1.0Frameset文档意在成为使用<frameset>标记将浏览器划分为多个框架的文档(XHTML1.0Transitional和Strict页不能包含<frameset>标记)。
W3C还发布了XHTML1.1以作为推荐标准(2001年5月31日)。XHTML1.1非常类似于XHTML1.0Strict。二者的主要区别在于,可以用附加模块扩展XHTML1.1以便支持新元素。例如,可以生成特定的XHTML1.1页,该页还包含MathML(数学标记语言)、SVG(可伸缩向量语言)或创建的自定义模块中的元素。
最后,W3C正在制订XHTML2.0推荐标准。因为XHTML2.0仍然处于起步阶段,并且当前没有Web浏览器支持该标准,所以我们不在本文讨论它。
创建XHTML页
与HTML页不同,XHTML页必须是标准格式且有效的XML文档。XHTML1.0推荐标准的第4部分对HTML和XHTML之间的区别进行了总结。这里给出生成有效XHTML页的最重要需求的列表:
页必须包含有效的XHTMLDOCTYPE。
有效的XHTML页必须在其任何内容之前包含一个XHTMLDOCTYPE。当在VisualStudio.NET2005或MicrosoftVisualWebDeveloper中创建新的ASP.NET页时,该页中将自动包含XHTML1.0Transitional的正确的DOCTYPE。下面列出四个标准的XHTMLDOCTYPE:
XHTML1.0Transitional
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">XHTML1.0Strict
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">XHTML1.0Frameset
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Frameset//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">XHTML1.1
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.1//EN""http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">向页中添加DOCTYPE会影响该页在浏览器中的呈现方式。请参阅以下标题为“XHTML和DOCTYPE切换”的一节。
根元素必须引用XHTML命名空间。
XHTML页的开始<html>标记必须指定默认命名空间http://www.w3.org/1999/xhtml。以下是XHTML1.0Transitional页的有效开始<html>标记的示例:
<htmlxml:lang="en"lang="en">所有元素和属性名都必须小写。
XML区分大小写。因此,在<p>标记和<P>标记之间存在差异。只有前者是有效的XHTML段落标记。
属性值必须始终放在引号内。
确保始终将属性值放在双引号或单引号中。例如,以下是无效的XHTML。
<ahref=SomePage.aspx>Next</a>在该示例中,href属性缺少引号。以下代码是有效的XHTML。
<ahref="SomePage.aspx"mce_href="SomePage.aspx">Next</a>您可以通过选择菜单选项Tools、Options、Format,将VisualStudio.NET2005和VisualWebDeveloper配置为自动将属性值放在引号内。
所有具有开始标记的非空元素都必须具有匹配的结束标记。
如果具有开始<p>标记,则必须包含结束</p>标记来标记段落的结束。对于根本不包含任何内容的标记,例如<br>标记,可同时提供开始和结束标记<br></br>,也可以使用空元素简写。
为使XHTML页与现有的HTML浏览器向后兼容,需要小心处理打开和关闭标记的方式。例如,现有HTML浏览器倾向于将开始和结束<br></br>标记错误地解释为两个<br>元素。因此,您应当使用空元素简写</br>。
此外,除非您小心地在结束斜杠之前添加一个空格,否则现有HTML浏览器在处理空元素简写时会出现问题。因此,应当使用<BR<b>[space]/>(而不是)向页中添加<br>元素。
不得存在重叠标记。
可以使标记嵌套,但是不允许使标记重叠。例如,以下XHTML是有效的。
<b><i>Thisisboldanditalic</i></b>但是,以下XHTML是无效的。
<i><b>Thisisboldanditalic</i></b>不得存在属性最简化。
所有属性都必须具有值,即使该值看起来有一点儿奇怪。例如,标记<inputtype=”checkbox”checked/>是无效的XHTML,因为checked属性不具有值。该标记应当写成<inputtype=”checkbox”checked=”checked”/>。
必须使用id属性而不是name属性。
在HTML中,可以使用name属性来标识<a>、<applet>、<form>、<frame>、<iframe>、<img>和<map>元素。尽管可以使用name属性生成XHTML1.0Transitional页,但在XHTML1.0Strict和XHTML1.1标准中已经将name属性删除。您应当改而使用id属性来标识这些元素。
必须将<script>和<style>元素的内容包装到CDATA节中。
如果在脚本或样式表中使用特殊字符(例如<或&)或实体引用(例如<或&),则需要将脚本或样式表的内容标记为CDATA(字符数据)节,如下所示。
<scripttype="text/javascript"><![CDATA[functionisLess(a,b){if(a<b)returntrue;}]]></script>使用CDATA节并非对所有浏览器都有效。例如,InternetExplorer会将<script>标记中的CDATA节视为语法错误。可以通过添加JavaScript注释避免该问题,如下所示。
<scripttype="text/javascript">/*<![CDATA[*/functionisLess(a,b){if(a<b)returntrue;}/*]]>*/</script>JavaScript使用/*和*/来标志注释的开始和结束。因此,CDATA节对JavaScript隐藏,但不对分析该页的浏览器隐藏。总之,较好的做法是将样式规则和脚本放在外部文件中,而从XHTML页中引用这些文件。通过使用外部样式表和脚本,能够避免上述所有问题。
XHTML和DOCTYPE切换
为Web页指定DOCTYPE会影响浏览器呈现页的方式。InternetExplorer、MozillaFirefox和Opera全都支持一种名为“DOCTYPE切换”(也叫“DOCTYPE嗅探”)的功能。
引入DOCTYPE切换的目的是使浏览器能够正确地呈现符合标准的Web站点以及旧式Web站点。大多数Web站点被开发为呈现HTML页而不是XHTML页。浏览器通过判断是否存在DOCTYPE来确定何时应该使用标准来呈现页。
InternetExplorer6 支持两种呈现模式,分别叫做Quirks模式和Standards模式。当InternetExplorer呈现包含有效XHTML(或HTML4.0)DOCTYPE的页时,它会以Standards模式呈现该页;否则,它会以Quirks模式呈现该页(有关详细信息,请参阅CSSEnhancementsinInternetExplorer6)。
Opera浏览器(Opera7 )支持与InternetExplorer相同的两种呈现模式:Quirks和Standards()。
MozillaFirefox1 支持三种呈现模式:Quirks模式、AlmostStandards模式和Standards模式。Firefox的AlmostStandards模式对应于InternetExplorer和Opera的Standards模式。当页包含有效的XHTML1.0TransitionalDOCTYPE(并且该页被分配为text/htmlMIME类型)时,Firefox会以AlmostStandards模式呈现该页。当页包含XHTML1.0Strict或XHTML1.1DOCTYPE(或者该页被分配为XMLMIME类型)时,该页将以Standards模式呈现(有关详细信息,请参阅http://www.mozilla.org/docs/web-developer/quirks/doctypes.html)。
可以通过临时向页中添加以下客户端脚本(该脚本在最新版本的InternetExplorer、Firefox和Opera中有效)确定浏览器的当前呈现模式。
<scripttype="text/javascript">alert(document.compatMode);</script>您需要关心浏览器的呈现模式,因为它会影响将层叠样式表应用于该页的方式。如果将现有HTML页转换为XHTML页,那么在浏览器中打开它们时,它们可能看起来非常不同。
例如,InternetExplorer以不同方式计算页元素的大小,这取决于呈现模式(它使用不同的CSSBoxModel)。在Quirks模式下,元素的宽度是通过将元素的内容、内边距、边框和边距相加而计算得到的。在Standards模式下,元素的宽度是只考虑元素内容的宽度而计算得到的。