1、SVG

最后更新于:2022-04-02 06:07:50

  \是矢量图的根元素,通过xmlns属性声明命名空间,从而告诉用户代理标记名称属于哪个XML方言。在下面的示例中,为\元素声明了宽度和高度(默认以像素为单位),其子元素\可作为提示,在\中可声明一段描述性纯文本,这两个元素都不会在页面中呈现。而\是一个矩形,将被绘制到页面中。 ~~~html SVG example SVG contains a rectangle ~~~   SVG作为一种图像格式,可以包含在\元素内(如下所示)或CSS样式中(例如background-image属性)。 ~~~html ~~~ ## 一、坐标系统 **1)视口**   在SVG中,有一张无限大的画布,而画布区域被称为视口(viewport)。通过\元素的width和height两个属性可定义视口的尺寸,视口的原点在其左上角。   而在视口中,还包含一个坐标系统,由viewBox属性控制。它能包含四个数值(以逗号或空格分隔),分别是用户坐标系统的最小横坐标(x轴)和纵坐标(y轴),以及宽和高。   下面的两个\元素,第一个采用了默认的坐标系统,第二个声明了新的坐标系统,并且宽高比相同,如图1所示,第二个矩形缩小了。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/57/bb/57bbf5b7a705482a3a85b59ad197db2f_624x210.png =400x) 图 1   接下来修改两个最小坐标(如图2所示),第一个\元素声明的最小坐标为(20,20),虽然矩形的坐标是(0,0),但是比最小坐标要小,所以就会往左上角偏移;第二个\元素声明了负数坐标,与前一个正好相反;在第三个\元素中,修改了矩形的坐标,正好在左上角。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/18/6a/186ac93b93efdd583e54673eec15748c_938x210.png =600x) 图 2 **2)preserveAspectRatio属性**   当viewBox属性中声明的尺寸与视图的宽高比不一致时,可以使用preserveAspectRatio属性指定图形的缩放比例和对齐方式,语法如下,默认值是“xMidYMid meet”。 ~~~html preserveAspectRatio: [] ~~~   其中\的属性值由两个轴(x和y)以及三个位置(min、mid和max)组合而成,如表1所列。 :-: 表 1 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/23/02/230268270199434b71e3be9164fa9e05_611x516.png =400x)   在下面的示例中,由于三个\元素宽高比是3:2,而viewBox的宽高比是3:1,因此矩形会等比缩小。对它们分别应用xMinYMin、xMidYMid和xMinYMax,效果如图3所示。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/b7/69/b769e00c8316e827f685d4a91daa0ace_938x210.png =600x) 图 3   注意,因为宽度正好适配,所以对于x轴的对齐方式,效果都是相同的。   \可控制图形的适配或裁剪,可选的值如表2所列。 :-: 表 2 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6b/26/6b2674d0580a3628909d0fab40179a61_816x228.png =500x)   在下面的示例中,两个矩形的高度比视口要大,对它们分别应用meet和slice,效果如图4所示,第二个矩形将整个视口给填满了。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/64/20/64205cbbed41a94201e73d56d383e2f9_623x210.png =400x) 图 4 ## 二、形状   SVG的基本形状包括线段(line)、矩形(rect)、圆形(circle)、椭圆(ellipse)、多边形(polygon)和折线(polyline)。 **1)\**   线段元素需要指定起止点的坐标,如下所示,效果如图5所示。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6a/9f/6a9f0fa4f1197b2953c789e4fb51e4ec_310x210.png) 图 5   其中stroke和stroke-width是笔画属性,可指定笔画的颜色和宽度,相关属性如表3所列,部分属性的效果如图6所示。 :-: 表 3 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/5d/f0/5df0ac1b4b846a08bec38c2573193c1c_1274x658.png =600x) :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/ac/53/ac53503dc2ae3d16f85ceebe04d2ecbc_1550x263.png =800x) 图 6 **2)\**   除了直角矩形之外,还可以声明圆角矩形,如下所示,效果如图7所示。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/99/54/995444681a072bfbbbebf84425ece405_315x210.png) 图 7 **3)\和\**   利用圆形,可非常便捷的画出圆环,效果如图8所示。将\元素的stroke-dasharray声明为圆的周长(2πR),例如半径为50,周长就是314。如果为stroke-dashoffset属性定义一个值,就能得到圆环缺失一段的效果,从而就能模拟出圆环型的进度条了。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9b/3b/9b3ba9ad5ffd6b921682bda01ee90450_311x210.png) 图 8   椭圆和圆形类似,只是需要声明两个方向的半径,如图9所示。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/34/a4/34a4e3fed9cdcdb35694ab268402e022_312x210.png) 图 9 **4)\**   \可画出任意形状的封闭图形,例如平行四边形、梯形等。在points属性中,可声明各个点的坐标,每组坐标用逗号隔开,下面绘制了一个五角星,如图10所示。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a5/80/a580870c4669903ee8a9dda219749312_314x210.png) 图 10 **5)\**   折线不需要闭合,与\元素类似,也是由points属性绘制,如下所示,得到的折线如图11所示。 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a4/f8/a4f86eb2dfa5e6b1b090ae185f62d884_311x210.png) 图 11 **6)\**   上述基本形状都可以由\元素来绘制,并且通过\元素还可绘制出不规则的图形,例如心形,如下所示。 ~~~html ~~~   其中d属性可声明一系列路径,包含多个指令,如表4所列。 :-: 表 4 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/83/34/833474f26dd87890294346c0a4284591_565x804.png =300x) ## 三、文档结构 **1)内部样式**   SVG允许在其内部嵌入\