SVG在前端中的常见应用

news2025/1/18 10:48:34

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.coloradmin.cn/o/556717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C/C++】动态内存管理/泛型编程

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

SQLlite教程(第一篇)

SQLlite教程(第一篇 SQLlite是什么?SQLlite工作原理是什么?SQLlite有什么功能和特性?使用SQLlite有哪些注意事项?附加资料 SQLlite是什么? SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是…

Mysql审核查询平台Archery部署

目录 1 Archery产品介绍2 基于docker搭建Archery2.1 系统环境2.2 安装 Docker2.2.1 安装 Docker Compose2.2.2 下载Archery2.2.3 安装并启动2.2.4 表结构初始化2.2.5 数据初始化2.2.6 创建管理用户2.2.7 退出重启2.2.8 日志查看和问题排查2.2.9 启动成功查看2.2.10 端口占用情况…

基于Maven的profiles多环境配置

一个项目通常都会有多个不同的运行环境&#xff0c;例如开发环境&#xff0c;测试环境、生产环境等。而不同环境的构建过程很可能是不同的&#xff0c;例如数据源配置、插件、以及依赖的版本等。每次将项目部署到不同的环境时&#xff0c;都需要修改相应的配置&#xff0c;这样…

day07_数组初识

数组的概述 数组就是用于存储数据的长度固定的容器&#xff0c;保证多个数据的数据类型要一致。 数组适合做一批同种类型数据的存储 数组中的元素可以是基本数据类型&#xff0c;也可以是引用数据类型。当元素是引用数据类型是&#xff0c;我们称为对象数组。 容器&#xff…

从0开始学C语言的个人心得笔记(10w字)

大学的计算机相关专业第一门教学的计算机语言就是c语言&#xff0c;很多大学生面对从未接触过的计算机语言&#xff0c;可能会觉得很难以上门&#xff0c;从而放弃学习c语言。这篇博客写的主要是个人学习C语言时候的知识总结点&#xff0c;不能保证全部是正确的&#xff0c;如有…

Kafka灵魂28问

第 1 题 Kafka 数据可靠性如何保证&#xff1f; 对于 kafka 来说&#xff0c;以下几个方面来保障消息分发的可靠性&#xff1a; 消息发送的可靠性保障(producer) 消息消费的可靠性保障(consumer) Kafka 集群的可靠性保障&#xff08;Broker&#xff09; 生产者 目前生产者…

Leetcode每日一题——“用队列实现栈”

各位CSDN的uu们你们好呀&#xff0c;好久没有更新本专栏啦&#xff0c;甚是想念&#xff01;&#xff01;&#xff01;今天&#xff0c;小雅兰的学习内容是用队列实现栈&#xff0c;下面&#xff0c;让我们进入Leetcode的世界吧&#xff01;&#xff01;&#xff01; 这是小雅兰…

本地 docker 发布 java 项目,连接本地 redis 配置

1、本地项目 install 相应的 jar 包到 target 目录下&#xff0c;jar 包的路径步骤 2 要填写 2、项目根目录下创建 Dockerfile 文件 # 使用官方的 Java 11 镜像作为基础镜像 FROM openjdk:11-jdk# 设置工作目录 WORKDIR /app# 复制应用程序 JAR 文件到镜像中的 /app 目录下 C…

用LangChain实现一个ChatBlog

文章目录 前言环境一、构建知识库二、将知识库向量化三、召回四、利用LLM做阅读理解五、效果总结 前言 通过本文, 你将学会如何使用langchain来构建一个自己的知识库问答 其实大多数类chatpdf产品的原理都差不多, 我将其简单粗暴地分为以下四步: 构建知识库将知识库向量化召回…

vue diff算法与虚拟dom知识整理(11) 书写patch父级新旧为同一节点 子节点与文字交换逻辑实现

上文我们简单描述了patch处理同一节点的大体逻辑 这次 我们就来看一下text替换的情况 我们更改案例入口文件 src下的 index.js 代码如下 import h from "./snabbdom/h"; import patch from "./snabbdom/patch";const container document.getElementById(…

Maven概念及搭建

1.为什么我们要学习 maven? maven 还未出世的时候&#xff0c;我们有很多痛苦的经历 。 痛点 1&#xff1a; jar 包难以寻找 痛点 2&#xff1a; jar 包依赖的问题 痛点 3&#xff1a; jar 不方便管理 痛点 4&#xff1a;项目编译 2.Maven 简介 Maven 是 Apache 软件基金…

Golang中的管道(channel) 、goroutine与channel实现并发、单向管道、select多路复用以及goroutine panic处理

目录 管道&#xff08;channel&#xff09; 无缓冲管道 有缓冲管道 需要注意 goroutine与channel实现并发 单向管道 定义单向管道 将双向管道转换为单向管道 单向管道作为函数参数 单向管道的代码示例 select多路复用 案例演示 goroutine panic处理 案例演示 管道…

APP服务端架构的演变

大家好&#xff0c;我是易安&#xff01; 早期2013年的时候&#xff0c;随着智能设备的普及和移动互联网的发展&#xff0c;移动端逐渐成为用户的新入口&#xff0c;各个电商平台都开始聚焦移动端App&#xff0c;如今经历了10年的发展&#xff0c;很多电商APP早已经没入历史的洪…

日语文法PPT截图31-45

31 形式名词 とき ところ 作为形式名词的话&#xff0c;一般是要写假名不写汉字的 相对时态 如果是一般时/将来时とき&#xff0c;就是先做后面的动作&#xff0c;在做前面的动作。 出教室的时候&#xff0c;关灯。 如果是过去时とき那么&#xff0c;是先做前面的动作&#…

Linux安装elk

稍后补充。 目录 01【安装elk】 es单机 es集群 esHead插件 kibana logstash elastic search:https://www.elastic.co/cn/downloads/elasticsearchlogstash:https://www.elastic.co/cn/downloads/logstashkibana:https://www.elastic.co/cn/downloads/kibana linux下安装E…

vector的介绍

vector的介绍&#xff1a;(vector翻译是向量&#xff0c;但是表示的是顺序表) vector是表示可以改变大小的数组的序列容器。 就像数组一样&#xff0c;vector对其元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针上的偏移量来访问它们的元素&#xf…

前端代码规范配置

前端代码规范配置 涉及到了eslint、prettier、husky、lint-staged等工具包的使用。 代码规则校验 使用eslint定义代码风格 安装eslint并在.eslintrc.js文件中配置。 npm i eslint -D这个代码风格可以使用公司团队内的规范&#xff0c;如果没有可以在github中找到一些主流的…

主机访问不到虚拟机(centos7)web服务的解决办法

目录 一、背景 二、解决办法 2.1、配置虚拟机防火墙 2.2、修改虚拟机网络编辑器 一、背景 主机可以访问外网&#xff0c;虚拟机使用命令&#xff1a;curl http://网址&#xff0c;可以访问到web服务 &#xff0c;主机使用http://网址&#xff0c;访问不到虚拟机&#xff08…

TikTok掀动出海淘金潮

嘉晟迪科&#xff1a;在各行各业都已经卷成红海的今天&#xff0c;最稀缺的是什么&#xff1f;当然是增长。那么&#xff0c;增长在哪里&#xff1f;流量在哪里&#xff0c;需求就在哪里&#xff0c;增长也就在那里。 因为短视频风靡全球的流行&#xff0c;内容平台特别是短视频…