随笔-317  评论-12084  文章-1  trackbacks-256

Web标准和ASP.NET - 第一部分 XHTML介绍

英文版见:http://dflying.dflying.net/1/archive/98_web_standard_and_aspnet__part1_xhtml_quick_start.html

Web标准变得越来越受人关注,符合Web标准的网站现在也正成为Web开发的趋势。同样ASP.NET也是Web开发中非常流行的技术。在这个系列中我希望能与大家分享一些使用ASP.NET 2.0构建符合Web标准的网站的想法。
参考:
http://www.w3.org/MarkUp/
http://www.w3.org/TR/xhtml1/
http://msdn.microsoft.com/asp.net/reference/infrastructure/default.aspx?pull=/library/en-us/dnaspp/html/aspnetusstan.asp

本篇文章是这个系列的第一篇,将要介绍一些基本的XHTML概念以及传统的HTMLXHTML之间较显著的不同。以期让HTML开发者有所针对,快速上手。

曾经流行一时的HTML标记语言已经被官方认为过时了,将要接任它的是XHTML(http://www.w3.org/MarkUp/)。如果你的网站按照较严格的XHTML规则书写,那么这个网站将在不同的浏览器中保持一致的样式。并且你可以认为在未来浏览器的版本升级变化中仍然保证网站外观的一致性。同样你也会得到跨浏览器,跨设备以及跨平台的一致性支持。

XHTML有如下两个主要目标:

  • 将文档的结构(使用XHTML标记语言)和表现(使用CSS)分开
  • HTML作为一种XML书写

对于第一个目标,W3C删除了一些HTML的标记以及属性,例如<font>bgcolor,因为这些标记或属性并不是文档结构中的一部分,而只是用来描述文档应该如何被显示,因此应该定义在CSS文件中而不是HTML中。同样,某些特定的标记内容并不一定要显示成特定的样子。比如,<h1>标记里内容显示的字号完全可能小于<p>里的内容,这些取决于CSS中的定义。当然,<h1>一般用于显示一篇文档的标题信息,它的重要程度一般也应该高于<p>中的内容,所以通常的浏览器都会以一个较大的字号来显示。

对于第二个目标,XHTML将严格遵守XML的严格语法。可以说XHTMLHTML依照XML语法重构的结果。换句话说,当你编写XHTML文档的时候,其实是在编写一份特化了的XML文档。XML文档有着比HTML严格多了的语法,这些将在本文稍后部分讨论。

XHTML有三个版本:

  • XHTML 1.0 Transitional
  • XHTML 1.0 Strict
  • XHTML 1.0 Frameset

XHTML 1.0 Transitional包含HTML4.01的所有标记以及属性,是一种不是那么严格的XHTML,目的是使现有的HTML开发者更容易的接受并使用XHTML

XHTML 1.0 Strict就是严格版本的XHTML了,开发者必须要严格遵守文档的结构与表现分开的规则,也就是说需要用CSS控制页面的显示而不是使用<font>bgcolor之类的标记或属性。

XHTML 1.0 Frameset用于把文档分割成几个桢以显示不同的内容。(XHTML 1.0 TransitionalStrict 页面不允许包含<frameset> 标记)。

这里不再赘述更多有关XHTML的介绍,如果感兴趣,可以使用Google或者MSN Search找到很多相关资料或是详细介绍。也欢迎在本贴下留下您的评论与问题,让我们共同探讨。接下来是一些书写XHTML的基本规则。

一个XHTML页面必须是一个组织完善的并且合法的XML文档。XHTML 1.0 recommendation 的第四部分详细介绍了HTMLXHTML的若干不同点,正力柱来最为重要的有如下十条:

  1. 页面必须包含一个合法的XHTML DOCTYPE

一个合法的XHTML页面必须再起其他内容出现前包含XHTML DOCTYPE定义。当你在Visual Studio 2005或者Microsoft Visual Web Developer中创建一个新的ASP.NET页面时。一个合法的XHTML 1.0 Transitional DOCTYPE已经被自动加入到页面当中了。下面是四种标准的XHTML DOCTYPE

XHTML 1.0 Transitional

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

XHTML 1.0 Strict

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

XHTML 1.0 Frameset

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 

XHTML 1.1

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 

不同的XHTML DOCTYPE也将决定浏览器将如何显示某些特定的内容,这些将会在今后几篇文章中讨论。

  1. 页面的根节点必须指定XHTML的命名空间。

<html>标记必须指定一个默认的命名空间。例如一个XHTML 1.0 Transitional页面应该有如下声明:

1<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
  1. 所有的标记以及属性名称必须为小写字母。

XML语法是大小写敏感的,所以<div><DIV>是不同的标记,当然,只有<div>是合法的XHTML标记

  1. 属性值必须书写于一对引号内。

引号可以为双引号,也可为单引号。如下声明是不合法的:

1<href=Page.aspx>Link</a> 

这里缺少了包围Page.aspx的引号,应当如下书写:

1<href="Page.aspx">Link</a> 

Visual Studio 2005 Visual Web Developer可以自动把属性值用引号括起来。这一功能可以在Tools, Options, Format中设定。

  1. 所有非空的标记必须成对出现。

也就是说,单独的<p>或者<br>都是不合法的,需要有相应的闭合标记。
这里特别要说明的是常用的
<br>标记。满足XHTML语法的换行标记应该为<br></br>或者简写为<br />,然而在一些浏览器中会把<br></br>中的</br>视为错误拼写的<br>标签,并尝试加以更正为另一个<br>,这样就造成了两个换行。为了避免这些不必要的麻烦,推荐书写为<br />。同样需要注意的是有些浏览器不能识别<br/>(注意'/'前没有空格),所以不要忘记在'/'前加上一个空格。

  1. 标记不可以重叠。

标记可以嵌套,但是不能重叠。如下声明是合法的:

1<b><i>This is bold and italic</i></b> 

而如下包含重叠的声明是不合法的:

1<i><b>This is bold and italic</i></b> 
  1. 属性不可以简写。

所有的属性必须指定值。例如一种常见的写法

1<input type="checkbox" checked />

XHTML中是不合法的,因为checked属性没有值与其对应。应该改写成

1<input type="checkbox" checked="checked" />
  1. 使用id属性,而不是name属性。

HTML中,name属性可以用来标识identify <a>, <applet>, <form>, <frame>, <iframe>, <img> <map>标记。XHTML 1.0 Strict XHTML 1.1 standards已经删除了对name属性的支持。我们应该使用id唯一标识一个页面上的元素。

  1. 属性值中空格的处理。
    属性值中开头和结尾的所有空格将被忽略。属性值中词与词之间的多个空格或换行符将被认为成单个空格。例如如下两个属性的值相同:
    <input value="HTML is out" />
    <input value="   HTML        is
         out    "
     />
  2. <script><style>标记的内容必须被包围在CDATA段中。

例如:

1<script type="text/javascript"> 
2<![CDATA[ 
3function func(a, b) 
4{
5 if (a < b) 
6   return true
7}
 
8]]> 
9</script>

注意到上面的Script中有小于号(<)出现,如果不将其包围在CDATA段中,那么小于号(<)以及后面的内容会被误认为是另一个XHTML标记的开始,引起一些不必要的错误。

需要注意的是IE认为在<script>标记中的CDATA段是不合法的,并会引发脚本错误,这个问题可以使用JavaScript注释来避免:

1<script type="text/javascript"> 
2/* <![CDATA[ */
3function func(a, b) 
4{
5 if (a < b) 
6   return true
7}
 
8/* ]]> */
9</script>

或者

1<script type="text/javascript"> 
2// <![CDATA[ 
3function func(a, b) 
4{
5 if (a < b) 
6   return true
7}

8// ]]>
9</script> 

当然,最好的方法是把脚本和CSS放置于单独的文件中并在XHTML页面中加上引用。

 

待续……

 

0
0
(请您对文章做出评价)
« 上一篇:Atlas UpdatePanel简要介绍
» 下一篇:使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件
posted on 2006-03-27 15:53 Dflying Chen 阅读(4299) 评论(21)  编辑 收藏 网摘 所属分类: ASP.NET 综合

评论:
#1楼 2006-03-27 16:33 | Nomagic      
我这两天碰到一个问题:
在ie6 + sp1下,document.body.clientHeight 在hmtl4.0页面中能得到正确的值,是浏览器可用区域的高度;但是在xhtml1.1下就不正确了,在xhtml1.1下clientHeight、scrollHeight和scrollHeight的值始终相同,都是指显示当前页面所需的实际占用高度。
这样一来岂不是不能得到浏览器可用区域的高度了?我在调试器里也没看到其他的属性能够获得这项信息。

xhtml想说爱你不容易啊!

  回复  引用  查看    
#2楼[楼主] 2006-03-27 16:44 | Dflying Chen      
@Nomagic
clientHeight and scrollHeight are parts of the MSIE's DHTML object model.
clientHeight and scrollHeight are not parts of any W3C specifications or technical recommendations.

  回复  引用  查看    
#3楼 2006-03-27 16:49 | Nomagic      
@Dflying Chen
那么按照w3c的来,我怎么获得浏览器可用区域的高度呢?

  回复  引用  查看    
#4楼[楼主] 2006-03-27 17:16 | Dflying Chen      
@Nomagic
有一些通用的方法可以无需考虑DOCTYPE,您可以参考下面这个片段:
// Try to get the "inner width" and "inner height"
if (window.innerWidth)
{
theWidth = window.innerWidth
theHeight = window.innerHeight
}
else if (document.documentElement && document.documentElement.clientWidth)
{
theWidth = document.documentElement.clientWidth
theHeight = document.documentElement.clientHeight
}
else if (document.body)
{
theWidth = document.body.clientWidth
theHeight = document.body.clientHeight
}

  回复  引用  查看    
#5楼 2006-03-27 20:17 | Nomagic      
@Dflying Chen
多谢多谢,在ie6下面document.documentElement.clientHeight果然好使哈哈

  回复  引用  查看    
#6楼[楼主] 2006-03-27 22:42 | Dflying Chen      
@Nomagic
在Quirks渲染模式下<body>作为文档的根,所以可以用document.body.clientHeight得到文档的高度。而在Standard渲染模式下,<html>作为文档的根,需要使用document.documentElement.clientHeight才可以得到。此时document.body的高度和宽度都为0。

  回复  引用  查看    
#7楼 2006-03-27 22:52 | Vokobo      
写一个系列吧,我也想转过来好了。
  回复  引用  查看    
#8楼 2006-03-28 00:28 | 梁广永      
学习,支持,
  回复  引用  查看    
#9楼[楼主] 2006-03-28 08:44 | Dflying Chen      
@Vokobo
@梁广永
ok and thanks

  回复  引用  查看    
#10楼 2006-06-07 08:45 | chendify[未注册用户]
哥们,写得不错

http://www.choicesofdemocracy.org/gd1860/301/mp3%B8%F1%CA%BD%CA%D6%BB%FA%C1%E5%C9%F9%7Cmp3%B8%F1%CA%BD%CA%D6%BB%FA%C1%E5%C9%F9%7Cmp3%B8%F1%CA%BD%CA%D6%BB%FA%C1%E5%C9%F9%7C.html mp3格式手机铃声

http://www.choicesofdemocracy.org/gd1860/299/%CA%D6%BB%FA%C1%E5%C9%F9%C3%E2%B7%D1%CF%C2%D4%D8.html 手机铃声免费下载

http://www.choicesofdemocracy.org/gd1860/298/%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C.html">http://www.choicesofdemocracy.org/gd1860/298/%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C.html 手机铃声下载

http://my.opera.com/12530mp3/homes/blog/mp3铃声.htm mp3铃声
http://cs12530.googlepages.com/index.htm 免费mp3铃声
http://hn12530.googlepages.com/index.htm 最新手机铃声下载
http://gd12530.googlepages.com/index.htm 免费彩玲下载
http://superhzq.googlepages.com/index.htm 免费彩铃下载
http://cs1860.googlepages.com/index.html 免费手机铃声下载
http://hn1860.googlepages.com/index.html 手机铃声免费下载
http://www.choicesofdemocracy.org/gd1860/298/%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C.html">http://www.choicesofdemocracy.org/gd1860/298/%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C%CA%D6%BB%FA%C1%E5%C9%F9%CF%C2%D4%D8%7C.html 手机铃声下载

  回复  引用    
#11楼 2006-07-30 06:16 | a_a      
Dflaying老师 为什么没有后续的文章了?
  回复  引用  查看    
#12楼[楼主] 2006-08-05 09:09 | Dflying Chen      
@a_a
没空了阿…………

  回复  引用  查看    
#13楼 2006-08-09 11:38 | oneway[未注册用户]
document.documentElement.clientHeigh代替document.body.clientWidth 问题就解决了,这个问题困扰我很久了,终于找到答案,谢谢大家!
  回复  引用    
#14楼[楼主] 2006-08-11 17:04 | Dflying Chen      
@oneway
互相学习:)

  回复  引用  查看    
#15楼 2007-01-11 21:35 | 灵魂机器      
现在有flex,wpf/e 更有表现力的手段,xhtml 和css 还有用武之地吗?
  回复  引用  查看    
#16楼[楼主] 2007-01-29 11:32 | Dflying Chen      
@灵魂机器
这个要看用户怎么选择了

  回复  引用  查看    
#17楼 2007-02-17 15:20 | 不知[未注册用户]
又学到很多知识,谢谢!!!
  回复  引用    
#18楼[楼主] 2007-02-26 21:36 | Dflying Chen      
@不知
:)

  回复  引用  查看    
#19楼 2007-05-23 21:23 | fdsf[未注册用户]
<a href="http://oniobaby.googlepages.com/1.htm">暴打公交女司机</a>
<a href="http://oniobaby.googlepages.com/2.htm">带头大哥777</a>
<a href="http://oniobaby.googlepages.com/3.htm">女编辑留学史</a>
<a href="http://oniobaby.googlepages.com/4.htm">2007香港小姐</a>
<a href="http://oniobaby.googlepages.com/5.htm">运气学校 走运</a>
<a href="http://oniobaby.googlepages.com/6.htm">河莉秀婚礼</a>
<a href="http://oniobaby.googlepages.com/7.htm">同性恋 央视名嘴</a>
<a href="http://oniobaby.googlepages.com/8.htm">强摸脸部</a>
<a href="http://oniobaby.googlepages.com/9.htm">刘德华狂吻张曼玉</a>
<a href="http://oniobaby.googlepages.com/10.htm">女朋友 绝技</a>
<a href="http://oniobaby.googlepages.com/11.htm">教练摸胸</a>
<a href="http://oniobaby.googlepages.com/12.htm">索马里海盗</a>
<a href="http://oniobaby.googlepages.com/13.htm">林志玲走光</a>
<a href="http://oniobaby.googlepages.com/14.htm">明星家保姆</a>
<a href="http://oniobaby.googlepages.com/15.htm">王菲三度怀孕</a>
<a href="http://oniobaby.googlepages.com/16.htm">央视女主持的幕后装扮</a>
<a href="http://oniobaby.googlepages.com/17.htm">职场美人计</a>
<a href="http://oniobaby.googlepages.com/18.htm">12大身体怪症状</a>
<a href="http://oniobaby.googlepages.com/19.htm">空姐非礼团</a>
<a href="http://oniobaby.googlepages.com/20.htm">红楼十二钗今现状曝光</a>

  回复  引用    
#20楼 2007-11-18 11:01 | minidxer[未注册用户]
相当不错~
  回复  引用    
#21楼 2009-12-23 11:30 | HOHO631[未注册用户]
@灵魂机器
SEO

  回复  引用