SVG在前端中的常见应用

news/2024/11/25 13:54:55/

SVG在前端中的常见应用

  • 一、svg标签
    • 1. svg
    • 2. g
  • 二、描边属性
  • 三、模糊和阴影效果
    • 1. 模糊
    • 2. 阴影效果
  • 四、线性渐变和径向渐变
    • 1. 线性渐变
    • 2. 径向渐变
  • 五、绘制
    • 1. 内置形状元素
    • 2. 绘制矩形
    • 3. 绘制圆形
    • 4. 绘制椭圆
    • 5. 绘制线条
    • 6. 绘制多边形
    • 7. 绘制多线条
    • 8. 绘制文本
    • 9. 绘制路径

只是一些常用的应用,但足以入门。

一、svg标签

1. svg

  • svg标签相当于画布。
  • 可以在标签中定义宽和高
<svg width="100" height="100"></svg>

2. g

  • g 标签可以对svg元素进行分组,分组后可以统一配置属性。
<svg><g>...</g>
</svg>

二、描边属性

  • stroke:笔画颜色属性,值为颜色值
  • strike-width:笔画宽度属性,值为数值
  • stroke-linecap:笔画笔帽属性
    • butt:默认值,没有线帽。
    • round:圆形线帽。
    • square:方形线帽。
  • stroke-dasharray:笔画虚线属性,值为数组序列,至少2个值。
<path d="M175 200 l 150 0" stroke="gray" stroke-dasharray="20,10,3,3" stroke-width="3" fill="none"></path>

在这里插入图片描述

  • 所有的描边属性都可以应用于线条、文本、元素轮廓。
  • 下面会大量运用。

三、模糊和阴影效果

  • 给 svg 添加特殊效果需要添加 <filter></filter> 实现,且在 <defs></defs> (definitions)中定义。
  • filter 里面包含一个或多个效果(过滤器)滤镜。
  • filter 属性:
    • id:识别过滤器。
    • x:滤镜起始点x坐标
    • y:滤镜起始点y坐标
    • width:滤镜宽
    • height:滤镜高

1. 模糊

  • feGaussianBlue 定义高斯模糊。
  • 定义在 filter 里面。
  • feGaussianBlue 属性:
    • stdDeviation :定义模糊数量,值为数值,值越大越模糊。
<svg width="100" height="100"><defs><filter x="0" y="0" id="f1"><feGaussianBlur stdDeviation="15"></feGaussianBlur></filter></defs><rect width="90" height="90" stroke="pink" stroke-width="3" fill="skyblue" filter="url(#f1)"></rect>
</svg>

在这里插入图片描述

2. 阴影效果

  • 阴影效果通过 feOffsetfeBlend 实现。
  • 定义在 filter 里面。
  • feOffset 定义偏移,属性:
    • dx:阴影在x轴上的偏移,值为数值。
    • dy:阴影在y轴上的偏移,值为数值。
    • in:表示阴影图像的来源。(SourceAlpha黑色阴影,SourceGraphic图像阴影)
  • feBlend在偏移图像上混合原始图像,属性:
    • in:值为SourceGraphic。
<svg width="140" height="140"><defs><filter x="0" y="0" width="200" height="200" id="f2"><feOffset in="SourceAlpha" dx="0" dy="0"/><feGaussianBlur stdDeviation="5" /><feBlend in="SourceGraphic"/></filter></defs><rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f2)"></rect>
</svg>

在这里插入图片描述

四、线性渐变和径向渐变

1. 线性渐变

  • 线性渐变通过 <linearGradient></linearGradient> 实现,且在 <defs></defs> 中定义。
  • linearGradient属性:
    • id
    • x1:线性渐变开始位置x坐标
    • y1:线性渐变开始位置y坐标
    • x2:线性渐变结束位置x坐标
    • y2:线性渐变结束位置y坐标
  • 线性渐变可以由多个颜色组成,每个颜色用一个 <stop /> 指定。
  • stop 属性:
    • offset:开始和结束位置,值为百分比
    • stop-color:颜色。
<svg width="400" height="150"><defs><linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="rgb(255,255,0)" ></stop><stop offset="100%" stop-color="rgb(255,0,0)" ></stop></linearGradient></defs><ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad)"></ellipse><text fill="white" font-size="45" x="160" y="85">SVG</text>
</svg>

在这里插入图片描述

2. 径向渐变

  • 径向渐变通过 <radialGradient></radialGradient> 实现。
  • 属性:
    • id
    • cx, cy,r:定义最外面的圆(渐变结束圆圆心横坐标、纵坐标、半径)
    • fx,fy:定义最里面的圆(渐变起始点横坐标、纵坐标)
<svg width="400" height="150"><defs><radialGradient id="grad" cx="30%" cy="30%" r="50%" fx="30%" fy="30%"><stop offset="0%" stop-color="white" ></stop><stop offset="100%" stop-color="blue" ></stop></radialGradient></defs><ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad)"></ellipse>
</svg>

在这里插入图片描述

五、绘制

1. 内置形状元素

  • 元素:矩形 rect、圆形 circle、椭圆 ellipse、线条 line、多线条 polyline、多边形 ploygon、路径 path。
  • 坐标系
    在这里插入图片描述

2. 绘制矩形

  • 使用标签 rect。<rect />
  • 属性:
    • 宽度 width
    • 高度 height
    • 填充色 fill
    • 笔画颜色 stroke
    • 笔画宽度 stroke-width。
<svg width="400" height="400"><rect width="200" height="100" fill="skyblue" stroke-width="3" stroke="pink"/>
</svg>

在这里插入图片描述

  • (接上)属性:
    • x:左边位置
    • y:顶部位置
    • fill-opacity:填充不透明度,为0-1
    • stroke-opacity:笔画不透明度。
    • opacity:整个矩形的不透明度。
<svg width="400" height="400"><rect x="50" y="20" width="200" height="100" fill="skyblue" stroke-width="3"stroke="pink" fill-opacity="0.1" stroke-opacity="0.5"/>
</svg>

在这里插入图片描述

  • (接上)属性:
    • rx:圆角x轴方向上的半径长度。
    • ry:圆角y轴方向上的半径长度。
<svg width="400" height="400"><rect x="50" y="20" width="200" height="100" fill="skyblue" stroke-width="3"stroke="pink" fill-opacity="0.1" stroke-opacity="0.5" rx="20" ry="20"/>
</svg>

在这里插入图片描述

3. 绘制圆形

  • 使用标签 <circle/>
  • 属性:
    • cx:圆心x轴坐标,默认0
    • cy:圆心y轴坐标,默认0
    • r:圆半径。
    • stroke、stroke-width、fill。
<svg width="100" height="100"><circle cx="50" cy="50" r="40" stroke="skyblue" stroke-width="3" fill="pink"/>
</svg>

在这里插入图片描述

4. 绘制椭圆

  • 使用标签 <ellipse />
  • 属性:
    • cx、cy。
    • rx:水平半径
    • ry:垂直半径。
<svg width="500" height="140"><ellipse rx="100" ry="50" cx="200" cy="80" stroke-width="3" stroke="pink" fill="skyblue" />
</svg>

在这里插入图片描述

  • 堆叠椭圆
<svg width="500" height="140"><ellipse rx="220" ry="30" cx="240" cy="100" fill="pink" /><ellipse rx="190" ry="20" cx="220" cy="70" fill="skyblue" /><ellipse rx="170" ry="15" cx="210" cy="45" fill="#fff2df" />
</svg>

在这里插入图片描述

  • 空心椭圆
<svg width="500" height="100"><ellipse cx="240" cy="50" rx="220" ry="30" fill="pink"></ellipse><ellipse cx="220" cy="50" rx="190" ry="20" fill="white"></ellipse>
</svg>

在这里插入图片描述

5. 绘制线条

  • 使用标签 <line />
  • 属性:
    • x1:起点x坐标
    • y1:起点y坐标
    • x2:终点x坐标
    • y2:终点y坐标
<svg><line x1="0" y1="0" x2="200" y2="200" stroke="pink" stroke-width="2"></line>
</svg>

在这里插入图片描述

6. 绘制多边形

  • 使用 <polygon />
  • 用于创建一个至少三个边的图形。
  • 属性:
    • points:定义每个角的(x, y)坐标,至少三队坐标。
<svg width="500" height="300"><polygon points="200,20 250,190 160,210" fill="pink" stroke="skyblue" stroke-width="3"></polygon>
</svg>

在这里插入图片描述

  • 绘制五角星
<svg width="500" height="300"><polygon points="100,10 40,198 198,78 10,78 160,198" fill="pink" stroke="skyblue" stroke-width="3"></polygon>
</svg>

在这里插入图片描述

7. 绘制多线条

  • 使用<polyline />
  • 创建任何只由直线组成的形状
  • 属性:
    • points:同上
<svg width="500" height="300"><polyline points="100,10 40,198 198,78 10,78 160,198" fill="none" stroke="skyblue" stroke-width="3"></polyline>
</svg>

在这里插入图片描述

8. 绘制文本

  • 使用 <text>...</text>
  • 属性
    • x:文本x坐标
    • y:文本y坐标
    • font-size:文本大小
    • text-anchor:对齐方式(start | middle | end)
    • stroke、stroke-width、fill
<svg width="500" height="300"><text x="0" y="200" font-size="30" text-anchor="start" fill="none" stroke="red" stroke-width="1">家人们,谁懂啊</text>
</svg>

在这里插入图片描述

  • (接上)属性:
    • transform
      • rotate(旋转角度 旋转中心x, 旋转中心y)。默认(x, y)为(0, 0)。
<svg width="500" height="300"><text x="10" y="50" font-size="30" text-anchor="start" fill="none" stroke="red" stroke-width="1" transform="rotate(30 20,40)">家人们,谁懂啊</text>
</svg>

在这里插入图片描述

  • text 元素可以包裹多个 tspan,每个tspan可以包含不同的格式和位置。
  • tspan属性:
    • x、y
<svg width="500" height="300"><text x="10" y="20" fill="red">Several lines<tspan x="10" y="45">First Line</tspan><tspan x="10" y="70">Second Line</tspan></text>
</svg>

在这里插入图片描述

  • text标签可以添加链接。使用a包裹起来。要添加文本需要给svg添加xmlns:link属性,属性值固定为w3的地址。
  • a 属性:
    • xlink:href:链接地址
    • target:跳转方式
<svg width="200" height="30" xmlns:link="http://www.w3.org/1999/xhtml"><a xlink:href="https://www.baidu.com" target="_blank"><text x="10" y="15" fill="red">百度</text></a>
</svg>

在这里插入图片描述

9. 绘制路径

  • 使用 <path />
  • 可以绘制任意形状的图形
  • 属性:
    • d:draw,定义绘制路径的命令。命令大写表示绝对定位,小写表示相对定位。
      • 命令 M/m:moveto缩写,定义起点坐标(x, y)
      • 命令 L/l:lineto缩写,绘制一条线。
      • 命令 q:quadraticBezierCurve缩写,绘制二次贝塞尔曲线。定义控制点和终点坐标。
  • 绘制二次贝塞尔。
<svg width="450" height="400"><path d="M100 350 l 150 -300" stroke="red" stroke-width="3" fill="none"></path><path d="M250 50 l 150 300" stroke="red" stroke-width="3" fill="none"></path><path d="M175 200 l 150 0" stroke="green" stroke-width="3" fill="none"></path><path d="M100 350 q 150 -300 300 0" stroke="blue" stroke-width="3" fill="none"></path><g fill="blue"><circle r="3" cx="100" cy="350"></circle><circle r="3" cx="250" cy="50"></circle><circle r="3" cx="400" cy="350"></circle></g><g font-size="30" fill="black" text-anchor="middle"><text x="100" y="350" dx="-35">A</text><text x="250" y="50" dx="-10">B</text><text x="400" y="350" dx="35">C</text></g>
</svg>

在这里插入图片描述


http://www.ppmy.cn/news/75129.html

相关文章

百度贴吧视频发布软件视频教程(操作十分简单)

百度贴吧视频发布软件视频教程(操作十分简单) 软件有月卡、季卡、半年卡、年卡 【有时软件个别卡种售空&#xff0c;价格有上涨下降&#xff0c;关注获取当日价格】 我现在正在发帖的一个实时的一个画面&#xff0c;就是有很多同学问我就是喜羊羊今天还好跑吗&#xff0c;明天…

Boost开发指南-1.2progress_display

Progress_display progress_display可以在控制台上显示程序的执行进度&#xff0c;如果程序执行很耗费时间&#xff0c;那么它能够提供一个友好的用户界面&#xff0c;不至于让用户在等待中失去耐心。 progress_display位于名字空间boost&#xff0c;为了使用progress_displa…

软件测试基础(V模型W模型)

软件测试基础 1. 软件测试的生命周期 需求分析&#xff1a;站在用户的角度查看需求逻辑是否正确&#xff0c;是否符合用户的需求和行为习惯。站在开发的角度思考需求是否可以实现&#xff0c;或者说实现起来难度高不高测试计划&#xff1a;指定测试计划&#xff08;包括不限于…

6、Ray的高级功能和扩展性

6、Ray的高级功能和扩展性 导航 1.简介和背景 2.Ray的基本概念和核心组件 3.分布式任务调度和依赖管理 4.对象存储和数据共享 5.Actor模型和并发编程 6.Ray的高级功能和扩展性 7.使用Ray构建分布式应用程序的案例研究 8.Ray社区和资源 9.核心框架介绍 10.扩展1&

【计算机视觉 | 目标检测】术语理解4:OVD 训练的范式、半监督目标检测(SSOD)、弱监督目标检测(WSOD)、 余弦相似度

文章目录 一、OVD&#xff08;开放词汇对象检测&#xff09;训练的范式二、Semi-supervised Object Detection三、Weakly-supervised Object Detection四、余弦相似度 一、OVD&#xff08;开放词汇对象检测&#xff09;训练的范式 在OVD&#xff08;开放词汇对象检测&#xff…

【TES641】基于VU13P FPGA的4路FMC接口基带信号处理平台

板卡概述 TES641是一款基于Virtex UltraScale系列FPGA的高性能4路FMC接口基带信号处理平台&#xff0c;该平台采用1片Xilinx的Virtex UltraScale系列FPGA XCVU13P作为信号实时处理单元&#xff0c;该板卡具有4个FMC子卡接口&#xff08;其中有2个为FMC接口&#xff09;&#xf…

3D CAD模型的体素化

你有没有搜索过如何将 Cad 模型转换为 python 就绪的 numpy 数组&#xff0c;但没有得到任何明确的答案&#xff1f; 我也是。 经过长时间的研究并尝试了很多软件和 python 库&#xff0c;我终于能够将 3D STEP 文件转换为 3 维 numpy 数组。 如果你想做同样的事情或只是想知道…

C++前置声明

在C中&#xff0c;前置声明&#xff08;Forward Declaration&#xff09;是指在使用类、函数或变量之前提前声明它们的存在&#xff0c;而无需提供完整的定义。前置声明可以减少编译时间和减少代码之间的依赖性。 以下是几个常见情况下使用前置声明的示例&#xff1a; 类的前…