矢量图形标记语言
本章介绍用于描述图像和绘制图形的标记语言 SVG,SVG 使用 XML 的语法标准,用于绘制和定义矢量图形,它符合 w3c 的标准。SVG 全称 scalable vector graphics ,使用它可以绘制三种类型的图形:矢量图形、图像、文本。SVG 是一整套矢量图形绘制协议,放在 HTML 中也可以是一个标准的 HTML 元素
1. 为什么使用 SVG
SVG 在既能满足现有图片的功能的前提下,又是矢量图,在可访问性上面也非常不错,并且有利于 SEO 和无障碍,在性能和维护性方面也比 icon,font 要出色许多,简单的理解,它是图形的另一种格式例如它和常见的图片格式 png、jpg、gif 等是一类。
2. 发展历史
- 2001年9月4日,发布 SVG 1.0;
- 2003年1月4日,发布 SVG 1.1;
- 2003年1月14日,推出 SVG 移动子版本:SVG Tiny 和 SVG Basic;
- 2008年12月22日,发布 SVG Tiny 1.2;
- 2011年8月16日,发布 SVG 1.1 第二版,成为 W3C 目前推荐的标准;
- W3C 目前仍正在研究制定 SVG 。
3. 语法标签简介
3.1 矩形
使用 points 属性表示折线的一系列的中间点:
3.6 路径
4. 适用场景和优缺点
- SVG 使用 xml 标记语言实现,具有可移植性;
- SVG 语法区分大小写,出现兼容性问题概率较小;
- SVG 和传统的 JPEG png 相比,尺寸更小;
- SVG 是矢量图,放大或缩小不影响其图像质量;
- 可以通过 img 的 src 属性引用。
总的来说 SVG 拥有很多优点,但是其复杂的语法决定了它的入门门槛较高。
5. 和 Canvas 比较
Canvas 是通过 JavaScript 调用的方式绘制图像,而 SVG 是使用标签的方式绘制图像,所以两种的渲染方式有很大差别。
6. 使用类库
直接使用 SVG 来绘制一个较复杂的图形的话可能入门门槛较高,使用第三方类库可以节省不少代码量,在这里推荐一个比较常用的 SVG 的类库 snap.svg,它的 GitHub 地址是 snap.svg。
上述代码使用 snap.svg 实现了一个图形旋转。
7. 小结
回顾本章介绍了 HTML 中的矢量图形绘制语言 SVG,已经 SVG 的适用场景以及和 Canvas 的对比。