什么是SVG?——SVG快速入门

这篇具有很好参考价值的文章主要介绍了什么是SVG?——SVG快速入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在学习一个前端数据可视化D3.js,它的图表绘制是基于SVG的,作为一个小菜鸡,我并不知道什么是SVG,于是我决定把D3.js放一放,先学一下SVG。

那么什么是SVG呢?百度百科上是这么介绍的:“SVG是一种图形文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。”

看完之后不明觉厉,就像小时候听到函数、方程这种词一样,因为名词太过不接地气,导致还没学就先怂了。不要被不了解的名词吓到,就我自学的感受来说,SVG其实很简单,虽然它是基于XML,但是不了解XML也没关系,毕竟HTML也是标记语言,只要用过HTML绝对能看懂下面的内容。

一、在HTML中使用SVG

(一)可以直接在HTML中嵌入SVG代码

<body>
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" style="height: 300px; width: 500px">
        <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
    </svg>
</body>

xmlns是命名空间,不了解XML的可能不知道是什么意思,无所谓,这个参数是固定的,照着写就行了。

通过上面的代码就能在页面中绘制一个圆形

svg,前端用到的工具库,前端

(二)单独建一个SVG文件,并在HTML中引入

建一个example1.svg文件,内容如下:

<svg version="1.1" baseProfile="full"  width="300" height="200" xmlns="http://www.w3.org/2000/svg">
  <rect width="100%" height="100%" stroke="black" stroke-width="4" fill="grey" />
  <text x="150" y="115" font-size="20" text-anchor="middle" fill="red">SVG NB</text>
</svg>

 然后在HTML通过标签引入:

<iframe src="example1.svg" style="width: 350px; height: 250px"></iframe>
<embed src="example2.svg" type="image/svg+xml" />
<object data="example3.svg" type="image/svg+xml"></object>

这三种标签都适用于HTML5标准,并且目前大部分浏览器都是支持的。

效果为:

svg,前端用到的工具库,前端

当然也可以用“<a>”标签做一个链接,连到SVG文件

<a href="example1.svg">SVG文件</a>

二、基础形状标签

SVG提供了一些标签来帮助我们快速绘制常用形状。

(一)矩形

<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>

样式的设置也非常简单,和CSS的行内样式表一样,属性名也都基本和在HTML中使用CSS时相同,如上。目前我所用到的唯一不同的是矩形圆角用rx和ry这两个属性进行设置。

把style=“”去掉,全部写成属性=值的形式也是可以的,如下:

<rect width="300" height="100" fill=rgb(0,0,255) stroke-width=1 stroke=rgb(0,0,0)/>

(二)圆形

<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />

cx和cy定义圆心的位置,不设置的话就是(0,0),r是半径。

(三)椭圆

<ellipse cx="240" cy="50" rx="220" ry="30" style="fill:yellow"/>

椭圆跟圆的区别是椭圆有长轴和短轴,所以有两个属性rx和ry分别表示水平轴和垂直轴的长度

(四)直线

<line x1="0" y1="0" x2="200" y2="200"/>

直线也很简单,用两组(x,y)坐标分别设置起点和终点即可。

(五)折线

<polyline points="0,40 40,40 40,80 80,80 80,120 120,120 120,160"/>

折线其实也不复杂,就比直线多定义几个点而已,注意每组点之间用空格隔开而不是分号。

(六)多边形

多边形稍微复杂一点点,它跟折线很像,也是定义一些点,只不过最后一个点会和第一个点连起来,形成一个封闭图形。

关键在于fill-rule属性,该属性用来如何判断画布上的某区域是否属于该图形“内部”(内部区域将被填充),当然,对三角形或矩形这种路径没有交叉的简单图形,不需要使用该属性,下面的例子是一个五角星。

<polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:nonzero;" />

svg,前端用到的工具库,前端

1.fill-rule默认是nonzero,它的规则就是要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点情况。从0开始计数,路径从左向右穿过射线则计数加1,从右向左穿过射线则计数减1。得出计数结果后,如果结果是0,则认为点在图形外部,否则认为在内部。

svg,前端用到的工具库,前端

比如上图中的P点和从P点做的射线,经过了两条图形的路径BC和EA,两条路径均是从右向左穿过射线,所以计数为2,认为该点在内部。

2.fill-rule的另一个值是evenodd,也是做射线,但是做完之后数和图形路径的交点个数,奇数就认为是在内部,偶数就认为在外部。所以将上面代码中的fill-rule改成evenodd后就变成了下面的效果。

 svg,前端用到的工具库,前端

(七)路径

路径和折线的区别在于折线是用直线把点连起来,而路径可以通过参数绘制出光滑的曲线。路径可以实现折线的效果,但折线却并不能替代路径。

路径算是这些标签里面最复杂的一个,参数非常多,而且使用不同参数时,后面所跟的点的个数也不相同,我想在自己尝试了所有不同的路径参数之后,单独写一篇文章对路径做一个详细介绍,下面只是做个入门。路径的详细讲解文章已经发布,链接为:

<path d="M 0 350 q 150 -300 300 0" stroke="blue" stroke-width="5" fill="none" />

svg,前端用到的工具库,前端

参数如下:可以用小写字母,但是含义不一样,大写表示绝对绝对定位,而小写表示相对定位。

  • M = moveto 起始
  • L = lineto 连线
  • H = horizontal lineto 水平线
  • V = vertical lineto 垂直线
  • C = curveto 曲线,三次贝塞尔曲线
  • S = smooth curveto 也是曲线,三次贝塞尔曲线
  • Q = quadratic Bézier curve 二次贝塞尔曲线
  • T = smooth quadratic Bézier curveto 二次贝塞尔曲线
  • A = elliptical Arc 椭圆弧
  • Z = closepath 闭合(从最后一个点连直线到起始点)

所以上面代码的意思就是从(0, 350)出发,使用二次贝塞尔曲线分别由(150,-300)控制点控制最终到达(300, 0)结束点,不闭合。(注意用的是小写的q,所以这里的(150, -300)和(300, 0)是相对于起点而言的,和起点的(0, 350)不是同一个坐标系)。这里只是粗略介绍一下,路径所有命令的详细解析会在下一篇文章中。

三、文本标签

基本用法很简单,和HTML一样在开始和结束标签中间写文本就行。

(一)子文本

每个<tspan>和和<text>一样,单独占一行,而且可以有自己的样式。但是必须包在<text>标签内,不能单独用。

<text x="10" y="20" style="fill:rgb(0, 174, 255);">峰兄兄:
    <tspan x="10" y="45">菜鸡程序员</tspan>
    <tspan x="10" y="70">正在努力中</tspan>
</text>

svg,前端用到的工具库,前端

(二)旋转文字

<text x="10" y="45" transform="rotate(90 20,40)">正在努力中</text>

rotate中的三个参数分别是顺时针旋转的度数、垂直、水平平移的距离(正值表示向上、向右)

svg,前端用到的工具库,前端

(三)文字沿路径

定义一条路径,然后通过textPath标签进行设置即可

<defs>
    <path id="path1" d="M 0 100 q 100 80 200 0" stroke="blue" stroke-width="5" fill="none" />
</defs>
<text x="10" y="100" style="fill:red;">
    <textPath xlink:href="#path1">祝你天天开心,都有好心情</textPath>
</text>

 svg,前端用到的工具库,前端

 以上就是SVG入门的内容,后面还有关于路径path和渐变色的详细总结。


写在最后

这是我在稀土掘金发过的文章,稀土掘金的个人主页为峰兄兄 的个人主页 - 动态 - 掘金,两边都会更新,那边一般会早个几天。欢迎大家关注~

文章中的所有图都是我运行自己练习时的代码截的图,原理图也是在截图的基础上,在画图工具中编辑的,希望能得到更多人的认可,也希望能尊重我的劳动成果,未经许可不要转载哦~ 文章来源地址https://www.toymoban.com/news/detail-602958.html

到了这里,关于什么是SVG?——SVG快速入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)

    一、浏览器网页展示图片方法 1.1、HTML img 标签 img 标签常用属性 序号 属性 描述 1 src 用于指定图片的 URL 或路径。 2 alt 用于当图片无法展示时显示的替代文本,seo优化时要注意添加这个属性。 3 width/height 用于指定图片展示的宽度和高度。如果只指定其中一个值,那么另一个

    2024年02月11日
    浏览(55)
  • 初学前端-记使用阿里图库SVG图标不显示的解决方法

    使用VUE3+Element-Plus做来制作前端界面,做到左侧菜单栏时遇到了一个困难,添加的SVG图标始终不显示,位置存在,图标的信息也没有问题,但是就是一直显示不出来。  后经多方搜索, 经vue前端项目引入iconfont阿里图标的四种方式_飞歌Fly的博客-CSDN博客的提示在Main.js中导入了

    2024年01月25日
    浏览(61)
  • 记录--为什么推荐用svg而不用icon?

    使用背景: 1.因为svg图标在任何设备下都可以高清显示,不会模糊。而icon会在显卡比较低的电脑上有显示模糊的情况 2.svg图标在页面render时 速度会比icon稍微快一点 3.实现小程序换肤功能 ;方案见:www.yuque.com/lufeilizhix… SVG基础可参考:www.yuque.com/lufeilizhix… inline svg是目前前

    2024年02月08日
    浏览(45)
  • 浅谈两种前端截图方式:Canvas截图 vs SVG截图

    如今很多网站都引入 截图功能 ,可用于 问题反馈 、 内容分享 等实用需求,而前端截图也不知不觉成为了首选。今天为大家推荐两种前端截图方式,虽然有些局限,但是也能应付大部分项目需求。 Canvas截图 : html2canvas SVG截图 : rasterizehtml 首先来谈下两种前端截图方式的原

    2023年04月17日
    浏览(39)
  • SVG 在前端的7种使用方法,你还知道哪几种?

    点赞 + 关注 + 收藏 = 学会了 技术一直在演变,在网页中使用 SVG 的方法也层出不穷。每个时期都有对应的最优解。 所以我打算把我知道的 7种 SVG 的使用方法列举出来,有备无患~ 如果你还知道其他方法,可以在评论区补充~ ```svg ``` xml 是浏览器能读取的格式,但如果希望 sv

    2024年02月06日
    浏览(41)
  • 自己写一个svg转化为安卓xml的工具类

    自己写一个svg转化为安卓xml的工具类_张风捷特烈的博客-CSDN博客 svg资源阿里巴巴矢量资源网站:iconfont-阿里巴巴矢量图标库 感觉一般的svg到Android可用的xml差异有点规律,主要的就是path 秉承着能用代码解决的问题,绝对不动手。能够靠智商解决的问题,绝对不靠体力的大无畏

    2024年02月11日
    浏览(37)
  • C#/VB.NET:快速而简单的免费SVG到PDF转换技巧

    在日常工作中,我们常常需要将SVG转换为PDF格式。这是因为SVG格式的图像在打印时可能会出现问题,例如失去分辨率或无法正确适应纸张大小。与此相比,PDF格式则专门用于打印和共享文档,可以确保高质量输出,并且能够自动适应不同的纸张大小。在本文中,我们将介绍如

    2024年02月09日
    浏览(39)
  • 【脚本工具】SVG路径中的A指令转DXF的圆弧和椭圆弧 & C++代码实现

    目前Svg的Arc的参数字符串如下:其中,A (绝对) a (相对) 除了 A(a) 表示标识为圆弧之外,其余参数说明如下: 参数 说明 符号 rx 椭圆半长轴 a a a ry 椭圆半短轴 b b b x-axis-rotation 椭圆相对于坐标系的旋转角度,角度数而非弧度数 α alpha α large-arc-flag 是否优(大)弧:0否,1是 f l

    2024年02月06日
    浏览(35)
  • SVG图标,SVG symbols,SVG use标签

    项目中图标的使用,趋势是使用svg作图标的,优点如下 兼容现有图片能力前提还支持矢量 可读性好,有利于SEO与无障碍 在性能和维护性方面也比iconfont要强很多 怎么在项目中优雅的使用svg图标,下面我们将采用类似雪碧图的做法 1、普通的使用 普通的使用遇到以下的问题:

    2024年02月15日
    浏览(47)
  • vue中写svg组件svg图片加载不出来

    结构 首先要安装3个插件:svg-sprite-loader,svgo,svgo-loader package.json src/icons/index.js src/components/SvgIcon/index.vue main.js vue.config.js

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包