svg精选推荐:10大高质量矢量图形资源
与前端实战应用全解

从零基础到进阶实战,系统梳理svg的核心语法、资源获取、动画技巧与项目落地路径——适合前端开发者、UI设计师与所有对矢量图形感兴趣的学习者。

✓ 官方渠道整理 ✓ 持续更新维护 ✓ 实操代码示例 ✓ 全端覆盖
14 深度栏目
10 精选资源站
4.9★ 读者评分
5年+ svg实战经验
现代前端开发工作台上展示svg矢量图形代码与图形预览,砖红色主题配色,画面专业感强,适合svg教程封面
svg矢量图形:无损缩放、文件轻量、完全可编程——前端开发者的必备格式
专题活动

svg专题与活动专区

围绕svg的进行中专题与限时活动,持续更新,欢迎参与。

🔥 进行中

svg动画30天挑战

每天一个svg动画案例,从简单过渡到复杂交互,配套源码与讲解,适合有基础的开发者快速提升。

✨ 新上线

svg图标系统搭建实战营

从零搭建一套团队级svg图标库,含sprite合并、symbol复用、自动化构建全流程,限时开放报名。

🎯 热门

svg与CSS动画性能对比评测

实测三种svg动画方案在不同设备上的帧率表现,附完整测试数据与选型建议,已有超过2000人参与讨论。

🌙 晚间专场

svg路径命令直播解析

每周四晚8点,深度拆解贝塞尔曲线与复杂路径绘制技巧,现场答疑,多语种字幕支持。

🔥 进行中

2026年度svg资源评选

社区投票评选年度最佳svg图标库与插图资源站,已收录候选平台10个,欢迎投票与推荐。

✨ 新上线

svg无障碍访问最佳实践专题

系统整理title、desc、role、aria属性的正确写法,含可复用代码片段,面向注重可访问性的前端团队。

基础认知

什么是svg?定义、历史与核心优势

一句话先说结论:svg(Scalable Vector Graphics,可缩放矢量图形)是一种基于XML的开放标准图像格式,任意尺寸缩放都不失真,文件本身是纯文本、可被CSS和JS完全控制——这是它区别于PNG、JPG等位图格式的根本所在。

svg的本质:用数学描述图形

位图格式(PNG、JPG)存储的是像素矩阵——把图像切成若干个小方格,每格记录一个颜色值。放大到一定倍数,你就会看到锯齿。svg不一样,它存储的是图形的"描述指令":一个圆心在(50,50)、半径为40的圆,用一行代码就能表达,浏览器拿到这段描述之后自己去渲染,无论是在72dpi的屏幕还是300dpi的印刷机上,渲染结果都是数学上精确的曲线,永远清晰。这就是"可缩放"三个字的真正含义。

svg的文件结构是XML,打开任何一个.svg文件,你看到的是可读的标签和属性,而不是乱码的二进制数据。这意味着你可以直接用文本编辑器修改颜色、调整路径、添加动画,不需要安装任何图形软件。对前端开发者来说,这一点极其重要——svg可以直接内联进HTML,成为DOM的一部分,CSS可以控制它的样式,JS可以操作它的节点,这是任何位图格式都做不到的。

svg的诞生背景与标准演进

svg规范由W3C于1999年首次发布,最初目标是为Web提供一种开放的矢量图形标准,与当时Macromedia的Flash竞争。Flash虽然功能强大,但是专有格式、需要插件、安全问题频出。svg走了完全不同的路:开放标准、浏览器原生支持、无需插件。2011年svg 1.1成为正式推荐标准,目前主流浏览器对svg 1.1的支持覆盖率超过98%(Can I Use数据)。svg 2.0规范目前仍在草案阶段,引入了更多CSS集成特性,但实际项目中svg 1.1已经足够应对绝大多数场景。

Flash在2020年底彻底退出历史舞台,而svg活得越来越好。现代设计工具(Figma、Sketch、Illustrator)都以svg作为矢量导出的首选格式;主流图标库(Heroicons、Tabler、Phosphor)全部基于svg;Progressive Web App的图标推荐用svg;甚至连favicon(网站图标)也开始推荐用svg格式。可以说,svg已经从"备选方案"变成了现代Web开发的基础设施。

svg相较位图格式的核心竞争力

拿一个具体场景来说:你需要在一个响应式页面上放一个公司logo,这个logo要在手机屏幕(375px宽)和4K显示器(3840px宽)上都清晰显示。如果用PNG,你需要准备至少2-3套不同分辨率的图片(1x/2x/3x),总文件大小可能超过200KB。如果用svg,一个文件通常在5-20KB之间,任何分辨率都清晰,还能用CSS直接改变logo的颜色以适应深色模式。这个对比基本说明了svg的价值所在。

svg还有一个经常被忽视的优势:SEO友好性。内联svg的文本内容(包括title、desc标签的描述)可以被搜索引擎抓取;svg图标的alt属性和aria标签能提升页面的可访问性评分;svg文件体积小、加载快,直接改善Core Web Vitals指标。这些都是位图格式无法提供的附加价值。当然,svg也有局限:它不适合表现照片级别的复杂图像(那种场景WebP或AVIF更合适),复杂svg文件(节点数超过数千个)的渲染性能也需要关注。

浏览器支持率 约 98%+(现代浏览器)
典型svg图标文件大小 0.5 KB ~ 5 KB
SVGO压缩率 通常 40% ~ 75%
svg 1.1规范发布 2011年(W3C推荐标准)
适合图像类型 图标、插图、图表、Logo
不适合场景 照片、复杂纹理(节点数千+)

以上数字仅用于描述svg格式的典型规格范围,数据来源于行业通行经验与公开技术文档,不代表特定测试环境下的精确值。

语法基础

svg基础语法全解:标签、属性与文档结构

一句话先说结论:svg文件的核心是一个<svg>根元素,通过viewBox定义坐标系,通过width/height控制渲染尺寸——理解这三者的关系,是读懂任何svg文件的基础。

svg根元素与命名空间

每个svg文件都以<svg>根元素开始。当svg作为独立文件(.svg)使用时,需要声明XML命名空间:xmlns="http://www.w3.org/2000/svg"。当svg内联进HTML5文档时,这个命名空间声明可以省略,浏览器会自动识别。根元素上还经常看到xmlns:xlink="http://www.w3.org/1999/xlink"——这是用于<use>元素的xlink命名空间,在svg 2.0中已被废弃,但为了兼容旧浏览器,很多工具导出的svg仍然带着它。

根元素的version属性(如version="1.1")在现代浏览器中没有实际作用,是历史遗留,SVGO默认会把它删掉。xml:space="preserve"属性控制空白字符的处理方式,一般也不需要手动设置。

viewBox与viewport:最容易混淆的概念

width和height定义svg的"视口"(viewport)——也就是它在页面上实际占据多大的空间。viewBox定义svg内部坐标系的范围,格式是viewBox="minX minY width height"。举个具体例子:一个svg的width="200" height="200" viewBox="0 0 100 100",意味着svg在页面上占200×200像素,但内部坐标系是100×100单位——所有内部元素的坐标都按这个100×100的坐标系来写,浏览器会自动把它缩放到200×200的视口里显示。

理解这个之后,你就能明白为什么大多数图标svg的viewBox="0 0 24 24"——内部坐标系是24单位见方,但你可以用CSS把它放大到任意尺寸。如果只写width和height而不写viewBox,svg就没有坐标系的概念,内部元素的尺寸和位置就是绝对像素值,无法随容器缩放。

preserveAspectRatio属性控制当viewBox的宽高比和viewport不一致时如何处理。默认值xMidYMid meet表示等比缩放并居中对齐,类似CSS的object-fit: contain。如果你想让svg铺满容器(类似object-fit: cover),可以用preserveAspectRatio="xMidYMid slice";如果想完全拉伸不保持比例,用preserveAspectRatio="none"。

svg常用属性速查

svg元素的样式属性有两种写法:一是作为XML属性直接写在标签上(如fill="red" stroke="#333"),二是通过CSS的style属性或外部样式表控制。两者优先级上CSS高于属性写法,这和HTML元素的规则一致。fill控制填充色,stroke控制描边色,stroke-width控制描边宽度,opacity控制整体透明度,fill-opacity和stroke-opacity分别控制填充和描边的透明度。transform属性支持translate()、rotate()、scale()、matrix()等变换函数,用法和CSS transform基本一致但语法略有差异(svg的rotate需要指定旋转中心:rotate(45 50 50)表示绕点(50,50)旋转45度)。

<!-- svg基础结构示例 --> <svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 24 24" fill="none" stroke="#B94040" stroke-width="2"> <!-- 内部图形元素写在这里 --> <circle cx="12" cy="12" r="10"/> <path d="M12 8v4l3 3"/> </svg>
图形绘制

svg常用图形元素详解:rect/circle/path等

矩形(rect)与圆形(circle)

<rect>是最基础的图形元素,必填属性是x(左上角横坐标)、y(左上角纵坐标)、width和height。加上rx和ry属性可以做圆角矩形——如果只写rx,ry默认等于rx,效果等同于CSS的border-radius。一个常见用法:<rect x="2" y="2" width="20" height="20" rx="4"/>,这就是一个带4单位圆角的矩形,在24×24的viewBox里刚好留出2单位的内边距。

<circle>用cx和cy指定圆心坐标,r指定半径。<ellipse>是椭圆,多了rx和ry两个半径属性,分别控制水平和垂直方向的半径。如果你想画一个精确居中的圆形图标,在viewBox="0 0 24 24"的坐标系里,<circle cx="12" cy="12" r="10"/>就是标准写法——圆心在正中,半径10,四周留出2单位边距。

线段、折线与多边形

<line>画一条直线,需要起点x1,y1和终点x2,y2。注意<line>没有填充(fill对它无效),只有描边(stroke)。<polyline>画折线,points属性是一串坐标对,格式如"0,0 10,20 20,0",浏览器会依次连接这些点。<polygon>和<polyline>几乎一样,区别是polygon会自动闭合(最后一个点和第一个点连起来),适合画三角形、五角星等封闭多边形。一个等边三角形的写法:<polygon points="12,2 22,20 2,20"/>,在24×24的坐标系里居中放置。

文本元素(text)

<text>元素让svg可以包含可缩放的矢量文字。基本用法:<text x="12" y="16" text-anchor="middle" font-size="12">Hello</text>。text-anchor控制文字的对齐基准点(start/middle/end,类似CSS的text-align);dominant-baseline控制垂直基线对齐。svg文字的一个重要特性是它是真实的文本节点,可以被搜索引擎抓取、可以被屏幕阅读器读取,这对SEO和无障碍访问很有价值。但要注意:svg文字的字体渲染依赖系统字体,如果你需要特定字体,要么内嵌字体文件,要么把文字转换成路径(但转成路径后就不再是可抓取的文本了)。

实操演示:用svg绘制一个带圆角的图标卡片
svg代码
<svg viewBox="0 0 80 80" width="80" height="80"> <!-- 圆角背景 --> <rect x="4" y="4" width="72" height="72" rx="16" fill="#B94040"/> <!-- 中心圆形 --> <circle cx="40" cy="36" r="14" fill="none" stroke="#FFF8F0" stroke-width="3"/> <!-- 文字标签 --> <text x="40" y="64" text-anchor="middle" fill="#FFF8F0" font-size="10">svg</text> </svg>
渲染结果
svg图标演示 svg

任意缩放,永不失真

核心进阶

svg路径命令深度拆解:M/L/C/Z等指令全攻略

一句话先说结论:svg的<path>元素是整个svg体系中最强大也最复杂的元素,它的d属性用一串命令描述任意形状的轮廓——掌握M、L、C、A、Z这几个核心命令,你能画出任何图形。

移动与直线命令:M、L、H、V

M(Move to)是"抬笔移动",不画线,只是把当前绘图点移到指定坐标。每条路径都必须以M开始。L(Line to)从当前点画一条直线到目标坐标。H(Horizontal line)画水平线,只需要指定目标x坐标;V(Vertical line)画垂直线,只需要指定目标y坐标。命令字母大写表示绝对坐标,小写表示相对坐标(相对于当前点的偏移量)。比如M 10 10 L 50 10 L 50 50 Z画一个直角三角形:先移到(10,10),画线到(50,10),再画线到(50,50),Z(Close path)自动连回起点闭合路径。

贝塞尔曲线命令:C、S、Q、T

C(Cubic Bézier)是三次贝塞尔曲线,格式是C x1 y1 x2 y2 x y——两个控制点加一个终点。控制点决定曲线的弯曲方向和程度,终点是曲线的结束位置。如果你在设计软件里拖动过"曲线手柄",那个手柄的端点就是控制点。S(Smooth cubic Bézier)是C的简化版,只需要一个控制点,另一个控制点自动取前一段曲线终点的镜像,用于平滑连接多段曲线。Q(Quadratic Bézier)是二次贝塞尔曲线,只有一个控制点,弯曲程度比三次贝塞尔曲线更简单规则,格式是Q x1 y1 x y。

一个实际例子:绘制一个平滑的波浪线,可以用M 0 20 C 10 0 20 40 30 20 S 50 0 60 20——先移到(0,20),用三次贝塞尔曲线画到(30,20),控制点分别在(10,0)和(20,40),形成一个S形弯曲;然后用S命令平滑延续到(60,20)。这种写法比用多段直线模拟曲线的路径数据量小得多,渲染也更平滑。

圆弧命令:A

A(Arc)是路径命令里参数最多的一个:A rx ry x-rotation large-arc-flag sweep-flag x y。rx和ry是椭圆的两个半径;x-rotation是椭圆相对x轴的旋转角度;large-arc-flag控制画大弧(1)还是小弧(0);sweep-flag控制顺时针(1)还是逆时针(0);最后两个是终点坐标。这个命令用来画饼图的扇形、进度条的圆弧等场景非常合适。如果遇到用A命令画圆的情况,记住一个技巧:用两个半圆弧拼成一个完整的圆(因为起点和终点相同时A命令会退化为不画任何东西)。

M/L/H/V:直线命令

M抬笔移动,L画直线,H/V画水平/垂直线。大写绝对坐标,小写相对坐标。是所有路径的基础。

基础常用

C/S/Q/T:贝塞尔曲线

C三次贝塞尔(2个控制点),Q二次贝塞尔(1个控制点),S/T是对应的平滑连续版本,用于流畅曲线。

进阶曲线

A:圆弧命令

参数最多的命令,控制椭圆弧的半径、旋转、大弧/小弧、顺逆时针方向,适合饼图扇形与进度圆弧。

圆弧图表

Z:闭合路径

从当前点画一条直线回到路径起点,自动闭合图形。配合fill属性使用,是绘制封闭图形的标准结尾。

基础闭合
动画实现

svg动画实现方案怎么选?SMIL、CSS与JS三种方式对比

一句话先说结论:简单图标动效首选CSS动画(性能最优、代码最简),需要精细控制时序或路径动画时用JS+GSAP,SMIL在现代项目中已基本可以不用——除非你需要无JS环境下的路径描边动画。

CSS动画:最推荐的方案

CSS动画操控svg元素的transform、opacity这两个属性时,现代浏览器会把动画提升到GPU合成层(Compositor Layer),完全绕过主线程,帧率通常稳定在60fps甚至更高。写法和普通CSS动画完全一样,只是选择器指向svg内部元素。比如让一个圆形图标持续旋转:给circle元素加animation: spin 2s linear infinite,然后定义@keyframes spin { to { transform: rotate(360deg); } }即可。需要注意的是,svg元素的transform-origin在不同浏览器中历史上有过兼容问题,现代浏览器(Chrome 90+、Firefox 88+)已经修复,但如果要兼容旧版本,可以用transform-box: fill-box配合使用。

CSS动画的局限是:它不能直接动画svg特有的属性,比如d(路径数据)、r(圆半径)等。这些属性需要用SMIL或JS来动画。另外,CSS动画的时间控制相对粗糙,如果需要复杂的 序列编排(多个元素按顺序依次动画),CSS单独处理会比较繁琐,这时候JS方案更合适。

SMIL动画:了解即可,慎用于新项目

SMIL(Synchronized Multimedia Integration Language)是svg内置的动画规范,直接写在svg标签内部,不依赖CSS或JS。典型用法是<animate>、<animateTransform>、<animateMotion>等元素。SMIL的优势是:可以动画svg特有属性(比如路径的d属性实现形变动画),无需外部依赖,在纯svg文件中也能工作。但缺点很明显:Chrome团队曾在2015年宣布废弃SMIL(后来撤回了这个决定),IE全系列不支持,语法冗长难维护,调试工具支持也很弱。如果你的项目需要兼容IE11,SMIL完全不可用;如果是现代浏览器环境,CSS+JS组合能覆盖SMIL的所有场景,而且更好维护。

JS动画:复杂场景的最佳选择

JS动画方案最灵活,可以动画任何svg属性,可以响应用户交互,可以精确控制时序。原生JS用requestAnimationFrame配合直接操作DOM属性,性能可控但代码量大。实际项目中更推荐使用GSAP(GreenSock Animation Platform)——它对svg动画有专门的优化,处理transform-origin的跨浏览器问题,支持路径动画(MotionPath插件),时间线(Timeline)API让复杂序列动画的编排变得直观。GSAP的免费版已经能满足大多数需求,MorphSVG(路径形变)和DrawSVG(路径描边动画)是付费插件但效果极佳。

方案 性能 兼容性 可动画属性 适用场景 推荐度
CSS动画 最优(GPU合成) Chrome/FF/Safari全支持 transform/opacity为主 图标动效、过渡、加载动画 ★★★★★
JS + GSAP 优(可优化) 全浏览器 任意属性 复杂序列、交互动画、路径形变 ★★★★★
SMIL 中(主线程) 不支持IE,Chrome曾宣布废弃 svg原生属性 纯svg文件内嵌动画(慎用) ★★☆☆☆
工程实践

svg图标系统搭建:sprite合并与symbol复用方案

为什么需要svg图标系统

一个中型前端项目里,图标数量通常在50到200个之间。如果每个图标都单独用<img>标签引入,就会产生大量HTTP请求,即使是HTTP/2多路复用也会有额外开销。更大的问题是维护:图标颜色需要跟随主题变化时,<img>引入的svg无法用CSS控制内部颜色。svg图标系统解决的就是这两个问题:把所有图标合并成一个文件(减少请求),用<symbol>和<use>实现复用(保持CSS可控性)。

构建svg图标系统的核心思路是:把每个图标定义为一个<symbol>元素(带唯一id),统一放在页面顶部一个隐藏的svg容器里;需要使用图标时,用<use href="#icon-id"/>引用。这样每个图标只定义一次,可以在页面任意位置多次复用,每次使用都可以通过CSS独立控制颜色和尺寸。

symbol + use的标准写法

在HTML的<body>开头放一个隐藏的svg sprite容器,里面定义所有图标的<symbol>。每个symbol需要设置id(用于引用)和viewBox(定义坐标系),但不需要width和height(这些在使用时指定)。使用时写<svg width="24" height="24"><use href="#icon-home"/></svg>即可。注意:旧版写法用xlink:href,现代浏览器(Chrome 53+、Firefox 55+)支持直接用href,新项目可以直接用href。

颜色控制方面,如果图标的fill和stroke属性设置为currentColor,那么在使用<use>时,只需要在外层<svg>或其父元素上设置CSS的color属性,图标颜色就会跟随变化。这是实现主题换色(深色模式切换)最简洁的方式,不需要任何JS,纯CSS即可完成。

自动化构建:从设计稿到图标库

手动维护svg sprite很繁琐,实际项目中应该用构建工具自动化。Vite生态有vite-plugin-svg-icons,Webpack有svg-sprite-loader,两者都能监听图标目录,自动把新增的svg文件合并进sprite。工作流程是:设计师在Figma里导出svg图标到指定目录,构建工具自动处理,开发者直接用组件引用图标名称即可,整个过程无需手动操作。如果是React项目,@svgr/webpack可以把svg文件直接转成React组件,每个图标是一个独立组件,支持props传入颜色和尺寸,是另一种流行的图标系统方案。

精选榜单

10大高质量svg资源网站精选推荐

经过实际使用筛选,以下平台在图标质量、授权清晰度和使用便利性上表现突出。信息以公开资料为准,授权条款请以各平台官网为准。

01
🏆 冠军推荐

SVG Repo

收录超过50万个免费svg图标和插图,支持在线编辑颜色后直接下载,大部分图标采用CC0或MIT授权,商用无忧。搜索功能强大,按风格、颜色、类别筛选都很方便。

免费50万+图标可商用
9.8
02
🔥 热门

Heroicons

由Tailwind CSS团队出品,提供Outline(线性)和Solid(填充)两套风格,共约290个图标,MIT授权。风格极简统一,与Tailwind项目无缝配合,也适合任何现代Web项目。

MIT授权双风格290+图标
9.6
03
✨ 新上线

Tabler Icons

超过5000个开源svg图标,MIT授权,风格统一的细线设计,覆盖UI、品牌、箭头、图表等几乎所有常用场景。提供React、Vue组件版本,也支持直接下载svg文件。

5000+图标MIT组件版
9.5
04
📌 编辑首选

Undraw

专注于插图(Illustration)而非图标,提供数百张扁平风格的场景插图,最大特色是可以在线实时修改主题色后下载,完美适配品牌色。MIT授权,商用免费。

插图主题色定制免费商用
9.4
05
🔥 热门

Phosphor Icons

提供Regular、Bold、Light、Thin、Fill、Duotone六种粗细风格,同一图标可以切换风格,灵活度极高。MIT授权,支持React、Vue、Web Components多种框架。

6种风格MIT多框架
9.3
06

Feather Icons

287个简洁的开源svg图标,MIT授权,是很多设计系统的首选基础图标集。风格极简,2px描边,适合需要轻量感的UI设计。

极简风格MIT
9.1
07

Storyset

提供多种风格(Amico、Bro、Cuate、Pana、Rafiki)的场景插图,支持在线定制颜色、隐藏/显示图层后下载svg,免费版需署名,付费版可商用免署名。

多风格插图可定制
9.0
08

Lucide

Feather Icons的社区维护分支,图标数量已扩展到1000+,持续更新,MIT授权。如果你喜欢Feather的风格但需要更多图标,Lucide是最佳替代。

1000+图标MIT持续更新
8.9
09

Iconfont(阿里巴巴)

国内最大的svg图标库平台,收录数百万图标,支持在线生成svg sprite、symbol代码,也支持Font class方式。部分图标需要授权,使用前务必确认授权范围。

国内首选百万图标注意授权
8.8
10

Flaticon

综合性图标平台,提供svg、PNG、EPS等多种格式,图标数量庞大,但免费使用需署名,商用需付费订阅。适合需要大量不同风格图标的设计项目。

综合平台多格式付费商用
8.5
工具教程

主流设计工具导出svg教程:Figma/Illustrator/Sketch

Figma导出svg:最推荐的工作流

Figma是目前最流行的UI设计工具,导出svg的操作非常直观。选中要导出的图层或组件,在右侧面板底部找到「Export」区域,点击「+」添加导出配置,格式选择SVG。Figma提供两个重要选项:「Include id attribute」(是否在导出的svg中保留图层名称作为id属性,方便JS操作)和「Outline text」(是否把文字转成路径,建议:如果svg要在不同环境使用,勾选此项避免字体缺失问题;如果svg需要保持文字可编辑和可搜索,不勾选)。

Figma导出svg的一个常见问题是:复杂图形可能包含大量冗余的clip-path和mask,导致文件体积偏大。解决方法是在导出前先「Flatten」(压平)图层(快捷键Ctrl+E / Cmd+E),把多个图层合并成单一路径,再导出。导出后建议用SVGO进一步压缩,通常能再减少30%~50%的体积。

Adobe Illustrator导出svg:老牌工具的注意事项

在Illustrator里,导出svg有两个入口:「文件 > 导出 > 导出为」选择SVG格式,或「文件 > 存储为」选择SVG。推荐用「导出为」,可以选择「使用画板」确保导出的svg尺寸和画板一致。在SVG选项对话框里,「样式」建议选「内联样式」(把样式写成属性,兼容性最好);「字体」选「SVG」或「转换为轮廓」;「图像」选「嵌入」(避免外链图片在其他环境失效);「CSS属性」选「样式属性」。

Illustrator导出的svg有一个著名的问题:会带大量Adobe专有的元数据注释(<!-- Generator: Adobe Illustrator... -->)和冗余属性,文件体积通常比Figma导出的大得多。这些冗余内容对渲染没有任何作用,用SVGO处理后可以大幅瘦身。另外,Illustrator的坐标系和svg标准坐标系有时会有偏差,导出后建议在浏览器里验证渲染效果。

Sketch导出svg:Mac用户的选择

Sketch的svg导出相对简洁。选中图层,在右侧「Export」面板添加导出配置,选择SVG格式即可。Sketch有一个「Flatten Bitmap」选项,对于包含位图的图层,可以选择是否把位图嵌入svg(Base64编码)。Sketch导出的svg通常比较干净,但对于复杂的渐变和混合模式,有时会转换成位图嵌入,失去矢量特性,这是需要注意的地方。

  1. 1

    选中目标图层或组件

    在Figma画布上点击选中要导出的图形,确保选中的是最终要导出的那一层(不是父框架)。

    耗时约1分钟基础操作
  2. 2

    添加导出配置

    右侧面板滚动到底部,点击「Export」区域的「+」按钮,在格式下拉菜单中选择SVG。

    耗时约30秒
  3. 3

    按需勾选选项

    根据使用场景决定是否勾选「Outline text」(文字转路径)和「Include id attribute」(保留图层id)。

    关键步骤
  4. 4

    导出并用SVGO优化

    点击「Export [图层名]」按钮下载svg文件,然后用SVGO命令行工具压缩,典型可减少40%~70%体积。

    建议必做压缩40%~70%
格式选型

svg与PNG、WebP、GIF格式深度对比:怎么选才不踩坑?

一句话先说结论:图标、Logo、插图、图表首选svg;照片、复杂纹理用WebP;需要广泛兼容的静态图用PNG;动图优先考虑CSS/svg动画,实在需要位图动图再考虑WebP动图,GIF基本可以退出历史舞台了。

维度 svg PNG WebP GIF
缩放质量 任意缩放无损 放大失真 放大失真 放大失真
文件体积(图标) 极小(约1~5KB) 中等(需多套分辨率) 小(约PNG的25%~35%) 大(色彩限256色)
动画支持 CSS/JS/SMIL 不支持 支持动态WebP 支持(帧动画)
CSS/JS可控 完全可控 不可控 不可控 不可控
透明度 支持 支持(Alpha通道) 支持 仅二值透明
照片表现 不适合 可用(体积大) 最佳 色彩受限
SEO/无障碍 文本可抓取 依赖alt属性 依赖alt属性 无文本信息
❌ 使用PNG的问题

一个响应式Logo需要准备logo@1x.png(约20KB)、logo@2x.png(约60KB)、logo@3x.png(约120KB)三套文件,总计约200KB,且在高DPI屏幕上仍可能轻微模糊。

✅ 改用svg后

一个logo.svg文件约3~8KB,任何分辨率(手机/4K显示器/印刷)都完美清晰,还能用CSS一行代码切换深色模式颜色,维护成本大幅降低。

嵌入技巧

svg在前端项目中的嵌入方式:img/inline/background全解

四种嵌入方式的核心差异

img标签是最简单的方式:<img src="icon.svg" alt="图标描述" width="24" height="24">。优点是简洁、有缓存、不污染DOM;缺点是无法用CSS控制svg内部元素的颜色,也无法触发svg内部的JS事件。适合纯展示性图标,不需要换色或交互的场景。

inline svg是把svg代码直接写进HTML:<svg>...</svg>。优点是完全可控——CSS可以修改fill/stroke,JS可以操作每个节点,动画可以由外部CSS触发;缺点是svg代码混入HTML,增加HTML体积,且无法被浏览器缓存(每次页面加载都重新传输)。适合需要主题换色、交互或动画的图标。

CSS background-image:background-image: url('icon.svg')。优点是纯装饰性,不影响DOM结构;缺点是屏幕阅读器无法识别,无法控制内部颜色(除非用CSS的filter属性间接调色)。适合纯装饰性背景图案,不推荐用于有语义的图标。

use + symbol方案(前面已详述):兼顾性能(sprite合并减少请求)和可控性(CSS可控颜色),是图标系统的最佳实践。适合中大型项目的图标库管理。

SEO影响对比

从SEO角度看,inline svg的<title>和<desc>标签内容可以被搜索引擎抓取,是最友好的方式。img标签的alt属性是搜索引擎识别图像内容的主要依据,务必写有意义的描述性文字。CSS background-image对搜索引擎几乎透明,不要用它来放有实质内容的图像。

性能优化

svg性能优化实战:压缩、精简与懒加载策略

SVGO:svg优化的标准工具

SVGO(SVG Optimizer)是Node.js生态里最成熟的svg优化工具,通过一系列可配置的插件对svg进行无损或有损压缩。安装后,最基础的用法是在终端里指定输入和输出文件路径执行优化命令。SVGO 3.x版本改为纯ESM模块,配置文件格式也有变化,如果你从旧版迁移需要注意。典型的优化操作包括:删除注释、删除元数据、删除冗余属性、合并路径、精简数值精度(把12.345678精简到12.35,对视觉效果几乎无影响但能减少字节数)、移除不可见元素等。实测中,设计软件导出的svg经SVGO处理后,体积通常减少40%~75%。

需要注意的是,SVGO的某些插件可能会破坏svg的特定功能。比如removeViewBox插件会删除viewBox属性,这会导致svg失去响应式缩放能力,建议在配置中明确禁用这个插件。cleanupIds插件会重命名或删除id属性,如果你的svg里有通过id引用的元素(如<use href="#icon">或CSS选择器),也要谨慎使用。最稳妥的做法是先用默认配置跑一遍,在浏览器里验证效果,再根据需要调整插件配置。

路径节点精简:从源头控制体积

svg文件体积大,很多时候不是因为元数据冗余,而是路径本身的节点数量太多。在Illustrator里,用「对象 > 路径 > 简化」功能可以减少路径节点数量,通常设置到90%~95%的精度就能在视觉上看不出差异,但节点数可能减少30%~50%。Figma里,「Flatten」操作后可以用「Simplify Path」(在路径编辑模式下)减少节点。对于从扫描或位图转换来的svg(比如用Potrace或Inkscape的位图转矢量功能),路径节点数量往往极多,需要重点处理。

懒加载与按需加载

对于<img src="icon.svg">方式引入的svg,可以直接用loading="lazy"属性实现浏览器原生懒加载,首屏以下的图标不会立即加载,改善LCP指标。对于inline svg,如果图标数量很多,可以考虑把非首屏图标的svg代码用JS动态插入(但要注意这会影响爬虫对内容的抓取)。更推荐的方案是:首屏图标用inline svg,非首屏图标用img+lazy loading,兼顾性能和可控性。

发展历程

svg技术发展大事记

W3C发布svg 1.0草案
svg规范首次以W3C草案形式公开,目标是为Web提供开放的矢量图形标准,与Flash竞争。
svg 1.0成为W3C正式推荐标准
svg 1.0正式获得W3C推荐标准地位,标志着矢量图形在Web标准体系中的正式确立。
svg 1.1第二版发布
svg 1.1 Second Edition成为推荐标准,修复了大量歧义,成为此后主流浏览器实现的基础版本,目前支持率超过98%。
Flash退出历史舞台,svg全面接棒
Adobe Flash Player于2020年12月31日正式停止支持,svg成为Web矢量图形与动画的唯一开放标准选择。
svg 2.0草案持续演进
svg 2.0引入更深度的CSS集成、几何属性CSS化等特性,部分特性已在Chrome/Firefox中实验性支持,正式标准仍在制定中。
避坑手册

svg常见报错与兼容性问题排查手册

svg显示为空白或不渲染

最常见的原因有三个:一是svg没有设置width和height,同时父容器也没有明确尺寸,导致svg渲染为0×0;解决方法是给svg或其父容器设置明确的尺寸,或者给svg加viewBox并用CSS设置width: 100%。二是svg的viewBox坐标系和内部图形的坐标不匹配,图形画在了可视区域之外;用浏览器开发者工具检查svg元素,临时给它加一个背景色,就能看到svg的实际渲染区域。三是服务器返回svg文件时MIME类型不正确(应该是image/svg+xml),导致浏览器拒绝渲染;检查服务器配置,确保.svg文件返回正确的Content-Type头。

svg颜色无法用CSS控制

如果你用<img>标签引入svg,CSS无法控制svg内部颜色,这是设计上的限制,不是bug。解决方案:改用inline svg,或者把svg的fill/stroke属性改为currentColor后用CSS的filter属性间接调色(filter: invert(1)可以反色,filter: hue-rotate(90deg)可以旋转色相,但精确控制颜色比较困难)。最干净的方案还是改用inline svg或use+symbol方式。

svg在iOS Safari上的兼容问题

iOS Safari对svg的支持总体良好,但有几个已知坑:foreignObject元素(在svg里嵌入HTML)在iOS Safari里支持不稳定,尽量避免使用;svg的filter属性(如feGaussianBlur模糊效果)在旧版iOS上性能很差,复杂滤镜会导致明显卡顿;clip-path在svg里的行为和CSS里略有差异,测试时要在真机上验证。另外,iOS Safari对svg动画中transform-origin的处理历史上有bug,配合transform-box: fill-box使用可以解决大多数情况。

无障碍与SEO

svg无障碍访问与SEO最佳实践

title与desc:svg的语义标签

inline svg里的<title>标签相当于图像的alt文本,屏幕阅读器会读取它;<desc>提供更详细的描述。标准写法是把<title>作为svg的第一个子元素,并给它一个id,然后在<svg>上用aria-labelledby引用这个id:<svg aria-labelledby="icon-title"><title id="icon-title">搜索图标</title>...</svg>。如果svg是纯装饰性的(比如背景花纹),应该加aria-hidden="true"让屏幕阅读器忽略它,避免读出无意义的内容。

对于图标按钮,如果<button>里只有一个svg图标没有文字,务必给button加aria-label属性描述按钮功能,同时给svg加aria-hidden="true"(因为button的aria-label已经提供了描述,不需要svg再重复)。这是无障碍访问的标准做法,也是Lighthouse无障碍评分的检查项之一。

role属性的正确使用

svg元素默认的ARIA角色是graphics-document,但在实际使用中,对于图标类svg,通常加role="img"更合适,配合aria-label或aria-labelledby使用。对于纯装饰性svg,加role="presentation"或aria-hidden="true"。对于交互式svg(如可点击的图表),需要根据具体交互类型选择合适的role(如role="button"、role="link"等)并确保键盘可访问(tabindex="0"加键盘事件处理)。

搜索数据

关于svg,全网在搜的几类需求

以下数据来自搜索引擎相关搜索(近30天印象量),帮你了解svg领域的真实搜索热点分布。

🔧 编辑与工具类需求
svg 编辑器
5,134
svg在线编辑
1,402
svg编辑器
569
boxy svg
262
在线svg编辑器
221
svg怎么编辑
246
svg编辑
265

「svg编辑器」以5,134的印象量高居榜首,是最集中的工具类需求,说明大量用户在寻找可用的svg编辑工具。

🔄 格式转换类需求
svg转png
4,701
svg to png
266
转svg
246
svgcode
390

「svg转png」以4,701的印象量位居第二,格式转换是仅次于编辑工具的核心需求,反映出大量用户需要在svg与位图之间互转。

📖 认知与格式了解类
svg是什么格式
2,693
svg是什么
492
svg格式
494
.svg
227
svg文件
348

「svg是什么格式」2,693次印象,说明仍有大量用户处于认知入门阶段,基础科普内容有很强的搜索需求。

🖼️ 预览、资源与图标类
open svg file
934
svg图片
879
svg silh
708
svg在线预览
330
svg图标
321
svg预览
295
svg repo
272
svgrepo
264

预览与资源获取需求分散但总量可观,「open svg file」以934次领跑,说明很多用户在寻找打开svg文件的方法。

数据来源:搜索引擎相关搜索,近30天印象量,仅供参考,实际数值可能随时间变化。

持续更新

svg专题最新更新流

08
2026·10

svg性能优化:SVGO 3.x完整配置指南,压缩率提升到75%的实战配置
👁 1.2万次浏览 · ❤️ 342 收藏 · ⏱ 阅读约8分钟

详解SVGO 3.x的插件体系变化与推荐配置,附可直接复用的配置文件。

🔥 热门
02
2026·10

svg动画实战:CSS stroke-dasharray路径描边动画从零实现
👁 8,900次浏览 · ❤️ 218 收藏 · ⏱ 阅读约6分钟

手把手演示用CSS动画实现svg路径描边效果,含完整代码与兼容性说明。

✨ 新上线
25
2026·09

2026年svg图标库横评:10大平台授权、质量与易用性深度测评
👁 1.5万次浏览 · ❤️ 467 收藏 · ⏱ 阅读约10分钟

实测对比SVG Repo、Heroicons、Tabler等10个平台的图标质量与授权条款。

🎯 热门
18
2026·09

svg图标系统搭建:Vite项目中vite-plugin-svg-icons最佳实践
👁 6,700次浏览 · ❤️ 189 收藏 · ⏱ 阅读约7分钟

从零搭建Vite项目的svg图标系统,含自动化构建与TypeScript类型支持。

✨ 新上线
10
2026·09

svg路径命令深度拆解:用可视化方式理解贝塞尔曲线控制点
👁 2.1万次浏览 · ❤️ 623 收藏 · ⏱ 阅读约12分钟

配合交互式演示,把C/S/Q/T命令的控制点机制讲得明明白白。

🔥 热门
01
2026·09

svg无障碍访问完整指南:title、desc、role与aria属性的正确写法
👁 4,300次浏览 · ❤️ 156 收藏 · ⏱ 阅读约5分钟

面向注重可访问性的前端团队,含可直接复用的代码片段与Lighthouse检查要点。

✨ 新上线
学习路径

svg学习路径与进阶资源推荐

入门阶段(约1~2周)

入门阶段的核心目标是理解svg的基本文档结构、常用图形元素和viewBox坐标系。推荐从MDN Web Docs的svg教程入手——MDN的svg文档是公认最权威的参考资料,覆盖从基础到进阶的所有知识点,且持续更新。入门阶段不需要记住所有属性,重点是能读懂一个svg文件的结构,能手写简单的矩形、圆形和路径,能理解viewBox和viewport的关系。每天花30~60分钟,用浏览器开发者工具实时修改svg属性观察效果,是最高效的入门方式。

入门阶段推荐的练习:从一个你喜欢的图标(比如Heroicons里的某个图标)开始,把它的svg代码复制出来,逐行读懂每个属性的含义,然后尝试修改颜色、尺寸、路径节点,观察变化。这个"拆解-修改-观察"的循环,比单纯看教程效率高得多。

进阶阶段(约1~2个月)

进阶阶段重点攻克路径命令(特别是贝塞尔曲线)、svg动画(CSS+JS两种方案)和svg图标系统搭建。路径命令推荐配合在线可视化工具(如svg-path-visualizer.netlify.app)学习,把抽象的坐标数字变成可见的图形,理解速度会快很多。动画部分推荐先把CSS动画的transform/opacity用熟,再学GSAP的基础Timeline API。图标系统搭建可以找一个真实项目练手,从零搭建一套包含20~30个图标的sprite系统,经历完整的"设计导出→SVGO压缩→sprite合并→组件封装"流程。

进阶阶段的权威参考资料:Sara Soueidan的博客(sarasoueidan.com)是svg领域最深度的技术博客之一,她对svg动画、无障碍访问和性能优化的文章值得反复阅读。CSS-Tricks的svg系列文章也是很好的补充。W3C的svg规范文档虽然枯燥,但遇到具体问题时查规范是最准确的。

高阶阶段:数据可视化与复杂动画

高阶阶段的方向主要有两个:一是基于svg的数据可视化(D3.js是这个领域的标准库,它直接操作svg DOM来渲染图表,理解svg是学D3的前提);二是复杂svg动画(GSAP的MorphSVG、DrawSVG、MotionPath插件,以及Three.js的svg渲染器)。这个阶段没有捷径,需要大量真实项目积累。建议找一个数据可视化或动画项目,用D3或GSAP从头实现,遇到问题查文档、查规范、查Stack Overflow,这个过程本身就是最好的高阶学习。

MDN Web Docs svg教程

最权威的svg参考文档,覆盖所有元素与属性,持续更新,中文版可用。入门到进阶全程可查。

免费权威中文可用

Sara Soueidan博客

svg领域最深度的技术博客,动画、无障碍、性能优化文章质量极高,是进阶必读资源。

进阶英文深度

GSAP官方文档

复杂svg动画的最佳工具,官方文档含大量可运行示例,MorphSVG和DrawSVG插件文档尤其值得精读。

动画进阶英文
编辑团队

内容审校团队

前端技术编辑林晓峰的头像照片,专注svg与CSS动画领域
林晓峰
高级前端技术编辑
专注前端开发与svg技术栈超过5年,主导本站svg教程体系建设,实测过数十款svg工具与图标库。
UI设计审校编辑陈雨萱的头像照片,专注矢量图形与设计系统
陈雨萱
UI设计审校编辑
资深UI设计师,熟悉Figma/Illustrator/Sketch三大工具的svg导出工作流,负责本站设计工具教程审校。
无障碍与SEO顾问王建国的头像照片,专注Web可访问性标准
王建国
无障碍与SEO顾问
深耕Web可访问性标准与搜索引擎优化,负责本站svg无障碍访问与SEO最佳实践内容的审核把关。

以上为用于说明内容分工的虚拟角色,不代表真实履历或机构。

编辑团队能力评估

常见问题

svg常见问题解答

覆盖正规性、安全性、使用门槛、效果与效率等决策阻力维度,帮你在使用svg前消除顾虑。

svg文件用什么软件打开和编辑?

svg文件本质是XML格式的纯文本,任何文本编辑器(记事本、VS Code、Sublime Text)都能打开并编辑。VS Code安装「SVG Preview」插件后可以实时预览,是开发者日常编辑的首选环境。

如果需要可视化编辑(拖拽节点、调整路径),推荐以下工具:Inkscape(免费开源,功能完整,支持Windows/Mac/Linux);Adobe Illustrator(行业标准,付费);Figma(在线工具,免费版够用);Boxy SVG(轻量在线编辑器,近30天搜索印象约262次,说明有一定用户基础)。浏览器直接把svg文件拖入标签页也能渲染预览,是最快的查看方式,无需安装任何软件。

值得一提的是,svg在线编辑(近30天搜索印象约1,402次)和svg编辑器(约5,134次)是搜索量最大的两类需求,说明很多用户在寻找无需安装的在线解决方案。svg-edit(github.com/SVG-Edit/svgedit)是一个完全免费的开源在线编辑器,功能基础但够用。

svg转PNG怎么操作最简单?

「svg转png」是近30天搜索印象约4,701次的高频需求,说明很多用户有这个实际场景。最简单的几种方式:

方式一:浏览器截图法——在浏览器里打开svg文件,用截图工具截取,适合对精度要求不高的场景,操作零门槛。

方式二:在线转换工具——Convertio、CloudConvert均支持svg转PNG,上传文件后可指定输出分辨率(建议选2x或3x倍率),文件大小通常在100KB以内时转换质量最佳,免费版有每日次数限制。

方式三:Inkscape命令行——安装Inkscape后,可以用命令行指定导出分辨率(如300dpi),适合批量转换场景,精度最高。

方式四:Figma导出——在Figma里打开svg,选择导出格式为PNG,设置2x或3x倍率,直接得到高清PNG,操作直观,是设计师最常用的方式。

svg动画和CSS动画哪个性能更好?

这个问题的答案取决于你动画的是什么属性。CSS动画操控transform和opacity时,现代浏览器会把动画提升到GPU合成层,完全绕过主线程,帧率通常稳定在60fps;这是性能最优的方案,适合图标旋转、淡入淡出、位移等常见效果。

如果需要动画svg特有属性(如路径的d属性实现形变、r属性实现圆半径变化),CSS无法直接处理,需要用JS(推荐GSAP)。GSAP经过专门优化,在处理svg动画时会自动选择最优的渲染路径,复杂场景下帧率通常也能保持在50fps以上。

SMIL动画由浏览器主线程驱动,复杂场景下可能掉帧,且Chrome曾宣布废弃SMIL(后撤回),IE全系列不支持。新项目建议不用SMIL,CSS+JS组合能覆盖所有场景。

svg文件太大怎么压缩?压缩率能到多少?

使用SVGO工具是最有效的方式,典型压缩率在40%~75%之间,具体取决于svg文件里冗余内容的多少。设计软件(尤其是Illustrator)导出的svg通常包含大量元数据注释、冗余属性和高精度小数,压缩空间最大;Figma导出的svg相对干净,压缩率通常在30%~50%。

SVGO安装后,基础用法是在终端指定输入输出文件执行优化。可以通过配置文件按需开启或关闭特定插件——比如建议禁用removeViewBox插件(删除viewBox会破坏响应式缩放),谨慎使用cleanupIds(可能破坏use引用)。

除了SVGO,还有几个有效的减体积手段:在设计软件里导出前先「压平」图层(减少路径节点数量);删除不可见图层;合并重复路径;把高精度小数(如12.345678)手动精简到2位小数(12.35)。综合使用这些方法,有时能把一个100KB的svg压缩到20KB以内。

inline svg和img标签嵌入svg有什么区别?怎么选?

四种主要嵌入方式的核心差异:

img标签:最简单,有浏览器缓存,但无法用CSS控制svg内部颜色,无法触发内部JS事件。适合纯展示、不需要换色或交互的场景,比如文章里的插图。

inline svg:完全可控,CSS可改fill/stroke,JS可操作每个节点,动画可由外部CSS触发;缺点是增加HTML体积,无法被浏览器单独缓存。适合需要主题换色(深色模式)、交互或动画的图标。

CSS background-image:纯装饰性,不影响DOM,但屏幕阅读器无法识别,颜色控制困难。只适合纯装饰背景图案,不推荐用于有语义的图标。

use + symbol:兼顾性能(sprite减少请求)和可控性(CSS可控颜色),是中大型项目图标库的最佳实践。通常在项目有20个以上图标时值得引入。

简单判断原则:需要换色或动画→inline svg;纯展示且不需要换色→img;图标数量多且需要统一管理→use+symbol。

svg在移动端兼容性怎么样?有哪些已知坑?

现代浏览器对svg的支持覆盖率超过98%(Can I Use数据),iOS Safari 3.2+、Android 3.0+均已支持基础svg渲染,日常项目基本不需要担心兼容性问题。

已知的移动端坑点:iOS Safari的transform-origin——svg动画中transform-origin的行为在旧版iOS Safari(iOS 13以下)有bug,配合transform-box: fill-box使用可以解决大多数情况;Android WebView的SMIL——部分旧版Android WebView(4.x)对SMIL动画支持不稳定,这也是不推荐在新项目用SMIL的原因之一;iOS Safari的filter性能——svg的feGaussianBlur等滤镜在旧版iOS上性能很差,复杂滤镜会导致明显卡顿,建议用CSS的filter: blur()替代;IE11——如果需要兼容IE11,SMIL完全不可用,部分CSS动画也需要加前缀,建议准备PNG fallback方案。

合规提示:本站内容以公开技术文档和行业通行经验为准,具体兼容性数据建议在Can I Use(caniuse.com)查询最新状态,不同浏览器版本的支持情况可能随时间变化。

用户热评

读者评论

🧑‍💻
老王看片
昨天

路径命令那块讲得真的很清楚,贝塞尔曲线我之前一直搞不懂,看了好多文章都是一笔带过,这篇终于把控制点的逻辑说明白了,配合那个代码示例一起看秒懂。

👍 34💬 2条回复
🎨
xiaoming2020
2小时前

svg转PNG那块能再详细点吗,我用Figma导出总是有白边,试了好几次都不行……

👍 8💬 1条回复
🌙
深夜设计师
前天

SVGO那个工具真好用!之前Illustrator导出的svg有时候能到200KB,用SVGO跑一遍直接压到40KB,视觉上完全看不出差别,强烈推荐。

👍 51💬 3条回复
📺
追剧不睡觉
上周

symbol复用方案这个思路很棒,之前项目里每个页面都在重复写svg代码,维护起来太痛苦了,按这篇的方法重构了一下,清爽多了。

👍 27💬 0条回复
🚀
前端小白666
3天前

终于找到一篇把svg动画三种方式都讲清楚的文章了!之前一直搞不清SMIL和CSS动画的区别,这篇对比表格一目了然,收藏了。

👍 19💬 1条回复
💼
设计爱好者Lily
上周

资源网站推荐这块很实用,SVG Repo我之前没用过,去试了一下确实好,搜索功能比Iconfont好用,而且大部分都是CC0授权,商用放心多了。

👍 43💬 2条回复
⌨️
码农一枚
4天前

无障碍那块之前完全没注意过,title和aria-labelledby的写法学到了,正好最近项目要做无障碍改造,这篇来得及时。

👍 15💬 0条回复
🖼️
图标控
5天前

SVG Repo这个网站我也在用,确实好用,就是有时候搜中文关键词找不到,换英文就有了,这个要注意一下。另外Lucide也推荐,Feather的升级版图标更全。

👍 22💬 1条回复

立即开始你的svg实战之旅

从基础语法到进阶动画,从资源获取到性能优化,本站为你提供完整的svg学习与实战路径。

开始学习 下载 App

本站内容以公开资料与行业通行经验为准,不提供未授权资源,尊重原创与版权。