Skip to content

基本图形的绘制

1.矩形 rect

html
<svg width="200" height="150">
    <rect width="100" height="50" x="25" y="25" rx="5"></rect>
</svg>
  • width:矩形的宽度
  • height:矩形的高度
  • x:矩形左上角X坐标
  • y:矩形左上角Y坐标
  • rx:x轴的圆角半径
  • ry:y轴的圆角半径

2.圆形 circle

html
<svg>
    <circle cx="50" cy="50" r="40"/>
</svg>
  • cx:圆心的横坐标
  • cy:圆心的纵坐标
  • r:圆的半径

3.椭圆 ellipse

html
<svg width="500" height="140">
	<ellipse cx="200" cy="80" rx="100" ry="50" />
</svg>
  • cx:定义椭圆中心的x坐标。
  • cy:定义椭圆中心的y坐标。
  • rx:定义水平半径。
  • ry:定义垂直半径。

4.线段 line

html
<svg>
    <line x1="10" y1="10" x2="100" y2="100" stroke="red"/>
</svg>
  • x1:线段的起点X坐标
  • y1:线段的起点Y坐标
  • x2:线段的终点X坐标
  • y2:线段的终点X坐标

5.多边形 polygon

html
<svg>
    <polygon points="200,20 100,50 160,120"></polygon>
</svg>
  • points:多边形端点的坐标,每个坐标使用x,y的格式定义,多个坐标使用空格隔开

6.多线条 polyline

html
<svg width="500" height="200">
    <polyline points="20,20 40,25 60,40 80,120  120,140 200,180"  stroke="black" fill="none"></polyline>
</svg>
  • points:线条端点坐标,每个坐标使用x,y的格式定义,多个坐标使用空格隔开
  • stroke:线条的颜色
  • fill:置顶是否填充颜色

fill不为none,则是如下效果

7.文本 text

html
<svg width="300" height="50">
    <text x="0" y="30" fill="red" font-size="30" text-anchor='start'>
        I love SVG!!!
    </text>
</svg>
I love SVG!!!
  • x:文本左下角X坐标

  • y:文本左下角Y坐标

  • fill:文本的填充颜色

  • font-size:文本的字体大小

  • text-anchor:默认start

    • start:左端对齐坐标
    • middle:文本中间对齐坐标
    • end:文本右边对齐

text标签可包含多个tspan标签

html
<svg width="300" height="90">
    <text x="0" y="15" fill="red"  > 
         外面的字
         <tspan x="10" y="45"> 里面的字1 </tspan>
         <tspan x="10" y="70"> 里面的字2 </tspan>
    </text>
</svg>
外面的字 里面的字1 里面的字2

文本也可以添加超链接

使用a标签要在svg标签是添加命名空间 xmlns:xlink="http://www.w3.org/1999/xlink"

html
<svg width="200" height="30" xmlns:xlink="http://www.w3.org/1999/xlink">
    <a xlink:href="https://xarzhi.github.io/" target="_blank">
        <text x="10" y="15" fill="red"> love!!</text>
    </a>
</svg>
love!!
  • xlink:href:超链接的地址
  • target:指定新窗口的打开方式

8.路径 path

路径可以绘制任何图形,主要依靠d属性里的指令代码

html
<svg width="400" height="210">
    <path d="M150 0 L75 200 L255 200"></path>
</svg>
  • d:绘制路径的命令,小写 m/l/h/v 表示相对坐标(相对于上一个点),大写是绝对坐标(相对于画布原点)。

8.1 M

MoveTo:抬笔移动到,例如M 10 30移动到坐标(10,30)的位置,但是只是移动,不会绘制线段

html
<svg width="400" height="210">
   <path d="M150 0"></path>
</svg>

8.2 L

LineTo:绘制线段到,例如L 80 30,从当前位置到(80,30)的位置绘制一条线段,添加fill="none"防止自动闭合

html
<svg width="400" height="120">
    <path d="M150 0 L150 100 L200 100 L200 50 L300 50" fill="none" stroke='black'></path>
</svg>

8.3 H

绘制水平线

例如H 200,从当前位置到x=200的位置绘制的水平线

html
<svg width="400" height="50">
    <path d="M150 25 H 200" stroke='black'></path>
</svg>

如果是负数,例如H -200,从当前位置到x=-200的位置绘制的水平线

html
<svg width="400" height="50">
    <path d="M150 25 H -200" stroke='black'></path>
</svg>

8.4 V

绘制垂直线

例如V 200,从当前位置到y=200的位置绘制的水平线

html
<svg width="400" height="50">
    <path d="M150 25 V 200" stroke='black'></path>
</svg>

如果是负数,例如V -200,从当前位置到y=-200的位置绘制的水平线

html
<svg width="400" height="50">
    <path d="M150 25 V -200" stroke='black'></path>
</svg>

8.5 Z

close:闭合路径,将最后一个点和起点相连,添加fill="none"以防止自动填充

html
<svg width="400" height="210">
    <path d="M150 0 L75 200 L255 200 Z" fill="none" stroke='black'></path>
</svg>

8.6 Q

二次贝塞尔曲线,语法格式为:Q 控制点X 控制点Y 终点X 终点Y

html
<svg width="400" height="210">
    <path d="M 10 80 Q 95 10 180 80" stroke="red" fill="none"/>
</svg>

8.7 C

二次贝塞尔曲线,语法格式为:Q 控制点1X 控制点1Y 控制点2X 控制点2Y 终点X 终点Y

html
<svg width="400" height="210">
    <path d="M 10 80 C 40 10, 150 10, 180 80" fill="none" stroke="blue"/>
</svg>

8.8 A

椭圆弧线,语法格式如下

html
A rx ry x-axis-rotation large-arc-flag sweep-flag x y
  • rx:椭圆水平半径。
  • ry:椭圆垂直半径。
  • x-axis-rotation:椭圆整体旋转的度数,0=正着,90=横着躺
  • large-arc-flag:是标记绘制大弧(1)还是小弧(0)部分。
  • sweep-flag:是标记向顺时针(1)还是逆时针(0)方向绘制。
  • x:圆弧终点的X坐标。
  • y:圆弧终点的Y坐标。

large-arc-flag要依据当前点和圆弧终点的坐标,比如说起点和终点分别是如下两个点(100, 100)(200, 100)

那么依据这两个点,就可以绘制两个椭圆,分别如下

这两个椭圆中,蓝色的叫大弧,红色的是小弧large-arc-flag1会绘制大弧,为0就绘制小弧,sweep-flag1顺时针画,为0逆时针画

还是这两个点,如果绘制大弧顺时针

大弧逆时针

如果绘制小弧顺时针

小弧逆时针

MIT Licensed