news 2026/5/1 7:15:45

前端可视化-----svg学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端可视化-----svg学习笔记

一、什么是svg?

svg是一种“用代码描述图形的文件格式”,浏览器将这些代码实时渲染成你看到的图形。

注:首先svg不是图片的一种格式,也不依赖像素,所以意味着图形可以无限放大而不失真。即svg是将代码转化成图片形式的一种文件格式。

二、svg的工作流程

svg代码文件 → 浏览器解析 → 渲染引擎绘制 → 屏幕上显示图形
↓ ↓ ↓
(文本) (理解指令) (执行绘图) (视觉结果)

三、创建svg文件

首先既然svg文件是将代码转化成图片形式的一种文件格式,那么就能通过vscode去打开和创建。所以我们以新建text.svg文件为例。

输入代码:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> <circle cx="100" cy="100" r="80" fill="blue" /> </svg>

四、安装svg拓展

4.1、点击扩展图片,搜索关键字 svg,安装扩展:

4.2、安装完成后,可以右击 svg 文件,在列表中选择"预览 SVG":

4.3、预览效果:

4.4、如何切换到代码视图?

  1. 在左侧资源管理器,右键点击test.svg文件

  2. 选择“打开方式”​ (Open With)

  3. 选择“文本编辑器”​ 或“代码编辑器”

五、svg 基本语法

<svg width="200" <!-- 指定SVG画布的宽度 --> height="200" <!-- 指定SVG画布的高度 --> xmlns="http://www.w3.org/2000/svg"> <!-- 指定SVG命名空间 --> viewBox="0 0 200 200" <!-- 坐标系(推荐添加) --> <!-- SVG图形内容 --> </svg>

:xmlns="http://www.w3.org/2000/svg",固定语法,告诉浏览器:“这是SVG语法,别当成HTML解析”。在HTML5中,内联SVG可省略xmlns,但独立.svg文件必须包含。

六、七大基本图形元素

1. 矩形<rect>

<rect x="20" <!-- 左上角X坐标 --> y="20" <!-- 左上角Y坐标 --> width="160" <!-- 宽度 --> height="120" <!-- 高度 --> rx="10" <!-- 圆角半径 --> fill="#3498db" <!-- 填充色 --> stroke="#2980b9" <!-- 边框色 --> stroke-width="3"/> <!-- 边框粗细 -->

2. 圆形<circle>

<circle cx="100" <!-- 圆心X坐标 --> cy="100" <!-- 圆心Y坐标 --> r="80" <!-- 半径 --> fill="gold" <!-- 填充色 --> opacity="0.8"/> <!-- 透明度 -->

3. 椭圆<ellipse>

<ellipse cx="150" <!-- 中心点X --> cy="100" <!-- 中心点Y --> rx="100" <!-- 水平半径 --> ry="50" <!-- 垂直半径 --> fill="#9b59b6"/>

4. 直线<line>

<line x1="10" <!-- 起点X --> y1="10" <!-- 起点Y --> x2="190" <!-- 终点X --> y2="190" <!-- 终点Y --> stroke="black" <!-- 直线必须设置stroke --> stroke-width="2"/>

5. 折线<polyline>(不闭合)

<polyline points="10,10 50,50 90,10 130,50" <!-- 坐标点序列 --> fill="none" <!-- 通常不填充 --> stroke="#e74c3c" stroke-width="3" stroke-linecap="round"/> <!-- 端点圆形 -->

6. 多边形<polygon>(自动闭合)

<polygon points="100,10 40,180 190,60 10,60 160,180" <!-- 五角星坐标 --> fill="#f1c40f" stroke="#f39c12" stroke-width="2"/>

7. 路径<path>(最强大)

<path d="M 10,10 <!-- 移动到起点 --> L 100,10 <!-- 画直线到 --> L 100,100 <!-- 继续画线 --> Q 150,150 200,100 <!-- 二次贝塞尔曲线 --> Z" <!-- 闭合路径 --> fill="#2ecc71" stroke="#27ae60"/>

路径指令速记:

  • M/m:移动画笔

  • L/l:画直线

  • H/h:水平线

  • V/v:垂直线

  • C/c:三次贝塞尔曲线

  • A/a:画圆弧

  • Z/z:闭合路径

七、🎨 样式与美化

颜色填充与边框

<!-- 多种颜色表示方式 --> <circle fill="red" /> <!-- 颜色名称 --> <rect fill="#00ff00" /> <!-- 十六进制 --> <ellipse fill="rgb(0, 0, 255)" /> <!-- RGB值 --> <polygon fill="rgba(255, 0, 0, 0.5)" /> <!-- 带透明度 --> <!-- 边框样式控制 --> <rect stroke="#333" <!-- 边框颜色 --> stroke-width="4" <!-- 边框宽度 --> stroke-dasharray="5,3" <!-- 虚线:5像素实线,3像素间隔 --> stroke-linecap="round" <!-- 端点圆角 --> stroke-linejoin="round"/> <!-- 转角圆角 -->

渐变填充

<!-- 定义线性渐变 --> <defs> <!-- 定义可复用内容 --> <linearGradient id="sunset" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" stop-color="#ff9a9e" /> <stop offset="100%" stop-color="#fad0c4" /> </linearGradient> </defs> <!-- 使用渐变 --> <rect width="200" height="100" fill="url(#sunset)" />

八、✍️ 文本处理

<text x="100" <!-- 文本起点X --> y="50" <!-- 文本起点Y --> font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="24" font-weight="bold" fill="#2c3e50" text-anchor="middle" <!-- 水平对齐:start|middle|end --> dominant-baseline="middle"> <!-- 垂直对齐 --> SVG文本示例 </text>

九、🧩 组织与复用

分组管理

<!-- 分组:批量管理多个元素 --> <g id="cloud" fill="white" stroke="#bdc3c7" stroke-width="2" transform="translate(50, 50) scale(0.8)"> <ellipse cx="50" cy="30" rx="30" ry="20"/> <ellipse cx="80" cy="30" rx="25" ry="15"/> <ellipse cx="20" cy="30" rx="25" ry="15"/> </g> <!-- 复制使用 --> <use href="#cloud" x="100" y="0"/>

定义与引用

<defs> <!-- 定义但不显示 --> <circle id="dot" r="5" fill="#e74c3c"/> </defs> <!-- 多处引用 --> <use href="#dot" x="10" y="10"/> <use href="#dot" x="30" y="30"/> <use href="#dot" x="50" y="50"/>

十、⚡ 动画与交互

CSS动画

<style> .pulse { animation: heartbeat 1.5s ease-in-out infinite; } @keyframes heartbeat { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } </style> <circle class="pulse" cx="100" cy="100" r="40" fill="#e74c3c"/>

JavaScript交互

<!-- 直接事件绑定 --> <rect id="btn" width="120" height="40" rx="8" fill="#3498db" onclick="this.style.fill='#2980b9'" onmouseover="this.style.cursor='pointer'" onmouseout="this.style.fill='#3498db'"/> <text x="60" y="25" text-anchor="middle" fill="white">点击我</text>

十一、实战示例:绘制一个笑脸

<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg"> <!-- 渐变背景 --> <defs> <radialGradient id="bgGradient" cx="50%" cy="50%" r="50%"> <stop offset="0%" stop-color="#ffeaa7"/> <stop offset="100%" stop-color="#fab1a0"/> </radialGradient> </defs> <!-- 脸部 --> <circle cx="100" cy="100" r="80" fill="url(#bgGradient)" stroke="#e17055" stroke-width="3"/> <!-- 左眼 --> <circle cx="70" cy="80" r="12" fill="#2d3436"/> <circle cx="70" cy="80" r="4" fill="white"/> <!-- 右眼 --> <circle cx="130" cy="80" r="12" fill="#2d3436"/> <circle cx="130" cy="80" r="4" fill="white"/> <!-- 微笑的嘴巴 --> <path d="M 60,120 Q 100,170 140,120" fill="none" stroke="#d63031" stroke-width="4" stroke-linecap="round"/> <!-- 腮红 --> <circle cx="60" cy="100" r="15" fill="#ff7675" opacity="0.3"/> <circle cx="140" cy="100" r="15" fill="#ff7675" opacity="0.3"/> </svg>

十二、Vue 文件中使用 SVG

<template> <div class="container"> <!-- 不需要写 xmlns,Vue 会自动添加 --> <svg width="200" height="200" class="smiley" @click="handleSmileyClick" > <circle cx="100" cy="100" r="80" fill="#FFD700"/> <circle cx="70" cy="80" r="12" fill="black"/> <path d="M 60,120 Q 100,170 140,120" fill="none" stroke="black" stroke-width="4"/> </svg> <!-- 可以绑定 Vue 的数据和事件 --> <svg width="100" height="100"> <circle :cx="circleX" :cy="50" :r="radius" :fill="circleColor"/> </svg> </div> </template> <script setup> import { ref } from 'vue' const circleX = ref(50) const radius = ref(40) const circleColor = ref('#3498db') const handleSmileyClick = () => { circleColor.value = '#e74c3c' // 点击后变色 } </script> <style scoped> .smiley { cursor: pointer transition: transform 0.3s } .smiley:hover { transform: scale(1.1) } </style>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 5:24:25

主流智能音箱无法控制你的设备?教你自建高兼容性智能家居Agent

第一章&#xff1a;主流智能音箱的兼容性困境随着智能家居生态的快速发展&#xff0c;主流智能音箱如Amazon Echo、Google Nest和Apple HomePod已成为家庭控制中枢。然而&#xff0c;尽管这些设备在语音识别与交互体验上表现优异&#xff0c;其背后的兼容性问题却日益凸显&…

作者头像 李华
网站建设 2026/5/1 5:25:25

实时响应不达标?5步诊断法快速定位工业控制Agent性能瓶颈

第一章&#xff1a;实时响应不达标的根源剖析在构建高并发、低延迟的现代Web应用时&#xff0c;实时响应性能成为衡量系统健壮性的核心指标。然而&#xff0c;许多系统在实际运行中频繁出现响应延迟、消息积压甚至服务不可用等问题。深入分析其背后的技术成因&#xff0c;有助于…

作者头像 李华
网站建设 2026/5/1 5:21:32

ET框架UI事件系统实战:从委托机制到高效交互的深度解析

ET框架UI事件系统实战&#xff1a;从委托机制到高效交互的深度解析 【免费下载链接】ET Unity3D 客户端和 C# 服务器框架。 项目地址: https://gitcode.com/GitHub_Trending/et/ET 在Unity游戏开发中&#xff0c;构建一个响应迅速、结构清晰的用户界面是每个开发者的核心…

作者头像 李华
网站建设 2026/5/1 5:24:19

Ventoy终极使用手册:告别传统启动盘制作困境

Ventoy终极使用手册&#xff1a;告别传统启动盘制作困境 【免费下载链接】Ventoy 一种新的可启动USB解决方案。 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 还在为每次重装系统都要重新制作启动盘而烦恼吗&#xff1f;还在为U盘空间无法同时容纳多个ISO镜…

作者头像 李华
网站建设 2026/5/1 5:27:51

集体好奇心与团队成员的角色扮演

集体好奇心与团队成员的角色扮演 关键词:集体智慧、角色动力学、团队协作、认知多样性、创新机制、协同效应、敏捷开发 摘要:本文探讨了现代技术团队中集体好奇心与角色分配的协同演化机制。通过构建基于角色理论的团队动力学模型,结合多智能体仿真系统,揭示了认知多样性对…

作者头像 李华
网站建设 2026/4/23 12:31:45

Kotaemon SDK 开发指南:Python客户端封装实践

Kotaemon SDK 开发指南&#xff1a;Python客户端封装实践 在企业级智能对话系统日益普及的今天&#xff0c;一个常见的困境是&#xff1a;尽管大语言模型&#xff08;LLM&#xff09;本身具备强大的生成能力&#xff0c;但在真实业务场景中&#xff0c;直接调用模型往往无法满足…

作者头像 李华