本书不仅是HTML 5与CSS 3图书领域当之无愧的领头羊,而且在整个原创计算机图书领域也是佼佼者。本书已经成为HTML 5与CSS 3图书领域的一个标杆,被读者誉为“系统学习HTML 5与CSS 3技术的最佳指导参考书之一”和“Web前端工程师案头必备图书之一”。第2版首先从技术的角度结合最新的HTML 5和CSS 3标准对内容进行了更新和补充,其次从结构组织和写作方式的角度对原有的内容进行了进一步优化,使之更具价值和更便于读者阅读。
全书共29章,本书分为上下两册:上册(1~17章)全面系统地讲解了HTML 5相关的技术,以HTML 5对现有Web应用产生的变革开篇,顺序讲解了HTML 5与HTML 4的区别、HTML 5的结构、表单元素、HTML编辑API、图形绘制、History API、本地存储、离线应用、文件API、通信API、扩展的XML HttpRequest API、Web Workers、地理位置信息、多媒体相关的API、页面显示相关的API、拖放API与通知API等内容;下册(19~29章)全面系统地讲解了CSS 3相关的技术,以CSS 3的功能和模块结构开篇,顺序讲解了各种选择器及其使用、文字与字体的相关样式、盒相关样式、背景与边框相关样式、布局相关样式、变形处理、动画、颜色相关样式等内容。
封面图
目录
- 前言
- 上 册
- 第1章 Web时代的变迁1
- 1.1 迎接新的Web时代1
- 1.1.1 HTML 5时代即将来临1
- 1.1.2 HTML 5的目标3
- 1.2 HTML 5深受欢迎的理由4
- 1.2.1 世界知名浏览器厂商对HTML 5的支持4
- 1.2.2 第一个理由:时代的要求5
- 1.2.3 第二个理由:Internet Explorer 85
- 1.3 可以放心使用HTML 5的三个理由6
- 1.4 HTML 5要解决的三个问题6
- 第2章 HTML 5与HTML 4的区别8
- 2.1 语法的改变8
- 2.1.1 HTML 5的语法变化8
- 2.1.2 HTML 5中的标记方法9
- 2.1.3 HTML 5确保的兼容性10
- 2.1.4 标记示例11
- 2.2 新增的元素和废除的元素12
- 2.2.1 新增的结构元素12
- 2.2.2 新增的其他元素14
- 2.2.3 新增的input元素的类型18
- 2.2.4 废除的元素19
- 2.3 新增的属性和废除的属性20
- 2.3.1 新增的属性20
- 2.3.2 废除的属性22
- 2.4 全局属性23
- 2.4.1 contentEditable属性23
- 2.4.2 designMode属性24
- 2.4.3 hidden属性25
- 2.4.4 spellcheck属性25
- 2.4.5 tabindex属性25
- 2.5 新增的事件26
- 第3章 HTML 5的结构28
- 3.1 新增的主体结构元素28
- 3.1.1 article元素29
- 3.1.2 section元素31
- 3.1.3 nav元素33
- 3.1.4 aside元素34
- 3.1.5 time元素与微格式36
- 3.1.6 pubdate属性37
- 3.2 新增的非主体结构元素38
- 3.2.1 header元素38
- 3.2.2 footer元素39
- 3.2.3 address元素40
- 3.2.4 main元素41
- 3.3 HTML 5中网页结构42
- 3.3.1 HTML 5中的大纲42
- 3.3.2 大纲的编排规则48
- 3.3.3 对新的结构元素使用样式51
- 第4章 表单及其他新增和改良元素53
- 4.1 新增元素与属性53
- 4.1.1 新增属性53
- 4.1.2 大幅度地增加与改良input元素的种类65
- 4.1.3 对新的表单元素使用样式77
- 4.1.4 output元素的追加77
- 4.2 表单验证78
- 4.2.1 自动验证78
- 4.2.2 取消验证79
- 4.2.3 显式验证79
- 4.3 增强的页面元素80
- 4.3.1 新增的f igure元素与f igcaption元素80
- 4.3.2 新增的details元素与summary元素82
- 4.3.3 新增的mark元素83
- 4.3.4 新增的progress元素86
- 4.3.5 新增的meter元素87
- 4.3.6 新增的dialog元素88
- 4.3.7 改良的a元素90
- 4.3.8 改良的ol列表91
- 4.3.9 改良的dl列表92
- 4.3.10 加以严格限制的cite元素93
- 4.3.11 重新定义的small元素94
- 4.3.12 安全性增强的iframe元素94
- 4.3.13 增强的script元素97
- 第5章 绘制图形102
- 5.1canvas元素的基础知识102
- 5.1.1在页面中放置canvas元素103
- 5.1.2绘制矩形103
- 5.2使用路径105
- 5.2.1绘制圆形105
- 5.2.2不关闭路径会怎么样108
- 5.2.3绘制直线109
- 5.2.4绘制曲线114
- 5.2.5使用Path2D对象绘制路径116
- 5.3绘制渐变图形119
- 5.3.1绘制线性渐变119
- 5.3.2绘制径向渐变121
- 5.4绘制变形图形122
- 5.4.1坐标变换122
- 5.4.2坐标变换与路径的结合使用124
- 5.4.3矩阵变换125
- 5.5给图形绘制阴影129
- 5.6使用图像130
- 5.6.1绘制图像130
- 5.6.2图像平铺133
- 5.6.3图像裁剪135
- 5.6.4像素处理137
- 5.7图形、图像的组合与混合138
- 5.7.1组合图形138
- 5.7.2混合图像140
- 5.8绘制文字143
- 5.9补充知识145
- 5.9.1保存与恢复状态145
- 5.9.2保存文件146
- 5.9.3简单动画的制作147
- 第6章 多媒体相关API150
- 6.1多媒体播放151
- 6.1.1video元素与audio元素的基础知识151
- 6.1.2属性153
- 6.1.3方法157
- 6.1.4事件160
- 6.2对音频或视频添加字幕163
- 6.2.1track元素的基础知识163
- 6.2.2track元素的各种属性164
- 6.2.3WebVTT文件166
- 第7章 History API171
- 7.1History API的基本概念171
- 7.2History API使用示例172
- 7.2.1使用History API172
- 7.2.2结合使用Canvas API与History API182
- 第8章 本地存储187
- 8.1Web Storage188
- 8.1.1Web Storage是什么188
- 8.1.2简单Web留言本191
- 8.1.3作为简易数据库来利用194
- 8.1.4利用storage事件实时监视Web Storage中的数据196
- 8.2本地数据库199
- 8.2.1本地数据库的基本概念199
- 8.2.2用executeSql来执行查询199
- 8.2.3使用数据库实现Web留言本200
- 8.2.4transaction方法中的处理204
- 8.3indexedDB数据库206
- 8.3.1indexedDB数据库的基本概念206
- 8.3.2连接数据库206
- 8.3.3数据库的版本更新208
- 8.3.4创建对象仓库210
- 8.3.5创建索引213
- 8.3.6索引的multiEntry属性值216
- 8.3.7使用事务216
- 8.3.8保存数据218
- 8.3.9获取数据221
- 8.3.10根据主键值检索数据225
- 8.3.11根据索引属性值检索数据232
- 8.3.12复合索引237
- 8.3.13统计对象仓库中的数据数量242
- 8.3.14使用indexedDB API制作Web留言本243
- 第9章 离线应用程序250
- 9.1离线Web应用程序详解250
- 9.1.1新增的本地缓存250
- 9.1.2本地缓存与浏览器网页缓存的区别251
- 9.2manifest文件251
- 9.3浏览器与服务器的交互过程254
- 9.4applicationCache对象255
- 9.4.1swapCache方法255
- 9.4.2applicationCache对象的事件258
- 第10章 文件API261
- 10.1FileList对象与f ile对象262
- 10.2ArrayBuffer对象与ArrayBufferView对象263
- 10.2.1基本概念263
- 10.2.2ArrayBuffer对象263
- 10.2.3ArrayBufferView对象263
- 10.2.4DataView对象265
- 10.3Blob对象269
- 10.3.1Blob对象概述269
- 10.3.2创建Blob对象271
- 10.3.3Blob对象的slice方法274
- 10.3.4在IndexedDB数据库中保存Blob对象275
- 10.4FileReader对象277
- 10.4.1FileReader对象的方法277
- 10.4.2FileReader对象的事件278
- 10.4.3FileReader对象的使用示例278
- 10.5FileSystem API285
- 10.5.1FileSystem API概述285
- 10.5.2FileSystem API的适用场合286
- 10.5.3请求访问文件系统287
- 10.5.4申请磁盘配额289
- 10.5.5创建文件294
- 10.5.6写入文件297
- 10.5.7在文件中追加数据300
- 10.5.8读取文件301
- 10.5.9复制磁盘中的文件304
- 10.5.10删除文件306
- 10.5.11创建目录307
- 10.5.12读取目录中的内容312
- 10.5.13删除目录314
- 10.5.14复制文件或目录316
- 10.5.15移动文件或目录与重命名文件或目录319
- 10.5.16f ilesystem:URL前缀321
- 10.5.17综合案例325
- 10.6Base64编码支持333
- 10.6.1Base64编码概述333
- 10.6.2在HTML 5中支持Base64编码335
- 第11章 通信API340
- 11.1跨文档消息传输341
- 11.1.1跨文档消息传输的基本知识341
- 11.1.2跨文档消息传输示例341
- 11.1.3通道通信343
- 11.2WebSockets通信348
- 11.2.1WebSockets通信的基本知识348
- 11.2.2使用WebSockets API348
- 11.2.3WebSockets API使用示例349
- 11.2.4发送对象351
- 11.2.5发送与接收原始二进制数据352
- 11.2.6实现WebSockets API的开发框架353
- 11.2.7WebSocket协议354
- 11.2.8WebSockets API的适用场景354
- 11.3Server-Sent Events API354
- 11.3.1Server-Sent Events API的基本概念354
- 11.3.2Server-Sent Events API的实现方法355
- 11.3.3事件ID的使用示例362
- 第12章 WebRTC通信366
- 12.1WebRTC的基本概念366
- 12.2使用getUserMedia方法访问本地设备367
- 12.2.1浏览器检测367
- 12.2.2获取对视频输入设备或音频输入设备的访问权限368
- 12.2.3实现拍照功能370
- 12.2.4与CSS 3结合使用372
- 12.3手工建立WebRTC通信372
- 12.3.1WebRTC通信的基本概念372
- 12.3.2建立P2P通信372
- 12.3.3手工实现信令373
- 12.3.4剖析SDP交换过程382
- 12.3.5剖析ICE交换过程388
- 12.4穿越NAT/防火墙进行通信390
- 12.4.1穿越NAT391
- 12.4.2穿越防火墙392
- 12.5使用Node.js进行信令395
- 12.5.1建立信令服务器395
- 12.5.2修改信令处理396
- 12.6使用WebRTC进行多人通信404
- 12.7使用RTCDataChannel进行通信425
- 12.7.1RTCDataChannel的基本概念425
- 12.7.2实现RTCDataChannel通信426
- 12.7.3实现浏览器与浏览器之间的文件发送功能438
- 第13章 扩展的XMLHttpRequest API449
- 13.1从服务器端获取二进制数据449
- 13.1.1ArrayBuffer响应450
- 13.1.2Blob响应455
- 13.2发送数据456
- 13.2.1发送字符串457
- 13.2.2发送表单数据458
- 13.2.3上传文件461
- 13.2.4发送Blob对象462
- 13.2.5发送ArrayBuffer对象465
- 13.3跨域数据请求469
- 第14章 使用Web Workers处理线程471
- 14.1基础知识472
- 14.2与线程进行数据的交互475
- 14.3线程嵌套477
- 14.3.1单层嵌套477
- 14.3.2在多个子线程中进行数据的交互480
- 14.4线程中可用的变量、函数与类481
- 14.5适用场合482
- 14.6SharedWorker482
- 14.6.1基础知识482
- 14.6.2实现前台页面与后台线程之间的通信483
- 14.6.3定义页面与共享的后台线程开始通信时的处理483
- 14.6.4SharedWorker的使用示例484
- 第15章 获取地理位置信息490
- 15.1Geolocation API的基本知识490
- 15.1.1取得当前地理位置490
- 15.1.2持续监视当前地理位置的信息493
- 15.1.3停止获取当前用户的地理位置信息493
- 15.2position对象493
- 15.3在页面上使用google地图495
- 第16章 拖放API与通知API498
- 16.1拖放API498
- 16.1.1实现拖放的步骤498
- 16.1.2DataTransfer对象的属性与方法501
- 16.1.3设定拖放时的视觉效果502
- 16.1.4自定义拖放图标503
- 16.2通知API503
- 16.2.1通知API的基础知识503
- 16.2.2通知API的代码使用示例506
- 第17章 其他API510
- 17.1Page Visibility API511
- 17.1.1Page Visibility API概述511
- 17.1.2Page Visibility API的使用场合511
- 17.1.3实现Page Visibility API511
- 17.2Fullscreen API514
- 17.2.1Fullscreen API概述514
- 17.2.2实现Fullscreen API514
- 17.2.3Fullscreen API代码使用示例517
- 17.3鼠标指针锁定API519
- 17.3.1鼠标指针锁定API概述519
- 17.3.2鼠标指针锁定API代码使用示例520
- 17.4requestAnimationFrame524
- 17.4.1requestAnimationFrame概述524
- 17.4.2requestAnimFrame代码使用示例524
- 17.5Mutation Observer526
- 17.6JavaScript Promise531
- 17.6.1Promise对象的基本概念531
- 17.6.2创建Promise对象537
- 17.6.3链式调用Promise对象的then方法540
- 17.6.4将异步操作队列化542
- 17.6.5异常处理543
- 17.6.6创建序列544
- 17.6.7执行并行处理549
- 17.7Beacon API550
- 17.7.1Beacon API概述550
- 17.7.2Beacon API的使用方法551
- 下 册
- 第18章CSS 3概述553
- 18.1概要介绍553
- 18.1.1CSS 3是什么553
- 18.1.2CSS 3的历史554
- 18.2使用CSS 3能做什么554
- 18.2.1模块与模块化结构554
- 18.2.2一个简单的CSS 3示例556
- 第19章选择器559
- 19.1选择器概述560
- 19.2属性选择器561
- 19.2.1属性选择器概述561
- 19.2.2CSS 3中的属性选择器563
- 19.2.3灵活运用属性选择器564
- 19.3结构性伪类选择器565
- 19.3.1CSS中的伪类选择器及伪元素565
- 19.3.2选择器root、not、empty和target570
- 19.3.3选择器f irst-child、last-child、nth-child和nth-last-child574
- 19.3.4选择器nth-of-type和nth-last-of-type579
- 19.3.5循环使用样式582
- 19.3.6only-child选择器584
- 19.4UI元素状态伪类选择器585
- 19.4.1伪类选择器E:hover、E:active和E:focus586
- 19.4.2伪类选择器E:enabled与E:disabled588
- 19.4.3伪类选择器E:read-only与E:read-write589
- 19.4.4伪类选择器E:checked、E:default和E:indeterminate590
- 19.4.5伪类选择器E::selection593
- 19.4.6伪类选择器E:invalid与E:valid595
- 19.4.7伪类选择器E:required与E:optional596
- 19.4.8伪类选择器E:in-range与E:out-of-range596
- 19.5通用兄弟元素选择器597
- 第20章使用选择器在页面中插入内容599
- 20.1使用选择器来插入文字599
- 20.1.1使用选择器来插入内容599
- 20.1.2指定个别元素不进行插入601
- 20.2插入图像文件602
- 20.2.1在标题前插入图像文件602
- 20.2.2插入图像文件的好处603
- 20.2.3将alt属性的值作为图像的标题来显示605
- 20.3使用content属性来插入项目编号605
- 20.3.1在多个标题前加上连续编号606
- 20.3.2在项目编号中追加文字607
- 20.3.3指定编号的样式607
- 20.3.4指定编号的种类608
- 20.3.5编号嵌套608
- 20.3.6中编号中嵌入大编号610
- 20.3.7在字符串两边添加嵌套文字符号611
- 第21章文字与字体相关样式614
- 21.1给文字添加阴影——text-shadow属性614
- 21.1.1text-shadow属性的使用方法614
- 21.1.2位移距离616
- 21.1.3阴影的模糊半径617
- 21.1.4阴影的颜色617
- 21.1.5指定多个阴影618
- 21.2让文本自动换行——word-break属性618
- 21.2.1依靠浏览器让文本自动换行619
- 21.2.2指定自动换行的处理方法619
- 21.3让长单词与URL地址自动换行——word-wrap属性621
- 21.4使用服务器端字体——Web Font与@font-face属性621
- 21.4.1在网页上显示服务器端字体621
- 21.4.2定义斜体或粗体字体623
- 21.4.3显示客户端本地的字体625
- 21.4.4属性值的指定627
- 21.5修改字体种类而保持字体尺寸不变——font-size-adjust属性628
- 21.5.1字体不同导致文字大小的不同628
- 21.5.2font-size-adjust属性的使用方法629
- 21.5.3浏览器对于aspect值的计算方法629
- 21.5.4font-size-adjust属性的使用示例630
- 21.6使用rem单位定义字体大小631
- 第22章盒相关样式633
- 22.1盒的类型633
- 22.1.1盒的基本类型633
- 22.1.2inline-block类型635
- 22.1.3inline-table类型642
- 22.1.4list-item类型644
- 22.1.5run-in类型与compact类型645
- 22.1.6表格相关类型646
- 22.1.7none类型648
- 22.1.8各种浏览器对于各种盒类型的支持情况649
- 22.2对于盒中容纳不下的内容的显示650
- 22.2.1overf low属性650
- 22.2.2overf low-x属性与overf low-y属性653
- 22.2.3text-overf low属性654
- 22.3对盒使用阴影656
- 22.3.1box-shadow属性的使用方法656
- 22.3.2将参数设定为0656
- 22.3.3创建盒内阴影658
- 22.3.4对盒内子元素使用阴影658
- 22.3.5对第一个文字或第一行使用阴影659
- 22.3.6对表格及单元格使用阴影660
- 22.4指定针对元素的宽度与高度的计算方法661
- 22.4.1box-sizing属性661
- 22.4.2为什么要使用box-sizing属性664
- 第23章背景与边框相关样式666
- 23.1与背景相关的新增属性666
- 23.1.1指定背景的显示范围——background-clip属性667
- 23.1.2指定背景图像的绘制起点——background-origin属性669
- 23.1.3指定背景图像的尺寸——background-size属性672
- 23.1.4新增的用于平铺背景图像的选项——space与round676
- 23.2在一个元素中显示多个背景图像678
- 23.3使用渐变色背景679
- 23.3.1绘制线性渐变679
- 23.3.2绘制放射性渐变682
- 23.4圆角边框的绘制685
- 23.4.1border-radius属性686
- 23.4.2在border-radius属性中指定两个半径686
- 23.4.3不显示边框的时候687
- 23.4.4修改边框种类的时候688
- 23.4.5绘制四个角不同半径的圆角边框688
- 23.5使用图像边框688
- 23.5.1border-image属性688
- 23.5.2border-image属性的最简单的使用方法690
- 23.5.3使用border-image属性来指定边框宽度692
- 23.5.4指定4条边中图像的显示方法693
- 23.5.5使用背景图像696
- 第24章CSS 3中的变形处理698
- 24.1transform功能的基础知识698
- 24.1.1如何使用transform功能698
- 24.1.2transform功能的分类699
- 24.2对一个元素使用多种变形704
- 24.2.1对一个元素使用多种变形的方法704
- 24.2.2指定变形的基准点707
- 24.3使用3D变形功能709
- 24.3.13D变形功能概述709
- 24.3.2实现3D变形功能710
- 24.4变形矩阵718
- 24.4.1矩阵概述718
- 24.4.2变形与坐标系统719
- 24.4.3计算2D变形719
- 24.4.4计算3D变形721
- 24.4.5通过矩阵执行多重变形处理722
- 第25章CSS 3中的动画功能725
- 25.1Transitions功能725
- 25.1.1Transitions功能的使用方法726
- 25.1.2使用Transitions功能同时平滑过渡多个属性值727
- 25.2Animations功能730
- 25.2.1Animations功能的使用方法730
- 25.2.2实现多个属性值同时改变的动画733
- 25.2.3实现动画的方法736
- 25.2.4实现网页的淡入效果737
- 第26章布局相关样式739
- 26.1多栏布局740
- 26.1.1使用f loat属性或position属性的缺点740
- 26.1.2使用多栏布局方式741
- 26.2盒布局747
- 26.2.1使用f loat属性或position属性时的缺点747
- 26.2.2使用盒布局749
- 26.2.3盒布局与多栏布局的区别750
- 26.3弹性盒布局751
- 26.3.1对多个元素使用f lex属性751
- 26.3.2改变元素的显示顺序753
- 26.3.3改变元素的排列方向754
- 26.3.4元素宽度与高度的自适应755
- 26.3.5使用弹性盒布局来消除空白758
- 26.3.6对多个元素使用f lex属性759
- 26.3.7控制换行方式766
- 26.3.8指定水平方向与垂直方向的对齐方式769
- 26.4calc方法781
- 26.4.1calc方法概述781
- 26.4.2calc方法使用示例781
- 第27章Media Queries相关样式783
- 27.1根据浏览器的窗口大小来选择使用不同的样式783
- 27.2在iPhone中的显示788
- 27.3Media Queries的使用方法789
- 第28章CSS 3的其他重要样式和属性792
- 28.1颜色相关样式792
- 28.1.1利用alpha通道来设定颜色793
- 28.1.2alpha通道与opacity属性的区别795
- 28.1.3指定颜色值为transparent797
- 28.2用户界面相关样式798
- 28.2.1轮廓相关样式799
- 28.2.2resize属性801
- 28.3使用initial属性值取消对元素的样式指定802
- 28.3.1取消对元素的样式指定802
- 28.3.2使用initial属性值并不等于取消样式设定的特例804
- 28.4实现CSS 3中的滤镜特效805
- 28.4.1滤镜特效概述805
- 28.4.2实现滤镜特效806
- 第29章综合实例815
- 29.1实例1:使用HTML 5中新增结构元素来构建网页815
- 29.1.1组织网页结构815
- 29.1.2构建网页标题818
- 29.1.3构建侧边栏820
- 29.1.4构建主体内容823
- 29.1.5构建版权信息829
- 29.2实例2:使用HTML 5+CSS 3来构建Web应用程序829
- 29.2.1HTML 5页面代码分析830
- 29.2.2CSS 3样式代码分析833
- 29.2.3JavaScript脚本代码分析836
- 附录A截至2015年5月五大浏览器最新版对HTML 5的支持情况844