HTML5权威指南 [平装] 9787115338365

配送至
$ $ USD

HTML5 权威指南》是系统学习网页设计的权威参考图书。本书分为五部分:第一部分介绍学习本书的预备知识和HTML、CSS 和JavaScript 的最新进展;第二部分讨论HTML 元素,并详细说明了HTML5中新增和修改的元素;第三部分阐述CSS,涵盖了所有控制内容样式的CSS 选择器和属性,并辅以大量代码示例和图示;第四部分介绍DOM,剖析如何用JavaScript 操纵HTML 内容;第五部分讲解Ajax、多媒体和canvas 元素等HTML5 高级特性。 本书面向初学者和中等水平Web 开发人员,是牢固掌握HTML5、CSS3 和JavaScript 的必读之作。
编辑推荐
作为下一代Web标准,HTML5致力于为互联网开发者搭建更加便捷、开放的沟通平台。业界普遍认为,在未来几年内,HTML5无疑将成为移动互联网领域的主宰者。 《HTML5权威指南》是系统学习网页设计和移动设计的权威参考图书。它涵盖创建标准兼容、语义化的新一代HTML5网站的所有基础知识,并囊括实现HTML5核心语言的HTML5生态系统和相关API。全书精彩呈现500多个实战代码示例及主流浏览器实现效果图,贴心汇聚HTML5和CSS3中所有属性、元素和函数的简明参考表。
媒体推荐
在这个浏览器时代你不学点儿网页构建知识还真是有些跟不上时代步伐了。这本书全面覆盖HTML5、CSS3和JavaScript,囊括了构建网页所需的基本知识以及一些中高级内容,新手选这本书绝对不会错,中级开发人员将它作为参考书也相当方便! ——读者 这本书对于学习HTML5来说真是不可多得的好书,作者既熟知技术趋势,又深谙写作技巧,看看书中那些代码示例、实现效果图、简明参考表,无一不正中读者下怀,难怪许多Web开发人员都极力推荐这本书! ——goodreads读者
作者简介
Adam Freeman 曾在多家名企担任高级职务,现为畅销技术图书作家,著有多部C#、.NET和Java方面的大部头作品。其中《ASP.NET 4高级程序设计(第4版)》、《精通ASP.NET MVC 3框架(第3版)》销量均在同品种中名列前茅,备受读者推崇。《HTML5权威指南》是Freeman专门为网页开发新手和网页设计师打造的经典参考书,这本书秉承作者的一贯风格,幽默风趣、简约凝练、逻辑性强,是广大Web开发人员的必读经典。
目录
目 录 第一部分 开篇 第1章 HTML5背景知识1 1.1HTML的历史2 1.1.1JavaScript出场2 1.1.2浏览器战争的结束3 1.1.3插件称雄3 1.1.4语义HTML浮出水面3 1.1.5发展态势:HTML标准滞后于其使用4 1.2HTML5简介4 1.2.1新标准4 1.2.2引入原生多媒体支持5 1.2.3引入可编程内容5 1.2.4引入语义Web6 1.3HTML5现况6 1.3.1浏览器对HTML5的支持情况6 1.3.2网站对HTML5的支持情况6 1.4本书结构6 1.5HTML5的更多信息7 1.6小结7 第2章 准备工作8 2.1挑选浏览器8 2.2挑选HTML编辑器9 2.3挑选Web服务器9 2.4获取Node.js9 2.5获取示例代码10 2.6小结10 第3章 初探HTML11 3.1使用元素12 3.1.1了解本章用到的元素13 3.1.2使用空元素14 3.1.3使用自闭合标签14 3.1.4使用虚元素14 3.2使用元素属性16 3.2.1一个元素应用多个属性16 3.2.2使用布尔属性16 3.2.3使用自定义属性17 3.3创建HTML文档17 3.3.1外层结构18 数据19 3.3.3内容19 3.3.4父元素、子元素、后代元素和兄弟元素20 3.3.5了解元素类型20 3.4使用HTML实体21 3.5HTML5全局属性21 3.5.1accesskey属性21 3.5.2class属性22 3.5.3contenteditable属性25 3.5.4contextmenu属性25 3.5.5dir属性26 3.5.6draggable属性26 3.5.7dropzone属性26 3.5.8hidden属性26 3.5.9id属性28 3.5.10lang属性29 3.5.11spellcheck属性29 3.5.12style属性30 3.5.13tabindex属性30 3.5.14title属性31 3.6有用的HTML工具32 3.7小结32 第4章 初探CSS33 4.1定义和应用样式33 4.1.1了解本章所用的CSS属性34 4.1.2使用元素内嵌样式34 4.1.3使用文档内嵌样式35 4.1.4使用外部样式表37 4.2样式的层叠和继承40 4.2.1浏览器样式40 4.2.2用户样式41 4.2.3样式如何层叠42 4.2.4用重要样式调整层叠次序42 4.2.5根据具体程度和定义次序解决同级样式冲突43 4.2.6继承46 4.3CSS中的颜色48 4.4CSS中的长度49 4.4.1绝对长度50 4.4.2相对长度51 4.5其他CSS单位56 4.5.1使用CSS角度56 4.5.2使用CSS时间57 4.6测试CSS特性的支持情况57 4.7有用的CSS工具57 4.7.1浏览器样式报告57 4.7.2用SelectorGadget生成选择器58 4.7.3用LESS改进CSS59 4.7.4使用CSS框架59 4.8小结59 第5章 初探JavaScript60 5.1准备使用JavaScript61 5.2使用语句62 5.3定义和使用函数63 5.3.1定义带参数的函数63 5.3.2定义会返回结果的函数64 5.4使用变量和类型65 5.4.1使用基本类型66 5.4.2创建对象67 5.4.3使用对象69 5.5使用JavaScript运算符73 5.5.1相等和等同运算符73 5.5.2显式类型转换76 5.6使用数组78 5.6.1使用数组字面量79 5.6.2读取和修改数组内容80 5.6.3枚举数组内容80 5.6.4使用内置的数组方法81 5.7处理错误81 5.8比较undefined和null值83 5.8.1检查变量或属性是否为undefined或null85 5.8.2区分null和undefined85 5.9常用的JavaScript工具86 5.9.1使用JavaScript调试器86 5.9.2使用JavaScript库86 5.10小结87 第二部分 HTML元素 第6章 HTML素背景知识90 6.1语义与呈现分离90 素选用原则91 6.2.1少亦可为多91 6.2.2别误用元素91 6.2.3具体为佳,一以贯之91 6.2.4对用户不要想当然92 素说明体例92 素速览92 6.4.1文档和元数据元素92 6.4.2文本元素93 6.4.3对内容分组94 6.4.4划分内容95 6.4.5制表95 6.4.6创建表单96 6.4.7嵌入内容96 6.5未实现的元素97 6.6小结97 第7章 创建HTML文档98 7.1构筑基本的文档结构99 7.1.1DOCTYPE元素99 7.1.2html元素99 7.1.3head元素100 7.1.4body元素101 7.2用元数据元素说明文档102 7.2.1设置文档标题102 7.2.2设置相对URL的解析基准103 7.2.3用元数据说明文档104 7.2.4定义CSS样式108 7.2.5指定外部资源112 7.3使用脚本元素116 7.3.1script元素117 7.3.2noscript元素123 7.4小结125 第8章 标记文字126 8.1生成超链接127 8.1.1生成指向外部的超链接128 8.1.2使用相对URL129 8.1.3生成内部超链接129 8.1.4设定浏览环境130 8.2用基本的文字元素标记内容131 8.2.1表示关键词和产品名称131 8.2.2加以强调132 8.2.3表示外文词语或科技术语133 8.2.4表示不准确或校正134 8.2.5表示重要的文字135 8.2.6为文字添加下划线136 8.2.7添加小号字体内容137 8.2.8添加上标和下标138 8.3换行139 8.3.1强制换行139 8.3.2指明可以安全换行的建议位置141 8.4表示输入和输出142 8.5使用标题引用、引文、定义和缩写143 8.5.1表示缩写143 8.5.2定义术语144 8.5.3引用来自他处的内容145 8.5.4引用其他作品的标题146 8.6使用语言元素147 8.6.1ruby、rt和rp元素147 8.6.2bdo元素149 8.6.3bdi元素150 8.7其他文本元素152 8.7.1表示一段一般性的内容152 8.7.2突出显示文本153 8.7.3表示添加和删除的内容155 8.7.4表示时间和日期156 8.8小结157 第9章 组织内容158 9.1为什么要对内容分组158 9.2建立段落159 9.3使用div元素161 9.4使用预先编排好格式的内容163 9.5引用他处内容164 9.6添加主题分隔166 9.7将内容组织为列表169 9.7.1ol元素169 9.7.2ul元素171 9.7.3li元素172 9.7.4生成说明列表173 9.7.5生成自定义列表174 9.8使用插图176 9.9小结178 第10章 文档分节179 10.1添加基本的标题179 10.2隐藏子标题182 10.3生成节185 10.4添加首部和尾部188 10.5添加导航区域191 10.6使用article194 10.7生成附注栏198 10.8提供联系信息201 10.9生成详情区域202 10.10小结205 第11章 表格元素206 11.1生成基本的表格206 11.2添加表头单元格209 11.3为表格添加结构211 11.3.1表示表头和表格主题212 11.3.2添加表脚214 11.4制作不规则表格216 11.5把表头与单元格关联起来220 11.6为表格添加标题221 11.7处理列223 11.8设置表格边框228 11.9小结230 第12章 表单231 12.1制作基本表单232 12.1.1定义表单233 12.1.2查看表单数据234 12.2配置表单236 12.2.1配置表单的action属性236 12.2.2配置HTTP方法属性237 12.2.3配置数据编码237 12.2.4控制表单的自动完成功能239 12.2.5指定表单反馈信息的目标显示位置240 12.2.6设置表单名称242 12.3在表单中添加说明标签242 12.4自动聚焦到某个input元素244 12.5禁用单个input元素245 12.6对表单元素编组246 12.6.1为fieldset元素添加说明标签248 12.6.2用fieldset禁用整组input元素249 12.7使用button元素250 12.7.1用button元素提交表单251 12.7.2用button元素重置表单252 12.7.3把button作为一般元素使用253 12.8使用表单外的元素254 12.9小结254 第13章 定制input元素255 13.1用input元素输入文字256 13.1.1设定元素大小256 13.1.2设置初始值和占位式提示258 13.1.3使用数据列表259 13.1.4生成只读或被禁用的文本框262 13.1.5指定文字方向数据的名称263 13.2用input元素输入密码263 13.3用input元素生成按钮266 13.4用input元素为输入数据把关267 13.4.1用input元素获取数值268 13.4.2用input元素获取指定范围内的数值270 13.4.3用input元素获取布尔型输入271 13.4.4用input元素生成一组固定选项273 13.4.5用input元素获取有规定格式的字符串275 13.4.6用input元素获取时间和日期277 13.4.7用input元素获取颜色值279 13.5用input元素获取搜索用词281 13.6用input元素生成隐藏的数据项282 13.7用input元素生成图像按钮和分区响应图284 13.8用input元素上传文件286 13.9小结288 第14章 其他表单元素及输入验证289 14.1使用其他表单元素289 14.1.1生成选项列表289 14.1.2输入多行文字294 14.1.3表示计算结果296 14.1.4生成公开/私有密钥对297 14.2使用输入验证298 14.2.1确保用户提供了一个值299 14.2.2确保输入值位于某个范围内300 14.2.3确保输入值与指定模式匹配301 14.2.4确保输入值是电子邮箱地址或URL303 14.3禁用输入验证304 14.4小结305 第15章 嵌入内容306 15.1嵌入图像306 15.1.1在超链接里嵌入图像308 15.1.2创建客户端分区响应图310 15.2嵌入另一张HTML文档313 15.3通过插件嵌入内容315 15.3.1使用embed元素315 15.3.2使用object和param元素317 15.4object元素的其他用途319 15.4.1使用object元素嵌入图像319 15.4.2使用object元素创建分区响应图320 15.4.3将object元素作为浏览上下文环境320 15.5嵌入数字表现形式321 15.5.1显示进度321 15.5.2显示范围里的值322 15.6其他嵌入元素324 15.6.1嵌入音频和视频324 15.6.2嵌入图形324 15.7小结324 第三部分 CSS 第16章 理解CSS326 16.1CSS标准化326 16.2盒模型327 16.3选择器简明参考328 16.4属性简明参考329 16.4.1边框和背景属性329 16.4.2盒模型属性331 16.4.3布局属性332 16.4.4文本属性332 16.4.5过渡、动画和变换属性333 16.4.6其他属性334 16.5小结334 第17章 使用CSS选择器(第Ⅰ部分)335 17.1使用CSS基本选择器335 17.1.1选择所有元素336 17.1.2根据类型选择元素337 17.1.3根据类选择元素338 17.1.4根据ID选择元素340 17.1.5根据属性选择元素341 17.2复合选择器344 17.2.1并集选择器344 17.2.2后代选择器345 17.2.3选择子元素347 17.2.4选择兄弟元素349 17.3使用伪元素选择器351 17.3.1使用::first-line选择器351 17.3.2使用::first-letter选择器352 17.3.3使用:before和:after选择器353 17.3.4使用CSS计数器354 17.4小结356 第18章 使用CSS选择器(第Ⅱ部分)357 18.1使用结构性伪类选择器357 18.1.1使用根元素选择器358 18.1.2使用子元素选择器359 18.1.3使用:nth-child选择器363 18.2使用UI伪类选择器364 18.2.1选择启用或禁用元素364 18.2.2选择已勾选的元素365 18.2.3选择默认元素366 18.2.4选择有效和无效的input元素367 18.2.5选择限定范围的input元素369 18.2.6选择必需和可选的input元素370 18.3使用动态伪类选择器371 18.3.1使用:link和:visited选择器371 18.3.2使用:hover选择器372 18.3.3使用:active选择器373 18.3.4使用:focus选择器374 18.4其他伪类选择器375 18.4.1使用否定选择器376 18.4.2使用:empty选择器376 18.4.3使用:lang选择器377 18.4.4使用:target选择器377 18.5小结379 第19章 使用边框和背景380 19.1应用边框样式380 19.1.1定义边框宽度381 19.1.2定义边框样式382 19.1.3为一条边应用边框样式383 19.1.4使用border简写属性384 19.1.5创建圆角边框385 19.1.6将图像用做边框388 19.2设置元素的背景392 19.2.1设置背景颜色和图像392 19.2.2设置背景图像的尺寸394 19.2.3设置背景图像位置395 19.2.4设置元素的背景附着方式396 19.2.5设置背景图像的开始位置和裁剪样式397 19.2.6使用background简写属性399 19.3创建盒子阴影 19.4应用轮廓403 19.5小结405 第20章 使用盒模型406 20.1为元素应用内边距407 20.2为元素应用外边距409 20.3控制元素的尺寸410 20.3.1设置一定尺寸的盒子412 20.3.2设置最小和最大尺寸413 20.4处理溢出内容414 20.5控制元素的可见性417 20.6设置元素的盒类型419 20.6.1认识块级元素420 20.6.2认识行内元素421 20.6.3认识行内?块级元素422 20.6.4认识插入元素423 20.6.5隐藏元素426 20.7创建浮动盒427 20.8小结433 第21章 创建布局434 21.1定位内容434 21.1.1设置定位类型435 21.1.2设置元素的层叠顺序437 21.2创建多列布局439 21.3创建弹性盒布局442 21.3.1创建简单的弹性盒444 21.3.2伸缩多个元素446 21.3.3处理垂直空间447 21.3.4处理最大尺寸448 21.4创建表格布局450 21.5小结453 第22章 设置文本样式454 22.1应用基本文本样式454 22.1.1对齐文本455 22.1.2处理空白457 22.1.3指定文本方向460 22.1.4指定单词、字母、行之间的间距461 22.1.5控制断词462 22.1.6首行缩进464 22.2文本装饰与大小写转换465 22.3创建文本阴影467 22.4使用字体468 22.4.1选择字体469 22.4.2设置字体大小470 22.4.3设置字体样式和粗细472 22.5使用Web字体473 22.6小结475 第23章 过渡、动画和变换476 23.1使用过渡477 23.1.1创建反向过渡480 23.1.2选择中间值的计算方式481 23.2使用动画483 23.2.1使用关键帧486 23.2.2设置重复方向488 23.2.3理解结束状态490 23.2.4初始布局时应用动画491 23.2.5重用关键帧492 23.2.6为多个元素应用多个动画493 23.2.7停止和启动动画495 23.3使用变换497 23.3.1应用变换497 23.3.2指定元素变换的起点498 23.3.3将变换作为动画和过渡处理500 23.4小结501 第24章 其他CSS属性和特性502 24.1设置元素的颜色和透明度502 24.1.1设置前景色502 24.1.2设置元素的透明度504 24.2设置表格样式505 24.2.1合并表格边框505 24.2.2配置独立边框507 24.2.3处理空单元格508 24.2.4设置标题的位置509 24.2.5指定表格布局511 24.3设置列表样式512 24.3.1设置列表标记类型513 24.3.2使用图像作为列表标记514 24.3.3设置列表标记的位置515 24.4设置光标样式517 24.5小结518 第四部分 使用DOM 第25章 理解DOM520 25.1理解文档对象模型520 25.2理解DOM Level和兼容性522 25.3DOM快速查询524 25.3.1Document的成员524 25.3.2Window的成员525 25.3.3HTMLElement的成员527 25.3.4DOM里的CSS属性529 25.3.5DOM中的事件531 25.4小结532 第26章 使用Document对象533 26.1使用Document元数据536 26.1.1获取文档信息536 26.1.2使用Location对象537 26.1.3读取和写入cookie541 26.1.4理解就绪状态542 26.1.5获取DOM的实现情况543 26.2获取HTML元素对象544 26.2.1使用属性获取元素对象545 26.2.2使用数组标记获取已命名元素546 26.2.3搜索元素548 26.2.4合并进行链式搜索550 26.3在DOM树里导航552 26.4小结554 第27章 使用Window对象555 27.1获取Window对象555 27.2获取窗口信息556 27.3与窗口进行交互558 27.4对用户进行提示559 27.5获取基本信息561 27.6使用浏览器历史561 27.6.1在浏览历史中导航562 27.6.2在浏览历史里插入条目564 27.6.3为不同的文档添加条目566 27.6.4在浏览历史中保存复杂状态567 27.6.5替换浏览历史中的条目570 27.7使用跨文档消息传递570 27.8使用计时器574 27.9小结576 第28章 使用DOM元素577 28.1使用元素对象577 28.1.1使用类579 28.1.2使用元素属性582 28.2使用Text对象586 28.3修改模型588 28.3.1创建和删除元素589 28.3.2复制元素591 28.3.3移动元素592 28.3.4比较元素对象593 28.3.5使用HTML片段595 28.3.6向文本块插入元素600 28.4小结601 第29章 为DOM元素设置样式602 29.1使用样式表602 29.1.1获得样式表的基本信息603 29.1.2使用媒介限制605 29.1.3禁用样式表607 29.1.4CSSRuleList对象的成员608 29.2使用元素样式611 29.3使用CSSStyleDeclaration对象613 29.3.1使用便捷属性613 29.3.2使用常规属性616 29.3.3使用细粒度的CSS DOM对象620 29.4使用计算样式623 29.5小结625 第30章 使用事件626 30.1使用简单事件处理器627 30.1.1实现简单的内联事件处理器627 30.1.2实现一个简单的事件处理函数629 30.2使用DOM和事件对象630 30.2.1按类型区分事件633 30.2.2理解事件流634 30.2.3使用可撤销事件641 30.3使用HTML事件642 30.3.1文档和窗口事件642 30.3.2使用鼠标事件643 30.3.3使用键盘焦点事件645 30.3.4使用键盘事件647 30.3.5使用表单事件649 30.4小结649 第31章 使用元素专属对象650 31.1文档和元数据对象650 31.1.1base元素650 31.1.2body元素650 31.1.3link元素651 31.1.4meta元素651 31.1.5script元素651 31.1.6style元素652 31.1.7title元素652 31.1.8其他文档和元数据元素652 31.2文本元素652 31.2.1a元素652 31.2.2del和ins元素653 31.2.3q元素653 31.2.4time元素653 31.2.5其他文本元素654 31.3分组元素654 31.3.1blockquote元素654 31.3.2li元素654 31.3.3ol元素654 31.3.4其他分组元素655 31.4区块元素655 31.4.1details元素655 31.4.2其他区块元素655 31.5表格元素655 31.5.1col和colgroup元素655 31.5.2table元素656 31.5.3thead、tbody和tfoot元素656 31.5.4th元素657 31.5.5tr元素657 31.5.6其他表格元素657 31.6表单元素657 31.6.1button元素657 31.6.2datalist元素658 31.6.3fieldset元素658 31.6.4form元素658 31.6.5input元素659 31.6.6label元素660 31.6.7legend元素661 31.6.8optgroup元素661 31.6.9option元素661 31.6.10output元素661 31.6.11select元素662 31.6.12textarea元素663 31.7内容元素663 31.7.1area元素664 31.7.2embed元素664 31.7.3iframe元素664 31.7.4img元素665 31.7.5map元素665 31.7.6meter元素665 31.7.7object元素666 31.7.8param元素666 31.7.9progress元素667 31.8小结667 第五部分 高级功能 第32章 使用Ajax(第Ⅰ部分)670 32.1Ajax起步671 32.1.1处理响应674 32.1.2主流中的异类:应对Opera675 32.2使用Ajax事件677 32.3处理错误679 32.3.1处理设置错误681 32.3.2处理请求错误682 32.3.3处理应用程序错误682 32.4获取和设置标头683 32.4.1覆盖请求的HTTP方法683 32.4.2禁用内容缓存685 32.4.3读取响应标头685 32.5生成跨源Ajax请求687 32.5.1使用Origin请求标头690 32.5.2高级CORS功能691 32.6中止请求691 32.7小结693 第33章 使用Ajax(第Ⅱ部分)694 33.1准备向服务器发送数据694 33.1.1定义服务器695 33.1.2理解问题所在697 33.2发送表单数据698 33.3使用FormData对象发送表单数据701 33.3.1创建FormData对象701 33.3.2修改FormData对象702 33.4发送JSON数据703 33.5发送文件705 33.6追踪上传进度707 33.7请求并处理不同内容类型709 33.7.1接收HTML片段709 33.7.2接收XML数据712 33.7.3接收JSON数据714 33.8小结715 第34章 使用多媒体716 34.1使用video元素717 34.1.1预先加载视频718 34.1.2显示占位图像720 34.1.3设置视频尺寸720 34.1.4指定视频来源(和格式)721 34.1.5track元素724 34.2使用audio元素724 34.3通过DOM操作嵌入式媒体726 34.3.1获得媒体信息726 34.3.2评估回放能力728 34.3.3控制媒体回放730 34.4小结733 第35章 使用canvas元素(第Ⅰ部分)734 35.1开始使用canvas元素735 35.2获取画布的上下文736 35.3绘制矩形737 35.4设置画布绘制状态739 35.4.1设置线条连接样式741 35.4.2设置填充和笔触样式742 35.4.3使用渐变743 35.4.4使用径向渐变748 35.4.5使用图案751 35.5保存和恢复绘制状态753 35.6绘制图像755 35.6.1使用视频图像756 35.6.2使用画布图像759 35.7小结761 第36章 使用canvas元素(第Ⅱ部分)762 36.1用路径绘图762 36.1.1用线条绘制路径763 36.1.2绘制矩形766 36.2绘制圆弧768 36.2.1使用arcTo方法768 36.2.2使用arc方法772 36.3绘制贝塞尔曲线773 36.3.1绘制三次贝塞尔曲线773 36.3.2绘制二次贝塞尔曲线775 36.4创建剪辑区域777 36.5绘制文本778 36.6使用特效和变换780 36.6.1使用阴影780 36.6.2使用透明度781 36.6.3使用合成782 36.6.4使用变换784 36.7小结786 第37章 使用拖放787 37.1创建来源项目787 37.2创建释放区791 37.3使用DataTransfer对象794 37.3.1根据数据过滤被拖动项目796 37.3.2拖放文件797 37.4小结801 第38章 使用地理定位802 38.1使用地理定位802 38.2处理地理定位错误805 38.3指定地理定位选项807 38.4监控位置809 38.5小结 第39章 使用Web存储811 39.1使用本地存储811 39.2使用会话存储815 39.3小结819 第40章 创建离线Web应用程序820 40.1定义问题820 40.2定义清单822 40.3检测浏览器状态827 40.4使用离线缓存828 40.4.1制作更新832 40.4.2获取更新832 40.4.3应用更新833 40.5小结834
序言
第一章:HTML5背景知识 HTML(Hypertext Markup Language,超文本标记语言)诞生于20世纪90年代初。我与它的初次邂逅大约是在1993年或1994年,当时我还在伦敦附近一个大学的研究实验室工作。那时浏览器只有NCSA Mosaic这一种,Web服务器的种类也屈指可数。 回想那段日子我们对HTML和万维网的着迷,仍不免有些惊讶。那时我们还得不厌其烦地把“World Wide Web”(万维网)这三个单词全写出来,因为它的知名度还没有那么高,远没有今天这么受人瞩目,还不能只简称其为“Web”。 那时一切都还很简陋。我还记得当时盯着一些慢腾腾加载的宝石图片看的情景。这都是宽带革命之前的事,整个大学享有的带宽大致与如今的一部移动电话相当。不过我们还是很激动。为迎接新时代的到来,大家都在忙着修改课题经费申请。尽管我们上网能做的只是看看另一所大学的咖啡壶图片(这所大学也在伦敦附近,但过去喝杯咖啡却并不近),我们还是有一种强烈的感觉:技术世界已经分为Web诞生前和诞生后两个时代了。 光阴荏苒,在许多用户眼中,Web跟因特网变成了一回事儿,而我们也远远超越了为几张宝石图片就雀跃不已的层次。在此过程中,HTML有过扩充,有过增强,有过扭曲,有过煎熬,见过争斗,见过官司,受过忽视,受过追捧,曾被贬为雕虫小技,也曾被誉为未来之星。待尘埃落定,它已然成为亿万人日常生活不可或缺的一部分。 本书讲述的是HTML5。这是HTML标准的最新版本,意在为这项重要技术带来秩序、条理和改进。曾经的青涩少年终于成熟了。 1.1 HTML的历史 讲HTML的书都有“HTML的历史”这样一节,其中大都会提供HTML标准从诞生至今的详细年表。需要这类信息的读者可以去查查维基百科,不过这些信息读起来可能比较枯燥乏味,用处也不大。本书只关心其中几个重要转折点和一个长期存在的发展态势,旨在让读者明白HTML是如何成型的,明白为什么最终走到了HTML5。 1.1.1 JavaScript出场 JavaScript语言(虽然取了这么一个名字,但是它跟Java程序设计语言基本上没有什么关系)出自一家名为网景的公司。它的出现标志着内嵌在Web浏览器中的客户端脚本程序控制功能的发端。原本是一种静态内容载体的HTML因此变得有点丰富起来。之所以说“有点丰富”,是因为现在我们在浏览器中见到的这种复杂交互方式是经过一段时间的发展之后才形成的。 JavaScript并非HTML规范核心的组成部分,然而Web浏览器、HTML和JavaScript之间的关系是如此紧密,以至于根本无法将它们分开讨论。HTML5规范假定可以使用JavaScript,而且要想使用HTML5中新增的一些最为引人注目的特性也需要用到JavaScript。 1.1.2 浏览器战争的结束 浏览器市场也有过激烈的竞争。主要的角逐者是微软和网景,它们都把在自己的浏览器中添加一些独有的特性当做竞争手段。其如意算盘是这样打的:诱人的专有特性会诱使开发人员制作出只能在特定浏览器上使用的内容,而诱人的内容又会诱使用户对能提供这种内容的浏览器青睐有加,由此市场霸业可成。 可惜人算不如天算。这样做的结果是Web开发人员要么只使用那些所有浏览器都有的特性,要么煞费苦心地想些变通办法来使用各款浏览器中勉强相当的那些特性。这不啻为一种煎熬,而且其后遗症直到现在仍然在影响Web开发。 微软用免费提供IE来与网景收费的Navigator抢生意,这一招儿后来被认定违反垄断法。很多人指责微软是网景垮台的罪魁祸首。这一指控或许不无道理,不过在我这个曾在那段时期为网景做过大约18个月顾问的人看来,我从没见过像它那样一根筋地自残的公司。有些公司注定要成为别人的前车之鉴,网景就是其中之一。 浏览器战争以网景倒台及微软受到惩处结束,为基于标准的网络浏览奠定了基础。HTML规范有了改进,遵从这个规范成了准则。现在的浏览器需要凭遵守标准的程度来竞争。这是一次天翻地覆的转折,开发人员和用户均受益于此。 1.1.3 插件称雄 插件是Web世界的“益虫”。它们可以提供一些单用HTML很难实现的高级特性和丰富内容。有些插件特性如此丰富、部署如此普遍,以至于不少网站只提供用于这种插件的内容。Adobe公司的Flash正是这样一个典型。我经常见到完全用Flash实现的网站。按说这也没什么不妥,不过这就意味着浏览器和HTML除了Flash容器一职外再无他用。 浏览器开发商看插件不顺眼,因为它把控制权转移到了插件开发商手中。HTML5的一大改进就是着力于让浏览器直接处理那些原来要使用Flash的富内容(rich content)。苹果和微软是疏远Flash的两个急先锋。前者的iOS不支持Flash,后者则在Windows 8附带的Metro风格的IE中禁用了Flash。 1.1.4 语义HTML浮出水面 HTML标准的早期版本不太关心将内容的意义与其呈现方式分开。想表示一段文字的重要性,使用一个让文字显示为粗体的HTML元素就是了。把粗体内容与重要内容关联起来是用户的事。这对人类用户来说很容易,却会让自动化工具犯难。自HTML初次亮相以来,对内容进行自动处理日趋重要,人们也越来越致力于分开HTML元素的意义与内容在浏览器中的呈现方式。 1.1.5 发展态势:HTML标准滞后于其使用 制定标准一般都是一个长期过程,像HTML这种应用广泛的技术更是如此。参与方众多,每家都想把新标准往符合自己利益或观点的方向引。而标准并不是法律,标准制定机构害怕分裂甚于一切。因此对于未来的特性和改进该当如何,各方经常陷入旷日持久的讨价还价。 负责制定HTML标准的是W3C(World Wide Web Consortium,万维网联盟)。这是一项棘手的任务。一条提案要花不少时间才能成为标准。而对HTML核心规范的修改则需经过很长时间才会得到批准。 冗长的标准制定过程带来的结果就是W3C总是要多绕一些路,总是在将已经被大家接受的实际做法追认为标准。HTML规范反映的只是几年前关于Web内容的前沿思考。这削弱了HTML标准的重要性,因为真正的革新并非来自W3C,而是来自浏览器和插件。 1.2 HTML5简介 HTML5不仅仅是HTML规范的最新版本,它还是一系列用来制作现代富Web内容的相关技术的总称。后面各章将会介绍这些技术,其中最重要的三项技术是HTML5核心规范、CSS(Cascading Style Sheets,层叠样式表)和JavaScript。 HTML5核心规范定义用以标记内容的元素,并明确其含义。CSS可用于控制标记过的内容呈现在用户面前的外貌。JavaScript则可以用来操纵HTML文档的内容以及响应用户的操作,此外要想使用HTML5新增元素的一些为编程目的设计的特性也需要用到JavaScript。 提示 看不懂上面说的这些东西不要紧。我会分别在第3章、第4章和第5章专门介绍HTML元素、CSS和JavaScript。 有些人(那些挑剔、执拗、爱钻牛角尖的人)会说HTML5所指的只是HTML元素。别管他们。这些人看不出Web内容的本质所发生的根本性变化。用于网页的各种技术之间的关联已经变得如此紧密,以致于需要通晓这些技术才能制作Web内容。如果只使用HTML元素,不用CSS,这样制作出来的内容会让用户觉得不便阅读。如果用了HTML和CSS,但不用JavaScript,那就无法为用户的操作提供即时反馈,也无法使用HTML5中的一些高级特性。 1.2.1 新标准 为了应对漫长的标准化过程以及标准落后于常见用法的情况,HTM5及其相关技术是作为一系列小型标准而制定的。其中有些标准只有区区几页,涉及的只是某项特性中一个高度细化的方面。当然,其他一些标准仍然有密密麻麻的几百页,涵盖了相关功能的所有方面。 这样做的目的是让较小的团体可以合作设计和将对他们较为重要的特性标准化,争议较少的特性可以先标准化,不必受围绕其他特性发生的争论的拖累。 这个办法有利也有弊。好处是可以加快标准制定步伐。主要的弊端在于难以全面掌握制定中的各个标准的情况以及这些标准之间的关系。技术规范的质量也有所下降。有些标准中存在着一些歧义,致使浏览器中的实现出现了不一致的情况。 最大的不足之处大概要算没有一条可用来评估HTML5达标情况的基准线。我们现在还处于初始阶段,但是不能指望用户可能用到的所有浏览器都实现了要用的特性。因此采用HTML5中的特性是件复杂的事情,需要仔细评估相关标准得到支持的情况。W3C公布过一个正式的HTML5徽标(如图1-1所示),但是它并不代表对HTML5标准及相关技术的全面支持。 图1-1 W3C的正式HTML5徽标 1.2.2 引入原生多媒体支持 HTML5的一大改进就是支持在浏览器中直接播放视频和音频文件(也就是说不借助于插件)。这是W3C对插件风靡现象的一种反应。原生(native)多媒体支持再结合其他HTML特性可望大有作为。这些特性将在第34章介绍。 1.2.3 引入可编程内容 HTML5最大的变化之一是添加了canvas元素(第34章和第35章会有介绍)。这个元素是对插件现象的另一反应,它提供了一个通用的绘图平面,开发人员可以用它完成一些通常用Adobe Flash来完成的任务。 这个特性之所以重要,部分原因在于要使用canvas元素就必须用到JavaScript。编程从而成了HTML文档中第一层次的事情,这是一个重大转变。 1.2.4 引入语义Web HTML5引入了一些用来分开元素的含义和内容呈现方式的特性和规则。这是HTML5中的一个重要概念,详见第6章。这个主题在本书中将多次论及,它标志着HTML在走向成熟的道路上又迈上了一个新台阶,反映出制作和使用HTML内容的方式的多样性。这个变化(它逐步体现在之前的HTML版本中)稍稍增加了Web开发者的负担,这是因为开发者需要先标记内容然后再定义其呈现方式。不过有些实用的新改进可以减轻这种负担。 1.3 HTML5现况 HTML5的核心标准目前仍在制定过程中,一时完成不了。这意味着本书介绍的特性与最终标准中的可能略有出入。不过,标准正式出炉还得等上好些年,而最终版本与目前版本可能出入不大。 1.3.1 浏览器对HTML5的支持情况 最流行的那些浏览器都已经实现了许多HTML特性。本书演示示例的显示效果时,用来浏览HTML5文档的是谷歌的Chrome或Mozilla的Firefox。然而,不是每款浏览器都支持所有的特性。在把某个特性用到实际项目之前,应该先核查一下浏览器是否支持这个特性。有些浏览器(例如Chrome和Firefox)的升级近乎持续不断。撰写本书时我已经记不清所使用的浏览器到底更新过多少次了。鉴于每次升级都会加入些新特性或修补点纰漏,这意味着我无法就某种特性得到哪些浏览器的支持提供确切的信息。不过考虑到HTML标准的分散本性,使用Modernizr之类的JavaScript库检查特性是可行的。使用Modernizr,可以用编程的方式判断用户使用的浏览器是否支持关键的HTML特性,籍此可以决定在文档中应该使用哪些特性。 习惯未雨绸缪的读者可以参考一下When Can I Use?网站。上面提供了浏览器的支持情况和采用率方面的详细信息,并且勤于修订。 1.3.2 网站对HTML5的支持情况 用到HTML5特性的网站日益增多。其中有些属于示范性网站,是用来演示HTML特性的。但是能利用浏览器对HTML5的支持的实用型网站也越来越多。YouTube就是一个典型,它现在已经提供让浏览器直接播放的视频——当然,它还为较老的浏览器提供Flash视频。 1.4 本书结构 本书分为五部分。本章所属的第一部分除了介绍使用本书所需要的预备知识外,还会介绍HTML、CSS和JavaScript最新进展的基本情况。对于近期未做过Web开发工作的读者,这此内容可以助其跟上形势。 第二部分讨论的是HTML元素,包括那些HTML5中新增或有所改动的元素。每个元素都有说明和演示。读者还可以了解到元素默认的呈现方式。 第三部分讨论的是CSS(Cascading Style Sheet,层叠样式表)。其中各章介绍了用来控制内容样式的所有CSS选择器和属性,还提供了大量例子和图示来帮助读者掌握其用法。这部分讨论的是CSS的最新版本(CSS3),不过也会说明一下哪些特性是CSS1和CSS2中引入的。 第四部分介绍的是DOM(Document Object Model,文档对象模型)。通过DOM,即可用JavaScript探索和操纵HTML内容。DOM包含着对于制作富Web内容至关重要的一套特性。 第五部分讲的是Ajax、多媒体和canvas元素等HTML5高级特性。这些特性需要更高的编程技术,但也能显著提升Web内容的品质。使用HTML5时这些特性并非非用不可,不过对于复杂项目来说它们值得一试。 注意 本书没有涉及的一种HTML5相关技术是SVG(Scalable Vector Graph,可缩放矢量图形)。使用SVG技术,可以用标记或JavaScript生成二维矢量图形。这不是一个简单的话题。对SVG感兴趣的读者可参阅Kurt Cagle所著的SVG Programming一书,该书由Apress出版。 1.5 HTML5的更多信息 虽然本书力求做到全面详尽,但是有些事情还是难以避免。读者可能会遇到我未曾提及的情况,也可能会有问题但在书中找不到答案。在此情况下,首选的参考资料是W3C的网站。读者可以在此细读相关标准,并能明白浏览器应该如何处理。那些标准可能不太好读(甚至有自我参照倾向),但能提供一些有用的深层信息。 还有一个资料来源是Mozilla开发者网络。它更具亲和力,不过权威性略有不如。上面有大量关于各种HTML特性的有用信息,包括一些HTML5方面的很不错的内容。 1.6 小结 本章为讲解HTML5提供了一些背景知识,罗列了HTML发展史上的一些关键转折点,并说明了HTML5的应对方式。下一章将告诉读者如何为使用本书中的大量例子做好准备。在此之后,我们就将从HTML元素本身入手开始HTML5的探索之旅。
ISBN
出版社人民邮电出版社
作者Adam·Freeman
尺寸16