网站首页 > 技术文章 正文
我们经常在一些页面中遇见svg格式的绘图,通常是一脸懵逼,别急,看完这篇文章你就能很好地了解它了。
一、svg简介。
SVG 意为可缩放矢量图形(Scalable Vector Graphics),是使用 XML 来描述二维图形和绘图程序的语言,后缀是“.svg”。它的优点是图像在放大或改变尺寸的情况下其图形质量不会有所损失。
二、svg文件如何嵌入HTML文件。
SVG 文件可通过以下标签嵌入 HTML 文档:<embed>、<object> 或者 <iframe>。但是在html5中,直接用内联的方式嵌入,方便太多了。各种方式的嵌入如下:
// 使用 <embed> 标签
<embed
src="rect.svg"
width="300"
height="100"
type="image/svg+xml"
pluginspage="http://www.adobe.com/svg/viewer/install/"
/>
// 使用 <object> 标签
<object
data="rect.svg"
width="300"
height="100"
type="image/svg+xml"
codebase="http://www.adobe.com/svg/viewer/install/"
/>
// 使用 <iframe> 标签
<iframe src="rect.svg" width="300" height="100"></iframe>
// 在 HTML5 中, SVG 元素直接嵌入 HTML 页面中
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190">
<polygon
points="100,10 40,180 190,60 10,60 160,180"
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;"
/>
</svg>
三、基本图形绘制(h5中的嵌入方式做演示)。
1.矩形
<svg>
<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>
</svg>
// width="矩形的宽度"。必需的。
// height="矩形的高度"。必需的。
// x="矩形的左上角的x轴"
// y="矩形的左上角的y轴"
// rx="x轴的半径(round元素)"
// ry="y轴的半径(round元素)"
// + 显现属性:Color, FillStroke, Graphics
2.圆形
<svg>
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>
</svg>
// cx="圆的x轴坐标"
// cy="圆的y轴坐标"
// r="圆的半径". 必需.
// + 显现属性:颜色,FillStroke,图形
3.椭圆
<svg>
<ellipse cx="300" cy="80" rx="100" ry="50"
style="fill:yellow;stroke:purple;stroke-width:2"/>
</svg>
// cx="椭圆x轴坐标"
// cy="椭圆y轴坐标"
// rx="沿x轴椭圆形的半径"。必需。
// ry="沿y轴长椭圆形的半径"。必需。
// + 显现属性:颜色,FillStroke,图形
4.直线
<svg>
<line x1="0" y1="0" x2="200" y2="200"
style="stroke:rgb(255,0,0);stroke-width:2"/>
</svg>
// x1="直线起始点x坐标"
// y1="直线起始点y坐标"
// x2="直线终点x坐标"
// y2="直线终点y坐标"
// + 显现属性:Color, FillStroke, Graphics, Markers
5.多边形
<svg>
<polygon points="200,10 250,190 160,210"
style="fill:lime;stroke:purple;stroke-width:1"/>
</svg>
// points="多边形的点。点的总数必须是偶数"。必需的。
// fill-rule="FillStroke演示属性的部分"
// + 显现属性:Color, FillStroke, Graphics, Markers
6.多段线
<svg>
<polyline points="20,20 40,25 60,40 80,120 120,140 200,180"
style="fill:none;stroke:black;stroke-width:3" />
</svg>
// points=折线上的"点"。必需的。
// + 显现属性:Color, FillStroke, Graphics, Markers
7.路径
<svg>
<path d="M150 0 L75 200 L225 200 Z" />
</svg>
// d="定义路径指令"
// pathLength="如果存在,路径将进行缩放,以便计算各点相当于此值的路径长度"
// transform="转换列表"
// + 显现属性:Color, FillStroke, Graphics, Markers
8.文本
<svg>
<text x="0" y="15" fill="red">这是文本</text>
</svg>
// x="列表的X -轴的位置。在文本中在第n个字符的位置在第n个x轴。如果后面存在额外的字符,耗尽他们最后一个字符之后放置的位置。 0是默认"
// y="列表的Y轴位置。(参考x)0是默认"
// dx="在字符的长度列表中移动相对最后绘制标志符号的绝对位置。(参考x)"
// dy="在字符的长度列表中移动相对最后绘制标志符号的绝对位置。(参考x)"
// rotate="一个旋转的列表。第n个旋转是第n个字符。附加字符没有给出最后的旋转值"
// textLength="SVG查看器将尝试显示文本之间的间距/或字形调整的文本目标长度。(默认:正常文本的长度)"
// lengthAdjust="告诉查看器,如果指定长度就尝试进行调整用以呈现文本。这两个值是'spacing'和'spacingAndGlyphs'"
// + 显现属性:Color, FillStroke, Graphics, FontSpecification, TextContentElements
四、高级特效。
主要分滤镜和渐变效果。
<defs> 和 <filter>
所有互联网的SVG滤镜定义在<defs>元素中。<defs>元素定义短并含有特殊元素(如滤镜)定义。<filter>标签用来定义SVG滤镜。<filter>标签使用必需的id属性来定义向图形应用哪个滤镜。
1.滤镜可以做一些模糊的效果和阴影,效果有很多,也可以自己尝试地做一做。
比如做个简单的边缘模糊效果。
<svg>
<defs>
<filter id="f1" x="0" y="0">
<feGaussianBlur in="SourceGraphic" stdDeviation="15" /> //<feGaussianBlur> 元素是用于创建模糊效果
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3" fill="green" filter="url(#f1)" />
</svg>
2.渐变有线性渐变,放射性渐变,下面是个线性渐变的例子。
<svg>
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
</linearGradient>
</defs>
<rect width="200" height="90" fill="url(#grad1)" />
</svg>
// 把上面的
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
......
</linearGradient>
// 替换成
<radialGradient id="grad1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
<stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:0" />
<stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1" />
</radialGradient>
// 变成放射性渐变
众多示例:https://www.runoob.com/svg/svg-examples.html
五、svg和canvas比较。
SVG 是一种使用 XML 描述 2D 图形的语言。 SVG DOM 中的每个元素都是可用的。它的绘制不依赖分辨率,可以为某个元素附加 JavaScript 事件处理器,不过事件添加过多会影响渲染速度。如果 SVG 对象的属性发生变化,浏览器能够自动重现图形。最适合带有大型渲染区域的应用程序(比如谷歌地图)。
Canvas 通过 JavaScript 来绘制 2D 图形。它的绘制是依赖分辨率的,不能单独为其中元素添加事件。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。能够以 .png 或 .jpg 格式保存结果图像。最适合图像密集型的游戏,其中的许多对象会被频繁重绘
猜你喜欢
- 2025-06-18 服务端渲染SSR:渐进式水合技术前沿
- 2025-06-18 详解如何使用vite-plugin-svg-icons在Vue3项目中集成SVG图标
- 2025-06-18 前端能限制用户截图吗?(前端限制图片大小)
- 2025-06-18 极客Web前端开发资源大荟萃#020(极客代码)
- 2025-06-18 SVG Drawing Animation – SVG 绘制
- 2025-06-18 想要字体图标设计师却给了SVG?没关系,自己转
- 2025-06-18 第五篇 前端面试基础题,你能拿下几道?
- 2024-10-04 css实现的svg路径动画html页面前端源码
- 2024-10-04 5分钟搞懂SVG画图 svg绘制
- 2024-10-04 svg、canvas、css 3d 实现数据可视化(伪 3D 效果)
你 发表评论:
欢迎- 533℃Oracle分析函数之Lag和Lead()使用
- 531℃几个Oracle空值处理函数 oracle处理null值的函数
- 529℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 521℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 515℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 505℃【数据统计分析】详解Oracle分组函数之CUBE
- 485℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 483℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端密码加密 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)