编辑推荐
《SVG精髓(第2版)》详尽介绍了可缩放矢量图形(SVG)技术。SVG是一种标记语言,为大多数矢量绘图程序和交互式Web图形工具所使用。本书将带你详细了解SVG的功能,首先学习简单的SVG应用,如绘制线条,然后逐步探索复杂的特性,比如滤镜、变换、渐变和图案等。
本书第2版扩展了动画、交互式图形以及SVG编程等内容。交互式的在线示例让你很容易在Web浏览器中实验SVG的特性。本书还为经验丰富的设计师准备了6个附录,解释了XML标记和CSS样式等基本概念,因此即使你没有网页设计的经验,也可以开始学习SVG。
通过阅读本书,你将能够:
为网页创建高质量、高分辨率的图形;
创建通过搜索引擎或辅助技术易于访问的图表和装饰性标题;
用SVG蒙版、滤镜以及变换给图形、文本和照片添加艺术效果;
用SVG标记动画绘制图形,使用CSS和JavaScript添加交互;
根据现有的矢量数据或XML数据使用编程语言或XSLT创建SVG。
内容简介
《SVG精髓(第2版)》通过实例透彻讲解了SVG(可缩放矢量图形)这种标记语言的规范及应用。作者从简单的SVG应用开始,带领读者逐步探索了SVG的复杂功能,包括滤镜、变换、渐变和模式。从应用层面看,本书涵盖了动画、交互图形和动态SVG编程等技术,不仅能为有经验的开发人员提供重要参考,同时通过讲解基本的XML和CSS技术,为没有Web开发经验的读者提供了入门捷径。
作者简介
J. David Eisenberg,是一名程序员和教师。他开发了CSS、JavaScript、CGI、XML和Perl等多门编程课程,并在加州圣何塞常青谷学院教授计算机信息技术课程。他还著有études for Erlang、Let's Read Hiragana以及本书第1版。
Amelia Bellamy-Royds,是一位专门从事科学和技术交流的自由撰稿人。她通过参与Web Platform Docs、Stack Exchange和Codepen等在线社区,帮助推动Web标准和设计。
内页插图
精彩书评
“早在2002年,我就通过本书的第1版初次了解了SVG,它对我帮助很大。真的很高兴,如今本书针对现代浏览器以及新时代的开发者和设计者进行了更新升级。”
——Doug Schepers,万维网联盟SVG工作组成员
目录
第1 章 入门指南 1
1.1 图形系统 1
1.1.1 栅格图形 1
1.1.2 矢量图形 2
1.1.3 栅格图形的用途 2
1.1.4 矢量图形的用途 2
1.2 可缩放 3
1.3 SVG 的作用 5
1.4 创建一个SVG 图像 5
1.4.1 文档结构 5
1.4.2 基本形状 6
1.4.3 指定样式属性 6
1.4.4 图形对象分组 7
1.4.5 变换坐标系统 8
1.4.6 其他基本图形 8
1.4.7 路径 9
1.4.8 文本 10
第2 章 在网页中使用SVG 12
2.1 将SVG 作为图像 12
2.1.1 在 元素内包含SVG 13
2.1.2 在CSS 中包含SVG 14
2.2 将SVG 作为应用程序 15
2.3 混合文档中的SVG 标记 16
2.3.1 SVG 中的foreign object 16
2.3.2 在XHTML 或者HTML5 中内联SVG 18
2.3.3 其他XML 应用程序中的SVG 20
第3 章 坐标系统 21
3.1 视口 21
3.2 使用默认用户坐标 22
3.3 为视口指定用户坐标 24
3.4 保留宽高比 25
3.4.1 为preserveAspectRatio 指定对齐方式 26
3.4.2 使用meet 说明符 27
3.4.3 使用slice 说明符 28
3.4.4 使用none 说明符 29
3.5 嵌套坐标系统 29
第4 章 基本形状 32
4.1 线段 32
4.2 笔画特性 33
4.2.1 stroke-width 33
4.2.2 笔画颜色 34
4.2.3 stroke-opacity 35
4.2.4 stroke-dasharray 属性 36
4.3 矩形 37
4.4 圆和椭圆 39
4.5 多边形 40
4.6 折线 42
4.7 线帽和线连接 43
4.8 基本形状总结 44
4.8.1 形状元素 45
4.8.2 指定颜色 45
4.8.3 笔画和填充特性 46
第5 章 文档结构 47
5.1 结构和表现 47
5.2 在SVG 中使用样式 48
5.2.1 内联样式 48
5.2.2 内部样式表 48
5.2.3 外部样式表 49
5.2.4 表现属性 50
5.3 分组和引用对象 51
5.3.1
元素 51
5.3.2 元素 52
5.3.3 元素 53
5.3.4 元素 55
5.3.5 元素 56
第6 章 坐标系统变换 58
6.1 translate 变换 58
6.2 scale 变换 60
6.3 变换序列 63
6.4 技巧:笛卡儿坐标系统转换 65
6.5 rotate 变换 67
6.6 技巧:围绕中心点缩放 69
6.7 skewX 和skewY 变换 69
6.8 变换总结 70
6.9 CSS 变换和SVG 71
第7 章 路径 72
7.1 moveto、lineto 和closepath 72
7.2 相对moveto 和lineto 75
7.3 路径的快捷方式 75
7.3.1 水平和垂直lineto 命令 75
7.3.2 路径快捷方式表示法 76
7.4 椭圆弧 76
7.5 从其他弧线格式转换 79
7.6 贝塞尔曲线 79
7.6.1 二次贝塞尔曲线 80
7.6.2 三次贝塞尔曲线 82
7.7 路径总结 84
7.8 路径和填充 84
7.9 元素 85
7.10 标记记录 88
第8 章 图案和渐变 90
8.1 图案 90
8.1.1 patternUnits 91
8.1.2 patternContentUnits 92
8.1.3 图案嵌套 94
8.2 渐变 95
8.2.1 linearGradient 元素 95
8.2.2 radialGradient 元素 99
8.2.3 渐变总结 102
8.3 变换图案和渐变 103
第9 章 文本 105
9.1 文本的相关术语 105
9.2 元素的基本属性 106
9.3 文本对齐 108
9.4 元素 109
9.5 设置文本长度 111
9.6 纵向文本 112
9.7 国际化和文本 113
9.7.1 Unicode 和双向语言 113
9.7.2 元素 114
9.7.3 使用自定义字体 115
9.8 文本路径 117
9.9 空白和文本 119
9.10 案例学习:为图形添加文本 120
第10 章 裁剪和蒙版 122
10.1 裁剪路径 122
10.2 蒙版 125
10.3 案例学习:为图形应用蒙版 129
第11 章 滤镜 131
11.1 滤镜的工作原理 131
11.2 创建投影效果 132
11.2.1 建立滤镜的边界 132
11.2.2 投影133
11.2.3 存储、链接以及合并滤镜结果 134
11.3 创建发光式投影 135
11.3.1 元素 135
11.3.2 详解 136
11.4 滤镜 138
11.5 滤镜 139
11.6 滤镜 143
11.7 滤镜 146
11.8 和滤镜 147
11.9 光照效果 148
11.9.1 漫反射照明 149
11.9.2 镜面反射照明 150
11.10 访问背景 152
11.11 元素 153
11.12 元素 154
11.13 元素 156
11.14 元素 158
11.15 滤镜总结 159
第12 章 SVG 动画 161
12.1 动画基础 162
12.2 动画时间详解164
12.3 同步动画 164
12.4 重复动作 165
12.5 对复杂的属性应用动画 166
12.6 指定多个值 167
12.7 多级动画时间 168
12.8 元素 169
12.9 元素 169
12.10 元素 171
12.11 为运动指定关键点和时间 173
12.12 使用CSS 处理SVG 动画 174
12.12.1 动画属性 174
12.12.2 设置动画关键帧 175
12.12.3 CSS 中的动画运动 176
第13 章 添加交互 177
13.1 在SVG 中使用链接 177
13.2 控制CSS 动画 179
13.3 用户触发的SMIL 动画 180
13.4 使用脚本控制SVG 181
13.4.1 事件概览 183
13.4.2 监听和响应事件 184
13.4.3 修改多个对象的属性 185
13.4.4 拖拽对象 188
13.4.5 与HTML 页面交互 191
13.4.6 创建新元素 195
第14 章 使用SVG DOM 198
14.1 确定元素的属性值 198
14.2 SVG 接口方法 203
14.3 使用ECMAScript/JavaScript 创建SVG 207
14.4 使用脚本控制动画 210
14.5 使用JavaScript 库 214
14.6 Snap 中的事件处理 219
14.6.1 点击对象 220
14.6.2 拖拽对象 220
第15 章 生成SVG 222
15.1 将自定义数据转换为SVG 223
15.2 使用XSLT 将XML 数据转换为SVG 226
15.2.1 定义任务 226
15.2.2 XSLT 的工作方式 228
15.2.3 编写XSL 样式表 230
附录A SVG 中需要的XML 知识 238
附录B 样式表介绍 249
附录C 编程概念 255
附录D 矩阵代数 263
附录E 创建字体 270
附录
精彩书摘
首先需要注意的是 rect 元素不再是一个空元素,它里面包含了动画元素。
animate 元素指定了下列信息。
attributeNane,动画中应该持续改变的值;在这里就是width。
attribukType。width属性是一个XML属性。另一个常用的attributeType值是CSS,表示我们想要改变的属性是一个CSS属性。如果忽略这一属性,它的默认值是auto,它首先会搜索CSS属性,然后才是XML属性。
属性的起始(from)和结束(to)值。在这个例子中,起始值是200,结束值是20。from值是可选的;如果不指定,则会使用父元素的值。此外,还有一个by属性,可以代替to,它是一个从from值开始的偏移量;动画结束时属性的值为结束值。
动画的开始时间和持续时间。在这个例子中,时间以秒为单位,通过在数字后面使用s指定。定义时间的其他方式会在12.2节中描述。
动画结束时做什么。在这个例子中,持续5秒之后,属性会“冻结”(freeze)为to值。也就是SMIL fill属性,它会告诉动画引擎如何填补剩下的时间。不要把它跟SVG的fill属性混淆了,该属性用于告诉SVG如何描绘对象。如果我们移除这一行,会使用默认值(remove),5秒的动画完成之后width属性会返回它的原始值200。
图12—1和图12—2展示了动画的开始和结束阶段。它们并不能很好地展示实际效果,因此我们强烈建议你在浏览器中试试。
……
前言/序言
本书将向你介绍“可缩放矢量图形”(Scalable Vector Graphics)技术,即 SVG。SVG 是万维网联盟(W3C)的一项推荐标准,它使用 XML 来描述由直线、曲线、文本等组成的图形。这段干巴巴的定义并不能体现出 SVG 的作用和它的强大之处。
你可以将 SVG 图形加到 XSL-FO(Extensible Stylesheet Language Formatting Objects)1 文档中,然后将文档转换为 Adobe PDF 格式来获得更高的印刷质量。地图和气象领域的工作者可以使用 SVG 来创建高精度、高质量、可移植的图形。Web 开发者将 SVG 嵌入网页来创建高分辨率的响应式图形,且可以使文件尺寸很小。本书中的所有图表最初都是由 SVG 创建的。在学习和使用 SVG 时,你一定能想到这项新技术的一些新的、有趣的使用场景。
1一种用于文档格式的 XML 标记语言,可参见 http://zh.wikipedia.org/wiki/XSL-FO。——译者
本书读者
如果你想做以下事情,就应该读一读这本书:
在文本编辑器或者 XML 编辑器中创建 SVG 文件
从已有的矢量数据创建 SVG 文件
将其他 XML 数据转换为 SVG
使用 JavaScript 操作 SVG 文档对象树
选错书的读者
如果你只是想查看 SVG 文件,只需要安装一个阅读器或者 Web 插件,然后下载 SVG 文件查看就可以了。这种情况下你并不需要知道背后的原理,除非你想满足自己强烈的好奇心。
如果你想使用带有 SVG 导出功能的图像处理软件来创建 SVG 文件,那么只需要阅读相关软件的文档来学习如何使用软件的功能就可以了。
如果你打算继续阅读……
如果你确实适合阅读这本书,那么你应该了解,本书的大部分读者都是高级用户,他们很可能有技术背景,而不是图形设计背景。所以我们不打算在前面讲很多非常基础的东西,但我们希望没有 XML 或者程序设计背景的人也能阅读本书,因此也准备了一些介绍性的章节,并将它们放到本书最后的附录中。如果你没有使用过 XML 或者样式表(这可能包括一些技术人员),也没有编写过程序,可能需要先翻到附录部分。稍后,我们会概述各章和附录的主要内容。
如果你是技术工作者,也需要知道,本书并不能将你变成一位艺术家,就像一本讲字处理算法的书并不能让你把文章写得更好一样。本书将展示 SVG 的很多技术细节,而如果要成为艺术家,你还需要学习观察。除了本书之外,你还应该读读 Betty Edwards 博士的 The New Drawing on the Right Side of the Brain 2。
2该书中文版《五天学会绘画》已由北方文艺出版社出版。http://book.douban.com/subject/5263615/。——译者注
本书只会给出 SVG 的一些基本信息,如果你想了解所有信息,请参考万维网联盟的 SVG 规范(http://www.w3.org/Graphics/SVG/Overview.htm8)。
关于示例
本书中的所有示例,除了涉及 HTML 页面的之外,全部在运行在 GNU/Linux 系统上的 Batik SVG viewer 软件中测试通过。Batik SVG viewer 是由 Apache 软件基金会下的 Batik 项目开发的一款软件。这款软件使用 Java 开发,跨平台,并遵循 Apache 软件协议开源,可以从http://xmlgraphics.apache.org/batik 下载。
书中的所有例子(包括第 2、13 和 14 章中涉及 JavaScript 和 HTML 的例子)通过在 Firefox 和 Chrome 浏览器中加载的方式进行了测试。对 SVG 高级特性的支持程度取决于浏览器。
你在看本书中的示例的时候,会发现它们完全没有任何艺术价值。这是有原因的。首先,每个示例都是为了展示 SVG 的一个方面,那么它就应该只展示这一个方面,而不应该有其他的视觉干扰。其次,本书作者 David 在看其他书中那些漂亮得不可思议的图形时感到很沮丧,他心想:“我永远也画不出这么漂亮的图。”为了不让你产生同样的沮丧情绪,我们有意简化了这些示例。当你看到它们的时候,你的第一反应会是:“我可以用 SVG 画出比这漂亮得多的东西!”你当然可以,然后你就会动手去画。
《SVG精髓(第2版)》图书简介 在数字时代,网页的视觉表现力至关重要。从流畅的动画到精美的图标,再到响应式的图形,一切都离不开强大的图形技术。而在这众多技术中,可缩放矢量图形(SVG)以其独特的优势,成为了前端开发和图形设计领域不可或缺的利器。本书《SVG精髓(第2版)》并非一本简单的语法手册,它深入剖析了SVG的每一个层面,旨在帮助读者真正掌握这项技术,将创意转化为生动、高效的网页视觉元素。 为何选择SVG? 与传统的位图格式(如JPEG、PNG)不同,SVG是一种基于XML的矢量图形格式。这意味着SVG图形是由数学公式定义的路径、形状、颜色和文本组成的,而非像素点。这一核心特性带来了诸多显著优势: 无限缩放,高清呈现: SVG图形可以任意放大或缩小,而不会出现锯齿或模糊。无论是在Retina屏幕还是超大显示器上,都能保持锐利的边缘和清晰的细节,完美适应不同分辨率的设备需求。 文件体积小巧,加载快速: 由于是基于文本的描述,SVG文件通常比同等复杂度的位图文件要小得多。这显著加快了网页的加载速度,提升了用户体验,尤其是在网络条件不佳的情况下。 可控性强,交互性高: SVG图形可以被JavaScript轻松操作,实现丰富的动画效果、响应式交互和动态数据可视化。这使得网页的视觉表现力不再是静态的,而是可以与用户进行深度互动。 搜索引擎友好: SVG是基于文本的,搜索引擎可以读取其中的内容,从而有助于提高网页的可发现性。 易于维护和修改: SVG代码直观易懂,设计师和开发者可以轻松地对图形进行修改和调整,无需依赖专业的图形编辑软件。 《SVG精髓(第2版)》—— 您的SVG学习终极指南 本书在前版的基础上,进行了全面的更新和深化,涵盖了SVG的最新发展和最佳实践。它不仅仅罗列SVG的各种标签和属性,而是从根源上讲解SVG的工作原理,帮助读者建立起扎实的理论基础,并能灵活运用到实际开发中。 第一部分:SVG的基石——理解核心概念 在正式进入SVG的世界之前,本书将带领读者回顾并深入理解几个关键概念: 矢量图形与位图图形的区别: 详细阐述两种图形格式的工作原理、优缺点,以及各自适用的场景。 坐标系与视图(ViewBox): 深入解析SVG的坐标系统,理解`x`、`y`坐标,以及`width`、`height`属性的作用。重点讲解`viewBox`属性,它是实现SVG缩放和响应式布局的关键,理解其内部坐标系与外部绘制区域的关系,将为后续的学习打下坚实基础。 单位与度量: 讲解SVG中常用的单位,如像素(px)、百分比(%)、em、ex等,以及它们在不同场景下的应用。 第二部分:构建SVG的基础——形状与路径 掌握了基本概念后,本书将带领读者走进SVG图形的构建世界: 基本形状: 详细介绍`rect`(矩形)、`circle`(圆形)、`ellipse`(椭圆)、`line`(直线)、`polyline`(折线)和`polygon`(多边形)等基本形状元素的用法、属性和常见应用场景。 路径(path)元素: 这是SVG中最强大、最灵活的元素。本书将花费大量篇幅讲解`path`元素的`d`属性,这是定义复杂图形的灵魂。我们将深入剖析`M`(移动到)、`L`(画直线到)、`H`(水平线到)、`V`(垂直线到)、`C`(三次贝塞尔曲线)、`S`(平滑三次贝塞尔曲线)、`Q`(二次贝塞尔曲线)、`T`(平滑二次贝塞尔曲线)、`A`(椭圆弧)和`Z`(闭合路径)等命令,并提供大量实例,帮助读者理解如何组合这些命令绘制出各种复杂的曲线和形状。 分组(group)元素 ``: 学习如何使用``元素对图形进行分组,并对组应用统一的变换(如移动、旋转、缩放)和样式,提高代码的复用性和可维护性。 剪切路径(Clipping Paths)与蒙版(Masks): 探索如何利用`clipPath`和`mask`元素实现高级的图形裁剪和遮罩效果,为创建独特视觉效果提供可能。 第三部分:SVG的色彩与样式——美化你的图形 图形有了形状,就需要色彩来赋予生命。本书将深入讲解SVG的样式控制: 填充(fill)与描边(stroke): 详细讲解`fill`属性(填充颜色、渐变、图案)和`stroke`属性(描边颜色、宽度、线帽、连接样式、虚线等),以及它们如何共同作用创建丰富的视觉效果。 渐变(Gradients): 学习如何创建线性渐变(`linearGradient`)和径向渐变(`radialGradient`),以及如何使用`stop`元素精确控制渐变色。 图案(Patterns): 探索如何使用`pattern`元素创建重复的纹理和图案,为图形增添更多细节。 滤镜(Filters): 深入讲解SVG滤镜的强大之处,包括模糊(`feGaussianBlur`)、阴影(`feDropShadow`)、高斯模糊(`feGaussianBlur`)、颜色矩阵(`feColorMatrix`)等,以及如何组合使用它们来创造令人惊叹的视觉特效。 CSS样式: 讲解如何使用CSS来控制SVG元素的样式,包括内联样式、内部样式表和外部样式表,以及CSS选择器在SVG中的应用。 第四部分:SVG的交互与动画——让你的图形动起来 静态的图形终究无法满足现代网页的需求。本书将带领读者走进SVG的交互和动画世界: 事件处理: 学习如何使用JavaScript为SVG元素添加事件监听器,实现用户交互,如点击、悬停、拖拽等。 SMIL动画: 讲解SVG内置的同步多媒体集成语言(SMIL)动画,包括`animate`、`animateTransform`、`animateMotion`等元素,以及如何使用它们创建简单的动画效果。 JavaScript驱动的动画: 重点讲解如何利用JavaScript(包括GSAP等库)来驱动SVG动画,实现更复杂、更精细的动画控制,以及如何与CSS Transitions和Animations结合使用。 数据可视化: 介绍如何利用SVG创建各种数据可视化图表,如柱状图、折线图、饼图等,以及如何结合JavaScript实现动态数据更新和交互。 第五部分:SVG的高级应用与实践——进阶之路 在掌握了SVG的基础和核心技术后,本书将进一步探讨更高级的主题和实际应用: SVG的内嵌与导出: 讲解如何在HTML中内嵌SVG,以及如何将SVG导出为各种格式,为不同平台和应用场景做准备。 性能优化: 提供实用的SVG性能优化技巧,包括精简代码、优化路径、减少滤镜使用、合理使用CSS等,确保SVG图形在实际应用中的高效表现。 响应式SVG: 深入探讨如何创建响应式的SVG图形,使其能够自适应不同屏幕尺寸和设备,以及如何利用CSS和JavaScript实现响应式布局。 SVG与其他技术的结合: 探讨SVG与HTML、CSS、JavaScript的无缝集成,以及在现代前端框架(如React, Vue, Angular)中的应用。 实际项目案例分析: 通过具体的项目案例,展示SVG在图标设计、地图绘制、游戏开发、用户界面设计等领域的实际应用,让读者学以致用。 本书特色: 内容全面深入: 涵盖SVG从入门到精通的每一个环节,理论与实践并重。 结构清晰,循序渐进: 从基础概念到高级技巧,层层递进,易于理解。 代码示例丰富: 提供大量可运行的、经过验证的代码示例,帮助读者快速掌握技术要点。 强调理解与应用: 不仅教你“如何做”,更教你“为什么这样做”,培养读者的独立思考和解决问题的能力。 注重最新技术: 涵盖SVG的最新发展和最佳实践,确保内容的时效性。 面向广大读者: 无论是初学者还是有一定经验的开发者,都能从本书中受益。 谁适合阅读本书? 前端开发者: 想要提升网页视觉表现力,创建更具交互性和吸引力的用户界面的开发者。 UI/UX设计师: 希望掌握一种灵活、高效的图形设计工具,将创意转化为可交互的数字媒体的设计师。 图形开发者: 对矢量图形技术感兴趣,希望深入了解SVG工作原理的开发者。 任何对网页图形和动画感兴趣的学习者: 无论是出于职业发展还是个人兴趣,本书都将为你打开一扇新的大门。 《SVG精髓(第2版)》不仅仅是一本书,它是你通往SVG精通之路的可靠伙伴。无论你是初次接触SVG,还是希望深化对它的理解,本书都将为你提供所需的知识、技能和灵感,让你能够自信地驾驭这项强大的图形技术,创造出令人惊叹的网页视觉体验。