重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
基本概念
目前创新互联已为千余家的企业提供了网站建设、域名、雅安服务器托管、网站托管、服务器托管、企业网站设计、城东网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
svg(Scalable Vector Graphics)是一种基于XML语法的图像格式,全称是可缩放矢量图,其它图像格式都是基于像素处理的,SVG则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,且不管放大多少倍都不会失真.SVG是面向图形,HTML时面向文本。
嵌入到HTML
SVG可以写在一个独立的文件中,然后用img, object, embed, iframe等标签插入网页
SVG文件可以转为base64编码,然后作为Data URI写入网页
SVG书写的注意点
SVG的所有元素
SVG的所有元素
SVG的所有属性
SVG的所有属性
常用的形状元素
其实上图只是对一些常用svg标签的初步认识,因为svg所提供的标签不止这些,而且比如path标签是在svg中最为通用的形状标签,因为它可以通过设置路径画出其它图形,比如矩形,圆,椭圆,多边形,多线段,甚至是复杂的贝塞尔曲线等等
path
第一次看到svg的标签的时候,打开控制台,也是一脸懵逼,首先这里面的d属性是个啥,M是啥,L是啥,Z是啥,H是啥,V是啥,C是啥,S是啥,Q是啥,T是啥,A是啥,我... 打扰了,打扰了
嗯,26个兄弟快凑齐了,马上就可以召唤神龙了。当然,path这条神龙在svg界就是“爸爸”,啥玩意都能给你弄出来,
想要通过path勾勒出美妙的图形,需要了解d这个属性,path标签中的d属性可以定义一系列的指令和参数,每一个指令通过一个字母来指定,比如上面说的M,它表示移动到,也就是"move to"的意思,比如让我们移动到(10, 10)的坐标点,就可以这样写:
'
当然每一种字母都是区分大小写的,比如M是基于画布上的一个绝对坐标,而m则是基于上一个点的坐标,也就是相对坐标。比如有下面两种指令
两个path唯一的区别就是第三个指令,一个是M60 60, 一个是m60 60
线段指令(Line commands)
比如用H和V来绘制一个矩形, 我们一步一步来
step1
step2
step3
step4
上面的写法也可以通过一个指令来简写一下,这就用到了Z指令
Z:该指令的作用是从当前位置向起始点画出一条线段,它一般都被放置在一连串节点的末尾,并且不区分大小写。可以理解为”闭环“指令
所以上例可以写成这样,也能达到同样的效果
同样,上例也可以通过相对定位的形式进行改写,效果是一致的
曲线指令(Curve commands)
一说到曲线,那贝塞尔曲线是绕不开的,对于曾高数挂科的我来说是很排斥的,但好在闲着蛋疼,遂学之。
path标签中有两类贝塞尔曲线,一种叫做“三次贝塞尔曲线(cubic curve)“, 一种叫做”二次贝塞尔曲线(quadratic curve)“,这名字听起来就不接地气。
那先从三次贝塞尔曲线说起
C:该指令用于创建一个三次贝塞尔曲线,需指定三组参数
比如:
首先,(20 20)和(40 20)表示控制节点,一个是描述曲线起始点的斜率,另一个是描述曲线终止点的斜率,最后一组(50 10)表示曲线的终点。总结一下这段示例,就是有一条从(10 10)到(50 10)的一条线段,通过设置两个控制点的斜率,使这条线段的各个点弯曲成正确的(符合斜率趋势的)曲线。
MDN上有多组曲线的对比示例。
这里面我们再添加一种情况,就是设置两个水平的控制节点,来看看线段是如何变化的
通过S指令能生成和上述示例中同样的平滑曲线,使用S指令分为以下两种情况
比如如下代码
我们通过不断改变S的第一组节点来看图形的变化趋势
我们可以看到,随着不断给S指令结束控制节点的横坐标累加,曲线会向右偏移。
接下来看下S指令前面没有其他C或者S指令的情况,代码如下
另一种曲线是二次贝塞尔曲线(quadratic curve)
它通过指令Q来来进行描述,相较于三次贝塞尔曲线,它更为简单。
Q:只需要指定两组参数,第一组表示控制节点的坐标,第二组表示终点坐标。
示例:
和三次贝塞尔类似,二次贝塞尔也提供了快捷的玩法,那就是T指令
T:通过找到前一个控制节点,来推断出一个新的控制点,T指令后面只需要指定一组结束点坐标即可,由于T指令是基于前一个控制点的基础上来生成的,所以T指令之前必须要有Q指令或者其他T指令,否则生成的控制节点就和前一个控制节点就会重合,在画布上看到的就仅仅是一条直线。
示例:
在上面几个例子中,两种曲线都生成了同样的结果,虽然三次贝塞尔允许更多的自由度,但是决定使用哪种曲线还要依照具体情形以及对称曲线的数量来定
弧度(Arcs)
在svg中也可以创建弧度这种曲线,它通过A指令来指定,A指令可以接收7个参数
示例:
<?xml version="1.0" standalone="no"?>
饼图
通过学习path,我们来绘制一个简单的饼图
小结
在最近的一些项目中,接触到了部分有关svg的需求,所以这篇文章就是记录下自己在学习svg的一部分总结,比较基础,方便自己今后的复习和查阅。
参考资源
MDN SVG
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对创新互联的支持。