第一部分 现代标记 2
第1章 HTML5简介 2
1.1 HTML5的故事 2
1.1.1 XHTML1.0:更严格的标准 2
1.1.2 XHTML2:意想不到的失败 3
1.1.3 HTML5:起死回生 3
1.1.4 HTML:活着的语言 5
1.2 HTML5的三个主要原理 6
1.2.1 不破坏Web 6
1.2.2 修补牛蹄子路 7
1.2.3 实用至上 7
1.3 HTML5标记初体验 8
1.3.1 HTML5文档类型 9
1.3.2 字符编码 11
1.3.3 页面语言 11
1.3.4 添加样式表 11
1.3.5 添加JavaScript 12
1.3.6 最终结果 13
1.4 HTML5语法 13
1.4.1 放松的规则 13
1.4.2 HTML5验证 14
1.4.3 XHTML的回归 16
1.5 HTML5元素家族 17
1.5.1 新增的元素 18
1.5.2 删除的元素 18
1.5.3 改变的元素 19
1.5.4 调整的元素 20
1.5.5 标准化的元素 21
1.6 今天开始用HTML5 21
1.6.1 了解浏览器支持情况 23
1.6.2 浏览器装机情况统计 24
1.6.3 通过Modernizr检测功能 25
1.6.4 使用“腻子脚本”填补功能缺陷 28
第2章 用语义元素构造网页 30
2.1 语义元素 30
2.2 改造传统的HTML页面 32
2.2.1 构造页面的老办法 32
2.2.2 使用HTML5构造页面 35
2.2.3 用〈figure〉添加插图 38
2.2.4 用〈aside〉添加附注 40
2.3 浏览器对语义元素的支持情况 42
2.3.1 为语义元素添加样式 43
2.3.2 使用HTML5“垫片” 43
2.3.3 Modernizr:一站式解决方案 44
2.4 使用语义元素设计站点 44
2.4.1 理解〈header〉 45
2.4.2 用〈nav〉标注导航链接 47
2.4.3 理解区块 51
2.4.4 理解〈footer〉 51
2.4.5 使用〈main〉标识主要内容 54
2.5 HTML5纲要 55
2.5.1 如何查看纲要 55
2.5.2 基本纲要 56
2.5.3 分块元素 58
2.5.4 解决一个纲要问题 60
第3章 编写更有意义的标记 64
3.1 回顾语义元素 64
3.1.1 使用〈time〉标注日期和时间 65
3.1.2 使用〈output〉标注JavaScript返回值 67
3.1.3 使用〈mark〉标注突显文本 68
3.2 其他语义标准 70
3.2.1 ARIA 70
3.2.2 RDFa 71
3.2.3 微格式 71
3.2.4 微数据 72
3.3 实例:改进“About Me”页面 75
3.4 搜索引擎如何使用元数据 79
3.4.1 Google Rich Snippets 79
3.4.2 增强搜索结果 80
3.4.3 食谱搜索引擎 84
第4章 构建更好的Web表单 87
4.1 理解表单 87
4.2 传统表单翻新 89
4.2.1 通过占位符文本添加提示 92
4.2.2 焦点:挑选正确的起点 94
4.3 验证:阻止错误 94
4.3.1 HTML5验证的原理 95
4.3.2 关闭验证 96
4.3.3 验证样式挂钩 97
4.3.4 使用正则表达式 98
4.3.5 自定义验证 99
4.4 浏览器对Web表单和验证的支持 101
4.4.1 用Modernizr检测支持情况 101
4.4.2 用HTML5Forms兼容 102
4.5 新的输入控件 104
4.5.1 电子邮件地址 106
4.5.2 网址 106
4.5.3 搜索框 107
4.5.4 电话号码 107
4.5.5 数值 107
4.5.6 滑动条 108
4.5.7 日期和时间 108
4.5.8 颜色 110
4.6 新元素 110
4.6.1 使用〈datalist〉显示输入建议 110
4.6.2 进度条和计量条 113
4.6.3 使用〈command〉和〈menu〉创建工具条和菜单 115
4.7 网页中的HTML编辑器 115
4.7.1 使用contenteditable编辑元素 115
4.7.2 使用designMode编辑页面 117
第二部分 视频、图形和特效 122
第5章 音频与视频 122
5.1 网络视频的演变 122
5.2 HTML5音频与视频 123
5.2.1 使用〈audio〉播放点噪音 124
5.2.2 预加载媒体文件 125
5.2.3 自动播放 125
5.2.4 循环播放 126
5.2.5 了解〈video〉 126
5.3 HTML5媒体格式 128
5.3.1 谈谈格式 128
5.3.2 浏览器对媒体格式的支持情况 130
5.4 后备措施:如何讨好每一款浏览器 131
5.4.1 支持多种格式 132
5.4.2 添加Flash后备措施 134
5.5 使用JavaScript控制播放器 137
5.5.1 添加音效 137
5.5.2 创建自定义视频播放器 140
5.5.3 JavaScript媒体播放器 142
5.6 视频字幕 144
5.6.1 标记时间的文本轨道和WebVTT 145
5.6.2 使用〈track〉添加字幕 146
5.6.3 浏览器对视频字幕的支持情况 148
第6章 美妙的CSS3字体和特效 149
6.1 使用CSS3 149
6.1.1 选择一:用能用的 150
6.1.2 选择二:将CSS功能作为增强 150
6.1.3 选择三:Modernizr 151
6.1.4 有开发商前缀的特定于浏览器的样式 154
6.2 多变的盒子 156
6.2.1 透明 157
6.2.2 圆角 158
6.2.3 背景 159
6.2.4 阴影 160
6.2.5 渐变 162
6.3 创建过渡效果 165
6.3.1 基本的颜色过渡 166
6.3.2 更多的过渡思路 168
6.3.3 用JavaScript触发过渡 168
6.3.4 变换 170
6.3.5 使用变换的过渡 173
6.4 Web字体 174
6.4.1 Web字体格式 176
6.4.2 给网站找个字体 177
6.4.3 从Font Squirrel获取免费字体 177
6.4.4 准备一个网络字体 179
6.4.5 用谷歌更简单地使用Web字体 181
6.4.6 多栏文本 184
第7章 CSS3与响应式Web设计 187
7.1 响应式设计基础 187
7.1.1 流式布局 187
7.1.2 流式图片 191
7.1.3 流式排版 192
7.1.4 理解视口 195
7.2 使用媒体查询适配布局 196
7.2.1 媒体查询 197
7.2.2 创建简单的媒体查询 198
7.2.3 构建移动设备友好的布局 199
7.2.4 媒体查询的高级条件 202
7.2.5 替换整个样式表 204
7.2.6 识别特定的移动设备 205
第8章 基本Canvas绘图 207
8.1 Canvas起步 207
8.1.1 画直线 210
8.1.2 路径与形状 212
8.1.3 绘制曲线 214
8.1.4 变换 217
8.1.5 透明度 220
8.1.6 合成操作 221
8.2 构建基本的画图程序 223
8.2.1 准备工作 224
8.2.2 在画布上绘图 225
8.2.3 将画布保存为图像 226
8.3 浏览器对Canvas的支持情况 229
8.3.1 用ExplorerCanvas兼容Canvas 230
8.3.2 用FlashCanvas兼容Canvas 230
8.3.3 Canvas后备及功能检测 231
第9章 高级Canvas技术:交互性和动画 233
9.1 高级Canvas绘图 233
9.1.1 绘制图像 233
9.1.2 裁剪、切割和伸缩图片 235
9.1.3 绘制文本 237
9.2 阴影与填充 238
9.2.1 添加阴影 238
9.2.2 填充图案 240
9.2.3 填充渐变 241
9.2.4 综合示例:绘制图解 245
9.3 赋予图形交互能力 249
9.3.1 记录绘制的内容 249
9.3.2 基于坐标的碰撞检测 252
9.4 给Canvas添加动画 254
9.4.1 基本的动画 255
9.4.2 多物体动画 256
9.5 实例:迷宫游戏 260
9.5.1 布置迷宫 261
9.5.2 让笑脸动起来 263
9.5.3 基于像素颜色的碰撞检测 265
第三部分 构建Web应用 270
第10章 数据存储 270
10.1 Web存储简介 270
10.1.1 存储数据 272
10.1.2 实战:保存游戏中的最后位置 274
10.1.3 浏览器对Web存储的支持情况 275
10.2 深入Web存储 276
10.2.1 删除数据项 276
10.2.2 查找所有数据项 276
10.2.3 保存数值和日期 277
10.2.4 保存对象 278
10.2.5 响应存储变化 279
10.3 读取文件 281
10.3.1 取得文件 282
10.3.2 用〈input〉读取文本文件 282
10.3.3 替换标准的上传控件 284
10.3.4 一次读取多个文件 285
10.3.5 通过拖曳读取图片文件 285
10.3.6 浏览器对FileAPI的支持情况 288
10.4 IndexDB:浏览器的数据库引擎 288
10.4.1 数据对象 290
10.4.2 创建并连接数据库 291
10.4.3 在数据库中保存数据 293
10.4.4 在数据表中查询所有数据 295
10.4.5 查询单条数据 297
10.4.6 删除一条数据 298
10.4.7 浏览器对IndexedDB的支持情况 299
第11章 离线应用 300
11.1 通过描述文件缓存资源 301
11.1.1 创建描述文件 302
11.1.2 使用描述文件 303
11.1.3 把描述文件放到Web服务器 304
11.1.4 更新描述文件 306
11.1.5 浏览器对离线应用的支持情况 308
11.2 实用缓存技术 309
11.2.1 访问未缓存的文件 309
11.2.2 添加后备内容 310
11.2.3 检测连接 312
11.2.4 用JavaScript监听更新 313
第12章 与Web服务器通信 317
12.1 向Web服务器发送消息 317
12.1.1 XMLHttpRequest对象 318
12.1.2 向Web服务器提问 319
12.1.3 取得新内容 323
12.2 服务器发送事件 326
12.2.1 消息格式 327
12.2.2 通过服务器脚本发送消息 328
12.2.3 在网页中处理消息 330
12.2.4 轮询服务器端事件 331
12.3 Web Socket 333
12.3.1 Web Socket服务器 333
12.3.2 简单的Web Socket客户端 334
12.3.3 使用现成的Web Socket服务器 335
第13章 地理定位、Web Worker和历史管理 339
13.1 地理定位 339
13.1.1 地理定位的基本原理 340
13.1.2 查找访客的坐标 342
13.1.3 处理错误 344
13.1.4 设置地理定位选项 345
13.1.5 显示地图 346
13.1.6 跟踪访客移动 349
13.1.7 浏览器对地理定位的兼容情况 349
13.2 Web Worker 350
13.2.1 费时的任务 351
13.2.2 把任务放在后台 353
13.2.3 处理Worker错误 356
13.2.4 取消后台任务 356
13.2.5 传递复杂消息 357
13.2.6 浏览器对Web Worker的兼容情况 359
13.3 历史管理 360
13.3.1 URL问题 361
13.3.2 以往的解决方案:hashbangURL 362
13.3.3 HTML5的方案:会话历史 363
13.3.4 浏览器对会话历史的支持情况 366
第四部分 附录 368
附录A CSS基础 368
附录B JavaScript:页面的大脑 381