路径相比于多边形<polygon>元素具有更强绘图能力,<polygon>元素可以绘制任意的多边形,而路径可以绘制任意的轮廓线,是线段,曲线,圆弧的组合形式。svg中可以使用<path>元素绘制路径,所有描述轮廓线的数据都放在d属性中,并且所有的路径必须以moveto命令开始,命令以大写的M开始,后面跟着用空格或者逗号分隔的x坐标和y坐标,例如:

<path d="M 10,10 L 110,130" stroke="black"></path>

上面的代码相当于

<line x1="10" y1="10" x2="110" y2="130" stroke="black"></line>

绘制一条从(10,10)到(110,130)的线段,其中的L表示lineto命令,接下来会有详解

绘制线段

在路径中绘制直线的命令是lineto命令,在d属性中以大写L或者小写l表示,大写的L表示绝对坐标,小写的l表示相对坐标,lineto命令之后跟着线段的终点坐标,表示从上一个坐标绘制一条线段到lineto命令之后的坐标,比如以下代码:

<path d="M 10,10 L 110,130" stroke="black"></path>

就是绘制一条从(10,10)到(110,130)的线段,因为代码中使用大写的L表示lineto命令,所以L之后的坐标为绝对坐标。

<path d="M 10,10 l 100,120" stroke="black"></path>

上述代码绘制的线段也是一条从(10,10)到(110,130)的线段,因为代码中使用小写的l表示相对坐标,l之后的数值表示从当前坐标水平平移100个单位,垂直平移120个单位,确定线段终点的坐标来绘制线段,也就是说l之后的两个数值是相对于当前坐标的,不是坐标系上的绝对坐标

在绘制线段的时候不可避免甚至会频繁的绘制竖直线段或者水平线段,所以svg规范指定了绘制水平线段和竖直线段的快捷方式。

绘制水平线段的时候可以使用大写或者小写H之后跟x坐标来简写,当使用大写H时,H之后的数值表示的是坐标系x的绝对坐标,相当于从当前坐标(currentX,currentY)绘制一条到(X,currentY)的线段,X为H之后的数值。使用小写的h时,h之后的数值表示的是相对x坐标,相当于绘制一条从当前坐标(currentX,currentY)到(currentX+X,currentY)的线段,X为h之后的数值。

绘制竖直线段的时候可以使用大写或者小写的V之后跟着y坐标来简写,使用V的规则同上,绘制的线段相当于从(currentX,currentY)到(currentX,Y)绝对坐标(使用大写V)或者从(currentX,currentY)到(currentX,currentY +Y)相对坐标(使用小写v)

示例代码:

<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
</head>
<body>
<svg width="300" height="300" style="border:1px solid #000">
<path d="M 10,10 H 100" stroke="black"></path>
<path d="M 10,20 h 100" stroke="black"></path>
<path d="M 10,30 V 100" stroke="black"></path>
<path d="M 20,40 v 100" stroke="black"></path>
</svg>
</body>
</html>

效果如下:

绘制椭圆弧

稍后添加

绘制贝塞尔曲线

稍后添加

6. svg学习笔记-路径的更多相关文章

  1. 8. svg学习笔记-文本

    毫无疑问,文本也是svg中组成的重要部分,在svg中,用<text>元素来创建文本,文本的使用格式如下: <text x="20" y="30" ...

  2. 4. svg学习笔记-文档结构元素和样式的使用

    svg除了绘图元素之外还有一部分是专门用于文档结构的,这类元素有<g>,<use>,<defs>,<symbol>等 <g>元素 如果我们仅 ...

  3. svg学习笔记(一)

    SVG——可扩展适量图形,基于XML PC端:IE9+   wap端:表现良好,适合使用 基础图形: line(线段)  <line x1="25" y1="150 ...

  4. svg学习笔记

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. 2. svg学习笔记-svg中的坐标系统和viewbox

    我是通过<SVG精髓>这本书学习的svg,说实话,这本书写的不好,或者说翻译的不好,我没有看过这本书的原版,不知道原文写的怎么样,但是翻译出来的有些句子真的很拗口.以前老师给我们API文档 ...

  6. 3. svg学习笔记-基本形状和画笔属性

    svg中可以绘制的基本图形有线段,矩形,多边形,圆,椭圆,分别来看一下这些基本图形: 线段 使用<line>元素创建一条线段,格式如下: <line x1=" start- ...

  7. svg的基本图形与属性【小尾巴的svg学习笔记1】

    因为项目有可能用到, 所以学习了一下,做此笔记,图截自慕课网,侵删. 一.基本图形 1.矩形 x,y定义矩形的左上角坐标: width,height定义矩形的长度和宽度: rx,ry定义矩形的圆角半径 ...

  8. svg学习笔记(二)

    SMIL animation演示代码集锦 <svg width="1400" height="1600" xmlns="http://www.w ...

  9. 9. svg学习笔记-裁剪和蒙版

    裁剪 在svg中进行剪切,对整个svg元素而言,可以使用<svg>元素的viewbox属性,对于单个元素则可以使用<clipPath>元素.在单个图形元素上使用裁剪,可以在&l ...

随机推荐

  1. java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql mybatis 循环执行update生效一次 实际只执行一次

    java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说提交成功了一次,并没有实际的个数循环 有可能是同一个对象导致的 可以仔细看一下下面两段代码有什么区别 p ...

  2. php安装grpc报No releases available for package解决方法

    1.pecl.php.net搜索相应grpc的下载文件,这里找了个stable版本 https://pecl.php.net/get/grpc-1.17.0.tg 2.wge下载+pecl insta ...

  3. FastDFS 分布式文件存储目录

    1.fastdfs安装和配置 https://blog.csdn.net/hy245120020/article/details/78658081 2.使用nginx代理fastdfs以及图片裁剪(f ...

  4. OJ:一道考察多态的题目

    Description 下面程序的输出结果是: A::Fun C::Do 程序代码 #include <iostream> using namespace std; class A { p ...

  5. LeetCode Animation 题目图解汇总(持续更新中...)

    我会尽力将LeetCode上所有的题目都用动画的形式演示出来,期待与你见证这一天! GitHub Repo:LeetCode Animation Follow: MisterBooo · GitHub ...

  6. 关于我空间那篇名为《JavaScript axError:Unexpected token ILLEGAL 很简单的代码……》的随笔

    如图所示,我是空间的那片随笔,这里就不贴出链接了,也不希望你有这个兴趣,不知道会不会有人无意间闯入,额,自从日志用windows live writer 2009 发了那篇随笔后,我在网页上一直没能正 ...

  7. eclipse使用svn

    主干(trunk).分支(branch ).标记(tag) 用法示例 + 图解   以svn为例,git的master相当于trunk,dev分支相当于branches --------------- ...

  8. mybatis_ The content of element type association must match (constructor,id,result,ass ociation,collection,discriminator)

    一般遇到这种问题肯定要看一看association中元素编写顺序, <resultMap id="orderRslMap" type="orders"&g ...

  9. A simple problem(湘大邀请赛)

    A simple problem Accepted : 61   Submit : 418 Time Limit : 15000 MS   Memory Limit : 655360 KB Probl ...

  10. [转] 快速部署Tomcat项目的Shell脚本

    为了做集群测试,在每台机器上装了3个tomcat,每次发布项目的时候都要反复敲一些命令,重启tomcat之前先检查tomcat进程有没有停掉,没有还要手动kill该进程. 发布次数多了,操作就比较繁琐 ...