马黑黑 发表于 2023-9-23 20:41

svg path路径之:M H V L

本帖最后由 马黑黑 于 2023-9-23 21:38 编辑

svg,之前我们有过讨论,它基于XML,即 Extensible Markup Language(扩展标记性语言)。svg是 Scalable Vector Graphics 的缩写,意为可缩放矢量图形,顾名思义,它是用来做图像的。

svg可以作为一个html标签用于HTML,例如:

<div class="mydiv" style="width: 400px; height: 200px; border: 1px solid gray;">
    <svg width="100%" height="100%">
      <!-- 其他svg 代码 -->
    </svg>
</div>

以上,svg作为div的一个子元素出现,它的宽高尺寸使用父元素的宽高,都是 100%。

svg可以画线、圆、椭圆、矩形等等形状,作为绘图,路径可能是最强大的,任何形状的东东都可以使用 path 来描述并呈现出来。path 是svg的一个子标签,语句结构举例如下:

<svg style="border: 1px solid">
    <path d="M0 75 H300" fill="none" stroke="red"></path>
</svg>


可以把 path 看做是一个 svg 的子标签,它有诸多属性,d 是 data 的缩写,数据的意思,用于存储描述路径的数据,fill 是路径描述的形状的内部填充色(闭合区域填充),stroke 是路径边框的颜色。下面重点谈 d 属性值:

M 是 move(移动)的意思,M0 75 表示,将画笔移动到 {x,y} 坐标 {0,75} 处;H 是画横线指令(Horizontal 的缩写),H300 表示画一根横线,横线画到X坐标 300 处,而画线的起点,则是前面的定义,如M指令的画笔定位,或上一个结束的绘制指令终止点。

画竖线,请用 V 指令(Vertical 的缩写),V100 表示从画笔的上一个终结点画一根竖线到Y坐标 100 处。

画任意方向的直线,可用 L 指令(Line 的缩写),L 指令需要两个值,即 xy坐标值都需要,例如:

    d="M10 10 L100 50"

上面这个路径数据表示,画笔先移动到 {10,10} 处,然后往 {100,50} 处画一根直线。

以上介绍的指令,M、H、V、L,都是用了大写。

使用大写表示使用绝对位置,比方说,H 100,画的横线是从上一个绘制动作终结点到父元素即svg画布的X坐标中 100px 的位置。

这些指令还可以使用小写,若使用小写,表示使用相对位置,例如,h 100,表示从画笔的上一个位置开始画一根长度为 100px 的横线,支持负数,负数表现往左画线(v指令则往上)。

最后给一个上述指令综合应用的示例代码,大家可以到 pencil code (52qingyin.cn) 运行查看效果:

<svg style="border: 1px solid">
    <path d="M0 10 H300 L20 150 V100" fill="none" stroke="red"></path>
</svg>


更详细的介绍请参阅其他权威资料。

小辣椒 发表于 2023-9-23 21:39

黒黑辛苦,今天小辣椒一面在看亚运会开幕式{:4_189:}

马黑黑 发表于 2023-9-23 21:40

小辣椒 发表于 2023-9-23 21:39
黒黑辛苦,今天小辣椒一面在看亚运会开幕式

应该看看

红影 发表于 2023-9-26 12:36

对那个示例代码本来心里想了个形状,到pencil code里一看完全不是那么回事。
主要思路掉进小写的习惯里,其实大写的是以svg画布为参照的{:4_173:}

红影 发表于 2023-9-26 12:36

这个讲解非常仔细。谢谢黑黑的讲解{:4_199:}

红影 发表于 2023-9-26 12:37

讲这个是为了做非标进度条做准备的吧{:4_204:}

马黑黑 发表于 2023-9-26 13:08

红影 发表于 2023-9-26 12:37
讲这个是为了做非标进度条做准备的吧

对,做自由进度条

马黑黑 发表于 2023-9-26 13:08

红影 发表于 2023-9-26 12:36
对那个示例代码本来心里想了个形状,到pencil code里一看完全不是那么回事。
主要思路掉进小写的习惯里, ...

对,要弄清楚大小写的区别。大小写都可以用

马黑黑 发表于 2023-9-26 13:09

红影 发表于 2023-9-26 12:36
这个讲解非常仔细。谢谢黑黑的讲解

MHVL指令应该是简单的

红影 发表于 2023-9-26 22:20

马黑黑 发表于 2023-9-26 13:08
对,要弄清楚大小写的区别。大小写都可以用

我好像特别习惯想到小写的路径,大写的还不习惯。

红影 发表于 2023-9-26 22:21

马黑黑 发表于 2023-9-26 13:09
MHVL指令应该是简单的

那个外边框都不用设置宽高啊,好像直接就跟着生成了。

红影 发表于 2023-9-26 22:22

马黑黑 发表于 2023-9-26 13:08
对,做自由进度条

先打个基础,然后对那个就更容易理解了呢。

马黑黑 发表于 2023-9-26 22:39

红影 发表于 2023-9-26 22:22
先打个基础,然后对那个就更容易理解了呢。

也许吧,我尽量将这些指令再介绍一次

马黑黑 发表于 2023-9-26 22:40

红影 发表于 2023-9-26 22:21
那个外边框都不用设置宽高啊,好像直接就跟着生成了。

player_css 可以设置width和height值。另外,svg有自己的默认尺寸,同时,插件也设定了默认尺寸。

马黑黑 发表于 2023-9-26 22:41

红影 发表于 2023-9-26 22:20
我好像特别习惯想到小写的路径,大写的还不习惯。

使用相对绝对位置因人而异吧,或者,都可以的

红影 发表于 2023-9-27 12:47

马黑黑 发表于 2023-9-26 22:39
也许吧,我尽量将这些指令再介绍一次

嗯嗯,多弄几次也许我们就记得住了{:4_173:}

红影 发表于 2023-9-27 12:48

马黑黑 发表于 2023-9-26 22:40
player_css 可以设置width和height值。另外,svg有自己的默认尺寸,同时,插件也设定了默认尺寸。

原来是这样,还在想这个边框是怎么来的呢。

红影 发表于 2023-9-27 12:49

马黑黑 发表于 2023-9-26 22:41
使用相对绝对位置因人而异吧,或者,都可以的

二次贝塞尔曲线倒是习惯大写的格式。

马黑黑 发表于 2023-9-27 12:49

红影 发表于 2023-9-27 12:48
原来是这样,还在想这个边框是怎么来的呢。

是常规的CSS代码,所以不额外说明

马黑黑 发表于 2023-9-27 12:49

红影 发表于 2023-9-27 12:49
二次贝塞尔曲线倒是习惯大写的格式。

心中有数就成,无关大小写
页: [1] 2 3 4 5
查看完整版本: svg path路径之:M H V L