第 1 章 HTML5背景知识
HTML(Hypertext Markup
Language,超文本标记语言)诞生于20世纪90年代初。1993年或1994年,那时浏览器只有NCSA Mosaic这一种,Web服务器的种类也屈指可数。
HTML的历史
JavaScript出场
JavaScript语言(虽然取了这么一个名字,但是它跟Java程序设计语言基本上没有什么关系)出自一家名为网景的公司。它的出现标志着内嵌在Web浏览器中的客户端脚本程序控制功能的发端。原本是一种静态内容载体的HTML因此变得有点丰富起来。之所以说“有点丰富”,是因为现在我们在浏览器中见到的这种复杂交互方式是经过一段时间的发展之后才形成的。
JavaScript并非HTML规范核心的组成部分,然而Web浏览器、HTML和JavaScript之间是如此紧密,以至于根本无法将它们分开讨论。HTML5规范假定可以使用JavaScript,而且要想使用HTML5中新增的一些最为引人注目的特性也需要用到JavaScript。
出自一家名为网景的公司。它的出现标志着内嵌在Web浏览器中的客户端脚本程序控制功能的发端。原本是一种静态内容载体的HTML因此变得有点丰富起来。之所以说“有点丰富”,是因为现在我们在浏览器中见到的这种复杂交互方式是经过一段时间的发展之后才形成的。
JavaScript并非HTML规范核心的组成部分,然而Web浏览器、HTML和JavaScript之间的关系是如此紧密,以至于根本无法将它们分开讨论。HTML5规范假定可以使用JavaScript,而且要想使用HTML5中新增的一些最为引人注目的特性也需要用到JavaScript。
浏览器战争的结束
浏览器市场也有过激烈的竞争。主要的角逐者是微软和网景,它们都把在自己的浏览器中添加一些独有的特性当做竞争手段。其如意算盘是这样打的:诱人的专有特性会诱使开发人员制作出只能在特定浏览器上使用的内容,而诱人的内容又会诱使用户对能提供这种内容的浏览器青睐有加,由此市场霸业可成。
可惜人算不如天算。这样做的结果是Web开发人员要么只使用那些所有浏览器都有的特性,要么煞费苦心地想些变通办法来使用各款浏览器中勉强相当的那些特性。这不啻为一种煎熬,而且其后遗症直到现在仍然在影响Web开发。
微软用免费提供IE来与网景收费的Navigator抢生意,这一招儿后来被认定违反垄断法。很多人指责微软是网景垮台的罪魁祸首。这一指控或许不无道理,不过在我这个曾在那段时期为网景做过大约18个月顾问的人看来,我从没见过像它那样一根筋地自残的公司。有些公司注定要成为别人的前车之鉴,网景就是其中之一。
浏览器战争以网景倒台及微软受到惩处结束,为基于标准的网络浏览奠定了基础。HTML规范有了改进,遵从这个规范成了准则。现在的浏览器需要凭遵守标准的程度来竞争。这是一次天翻地覆的转折,开发人员和用户均受益于此。
插件称雄
插件是Web世界的“益虫”。它们可以提供一些单用HTML很难实现的高级特性和丰富内容。有些插件特性如此丰富、部署如此普遍,以至于不少网站只提供用于这种插件的内容。Adobe公司的Flash正是这样一个典型。我经常见到完全用Flash实现的网站。按说这也没什么不妥,不过这就意味着浏览器和HTML除了Flash容器一职外再无他用。
浏览器开发商看插件不顺眼,因为它把控制权转移到了插件开发商手中。HTML5的一大改进就是着力于让浏览器直接处理那些原来要使用Flash的富内容(rich content)。苹果和微软是疏远Flash的两个急先锋。前者的iOS不支持Flash,后者则在Windows8附带的Metro风格的IE正中禁用了Flash。
语义HTML浮出水面
HTML标准的早期版本不太关心将内容的意义与其呈现方式分开。想表示一段文字的重要性,使用一个让文字显示为粗体的HTML元素就是了。把粗体内容与重要内容关联起来是用户的事。这对人类用户来说很容易,却会让自动化工具犯难。自HTML初次亮相以来,对内容进行自动处理日趋重要,人们也越来越致力于分开HTL元素的意义与内容在浏览器中的呈现方式。
发展态势:HTML标准滞后于其使用
制定标准一般都是一个长期过程,像HTML这种应用广泛的技术更是如此。参与方众多,每家都想把新标准往符合自己利益或观点的方向引。而标准并不是法律,标准制定机构害怕分裂甚于一切。因此对于未来的特性和改进该当如何,各方经常陷入旷日持久的讨价还价。
负责制定HTML标准的是W3C(World Wide Web Consortium,万维网联盟)。这是一项棘手的任务。一条提案要花不少时间才能成为标准。而对HTML核心规范的修改则需经过很长时间才会得到批准。
冗长的标准制定过程带来的结果就是W3C总是要多绕一些路,总是在将已经被大家接受的实际做法追认为标准。HTML规范反映的只是几年前关于Web内容的前沿思考。这削弱了HTML标准的重要性,因为真正的革新并非来自W3C,而是来自浏览器和插件。
HTML5简介
HTML5不仅仅是HTML规范的最新版本,它还是一系列用来制作现代富Web内容的总称。最重要的三项技术是HTML5核心规范、CSS(Cascading Style Sheets,层叠样式表)和JavaScript。
HTML5核心规范定义用以标记内容的元素,并明确其含义。CSS可用于控制标记现在用户面前的外貌。JavaScript则可以用来操纵HTML文档的内容以及响应用户的操作,此外想使用HTML5新增元素的一些为编程目的设计的特性也需要用到JavaScript。
有些人(那些挑剔、执拗、爱钻牛角尖的人)会说HTML5所指的只是HTML元素。别管他们。这些人看不出Web内容的本质所发生的根本性变化。用于网页的各种技术之间的关联已经变得如此紧密,以致于需要通晓这些技术才能制作Web内容。如果只使用HTML元素,不用CSS,这样制作出来的内容会让用户觉得不便阅读。如果用了HTML和CSS,但不用JavaScript,那就无法为用户的操作提供即时反馈,也无法使用HTML5中的一些高级特性。
新标准
为了应对漫长的标准化过程以及标准落后于常见用法的情况,HTML5及其相关技术是作为一系列小型标准而制定的。其中有些标准只有区区几页,涉及的只是某项特性中一个高度细化的方面。当然,其他一些标准仍然有密密麻麻的几百页,涵盖了相关功能的所有方面。
这样做的目的是让较小的团体可以合作设计和将对他们较为重要的特性标准化,争议较少的特性可以先标准化,不必受围绕其他特性发生的争论的拖累。
这个办法有利也有弊。好处是可以加快标准制定步伐。主要的弊端在于难以全面掌握制定中的各个标准的情况以及这些标准之间的关系。技术规范的质量也有所下降。有些标准中存在着一些歧义,致使浏览器中的实现出现了不一致的情况。
最大的不足之处大概要算没有一条可用来评估HTML5达标情况的基准线。我们现在还处于初始阶段,但是不能指望用户可能用到的所有浏览器都实现了要用的特性。因此采用HTML5中的特性是件复杂的事情,需要仔细评估相关标准得到支持的情况。W3C公布过一个正式的HTML5徽标,但是它并不代表对HTML5标准及相关技术的全面支持。
引入原生多媒体支持
HTML5的一大改进就是支持在浏览器中直接播放视频和音频文件(也就是说不借助于插件)。这是W3C对插件风靡现象的一种反应。原生(native)多媒体支持再结合其他HTML特性可望大有作为。
引入可编程内容
HTML5最大的变化之一是添加了canvas元素。这个元素是对插件现象的另一反应,它提供了一个通用的绘图平面,开发人员可以用它完成一些通常用Adobe
Flash来完成的任务。
这个特性之所以重要,部分原因在于要使用canvas元素就必须用到JavaScript。编程从而成了HTML文档中第一层次的事情,这是一个重大转变。
引入语义Wvb
HTML5引入了一些用来分开元素的含义和内容呈现方式的特性和规则。这是HTML5中的一个重要概念,它标志着HTML在走向成熟的道路上又迈上了一个新台阶,反映出制作和使用HTML内容的方式的多样性。这个变化(它逐步体现在之前的HTML版本中)稍稍增加了Web开发者的负担,这是因为开发者需要先标记内容然后再定义其呈现方式。不过有些实用的新改进可以减轻这种负担。
HTML5现况
HTML5的核心标准目前仍在制定过程中,一时完成不了。不过,标准正式出炉还得等上好些年,而最终版本与目前版本可能出入不大。
浏览器对HTML5的支持情况
最流行的那些浏览器都已经实现了许多HTML特性。然而,不是每款浏览器都支持所有的特性。在把某个特性用到实际项目之前,应该先核查一下浏览器是否支持这个特性。有些浏览器(例如Chrome和Firefox)的升级近乎持续不断。考虑到HTML标准的分散本性,使用Modernizr(http://www.modernizr.com) 之类的JavaScript库检查特性是可行的。使用Modernizr,可以用编程的方式判断用户使用的浏览器是否支持关键的HTML特性,籍此可以决定在文档中应该使用哪些特性。
习惯未雨绸缪的读者可以参考一下When Can I
Use?网站(http:/caniuse.com)。
上面提供了浏览器的支持情况和采用率方面的详细信息,并且勤于修订。
网站对HTML5的支持情况
用到HTML5特性的网站日益增多。其中有些属于示范性网站,是用来演示HTML特性的。但是能利用浏览器对HTML5的支持的实用型网站也越来越多。YouTube就是一个典型,它现在已经提供让浏览器直接播放的视频——当然,它还为较老的浏览器提供Flash视频。