未来的Web标准:HTML 5
W3C在过去的几年里一直在冬眠。HTML最后一次更新是在1999年,XHTML上一次更新是在2002年。
WHATWG(Web Hypertext Application Technology Working Group)成立于2004年,由Google, Mozilla, Apple和Opera发起,旨在开发以实际应用为蓝本的新一代Web标记标准。他们推出了一个HTML5规格草稿试图取代老一代的HTML和XHTML。
根据W3C最近一次广受观注的投票结果,HTML5将成为事实的超文本标记语言未来标准,而不是以XML和可扩展性著称的XHTML 2。该投票基于WHAT-WG向W3C提出的以由Web Application 1.0和Web Forms 2.0构成的HTML5为基础进一步开发和完善Web语义语言的申请。
W3C已确定将:
- 接受WHATWG的HTML 5,并以此为工作蓝本,由W3C的HTML工作组继续完善和开发;
- 发布名为HTML 5的HTML版本,而非XHTML2。
在持反对意见的委员中,相当一部分是考虑到新的HTML5与目前标准如XForms等的关系问题。根据官方公布的投票结果,这些问题都已被认真纳入新标准的开发过程,不会成为任何障碍。
与惯常的W3C工作组不同,全新的HTML5工作组将全部由会对新标准的实施起关键作用的大公司的代表担任:
与XHTML 2.0对HTML进行彻底重构不同的是,WHATWG希望渐进地改进HTML 4和XHTML 1.0。WHATWG规范的一些初步成果已经在浏览器中实现,比如canvas。
在W3C的草稿《HTML 5 differences from HTML 4》中,我们可以看到HTML 5的一些主要改进。我们重点关注一下语法的变化和被从现有HTML/XHML中移除的内容。
1. 语法
HTML 5可以使用HTML的语法来定义:
<html>
<head>
<meta charset="UTF-8">
<title>Example document</title>
</head>
<body>
<p>Example paragraph</p>
</body>
</html>
也可以使用XML语法:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example document</title>
</head>
<body>
<p>Example paragraph</p>
</body>
</html>
2. 语言
2.1 内容模型
div,li等元素的使用将更为严格。这些元素将不能同时包含块级元素和行内元素。例如,下面的代码是合法的:
<em></em>
</div>
<div>
<p><em></em></p>
<p></p>
</div>
而下面的代码是不合法的:
<em></em>
<p></p>
</div>
这样有利于根据元素用于描述页面的结构还是结构内的语义来明确元素的级别。
另外,tfoot元素可以直接出现在thead之后。
2.2 移除的元素
- 纯表现的元素:basefont,big,center,font, s,strike,tt,u;
- 对可用性产生负面影响的元素:frame,frameset,noframes;
- 产生混淆的元素:acronym ,applet,isindex,dir。
2.3 移除的属性
- a,area,button,input,label,legend和textarea元素的accesskey属性;
- link和a元素的rev和charset属性;
- a元素的shape和coords属性;
- img和iframe元素的longdesc属性;
- link元素的target属性;
- area元素的nohref属性;
- head元素的profile属性;
- html元素的version属性;
- map,img,object,form,iframe,a元素的name(use id instead)属性;
- meta元素的scheme属性;
- object元素的archive,classid,codebase,codetype,declare和standby属性;
- param元素的valuetype和type属性;
- script元素的charset和language属性;
- table元素的summary属性;
- td和th元素的headers,axis和abbr属性;
- td元素的scope属性;
- caption,iframe,img,input,object,legend,table,hr,div,h1,h2,h3,h4,h5,h6,p,col,colgroup,tbody,td,tfoot,th,thead,tr和body元素的align属性;
- body元素的alink,link,text和vlink属性;
- body元素的background属性;
- table,tr,td,th和body元素的bgcolor属性;
- table,img和object元素的border属性;
- table元素的cellpadding和cellspacing属性;
- col,colgroup,tbody,td,tfoot,th,thead和tr元素的char和charoff属性;
- br元素的clear属性;
- dl,menu,ol和u元素的compact属性;
- table元素的frame属性;
- iframe元素的frameborder属性;
- iframe,td和th元素的height属性;
- img和object元素的hspace和vspace属性;
- iframe元素的marginheight和marginwidth属性;
- hr元素的noshade属性;
- td和th元素的nowrap属性;
- table元素的rules属性;
- iframe元素的scrolling属性;
- hr,input和select元素的size属性;
- all elements with the exception of font元素的style属性;
- li,ol和ul元素的type属性;
- col,colgroup,tbody,td,tfoot,th,thead和tr元素的valign属性;
- hr,table,td,th,col,colgroup,iframe和pre元素的width属性。
为了使我们现有的代码更容易地向未来的标准迁移,我们应该尽量不使用这些元素和属性。
参考: