SVG 教程总览
SVG (Scalable Vector Graphics) 是一种基于 XML 的矢量图形格式,用于在网页上定义二维矢量图形。本教程全面介绍 SVG 的核心概念、API 使用和最佳实践。
SVG 简介
SVG 是一种基于 XML 的矢量图形格式,用于在网页上定义二维矢量图形。与 JPEG、PNG 等位图格式不同,SVG 存储的是图形的几何描述(如形状、路径、颜色),而不是像素数据。这意味着 SVG 图像可以在不失真的情况下任意缩放,从而在不同分辨率的设备上都能保持清晰
SVG vs Canvas
| 特性 | SVG | Canvas |
|---|---|---|
| 渲染方式 | 矢量(图形) | 位图(像素) |
| DOM 结构 | 每个图形是 DOM 元素 | 单个元素 |
| 性能 | 适合少量图形、图标 | 适合大量图形、游戏 |
| 事件处理 | 原生支持 | 需要手动实现 |
| 缩放 | 无限缩放不失真 | 放大会模糊 |
| 适用场景 | 图标、简单图形、动画 | 游戏、图表、图像处理 |
浏览器支持
所有现代浏览器都支持 SVG:
code
Chrome 4+ | Firefox 2+ | Safari 3.1+ | Edge 12+ | Opera 9+核心特点
优势
- 响应式设计:通过
viewBox属性轻松实现响应式布局 - 可维护性:作为文本格式,易于编辑和维护
- 搜索引擎友好:文本内容可以被搜索引擎索引
- 性能:对于少量复杂图形,性能优于 Canvas
- 可复用性:使用
<use>和<symbol>可以轻松复用图形
技术特点
- 命名空间:SVG 需要声明 XML 命名空间
xmlns="http://www.w3.org/2000/svg" - 可缩放:SVG 图形可以无损缩放而不失真,适合各种屏幕尺寸和分辨率
- 矢量图形:由点、线、形状等数学公式组成,而非像素,文件通常较小
- DOM 集成:SVG 元素是 DOM 的一部分,可以通过 JavaScript 完全操作
- 交互性:原生支持事件处理,每个元素都可以独立响应交互
- 样式控制:完全支持 CSS,可以使用 CSS 控制 SVG 的外观
- 可访问性:支持文本描述和语义化标记,便于屏幕阅读器访问
- 动画支持:支持 CSS 动画、JavaScript 动画和 SMIL 动画(部分浏览器已弃用 SMIL)
应用场景
- 图标系统:可缩放的图标,支持多色和动画
- 数据可视化:图表、仪表盘、流程图
- 地图应用:交互式地图和地理信息可视化
- Logo 和品牌标识:需要高质量缩放的图形
- 插图和艺术:矢量插图和艺术作品
- UI 组件:按钮、卡片、装饰性元素
- 动画效果:加载动画、过渡效果
常用工具与资源
图形设计/SVG 导出
- Figma:优秀的在线设计工具,SVG 导出功能强大
- Adobe Illustrator:专业的矢量图形软件
- Inkscape:免费开源的矢量图形编辑器
SVG 优化
- SVGOMG:Jake Archibald 开发的在线 SVG 优化工具,可以极大减少 SVG 文件体积
动画与灵感
- CodePen:寻找 SVG 动画灵感和实例代码的绝佳平台
- GreenSock (GSAP):强大的 JavaScript 动画库,可以实现非常复杂的、基于时间线的 SVG 动画
推荐使用 SVG 的网站
- https://www.awwwards.com/
- Jhey Tompkins' Blog & Codepens:大量富有创意的 SVG 和 CSS 动画示例
学习路径
初级阶段
- 了解 SVG 基础概念和语法
- 学习基本形状绘制(矩形、圆形、椭圆等)
- 掌握路径绘制和坐标系统
- 学习样式和颜色应用
中级阶段
- 掌握变换操作(平移、旋转、缩放)
- 学习滤镜和效果
- 了解动画基础(CSS、SMIL、JavaScript)
- 掌握交互与事件处理
高级阶段
- 性能优化技巧
- 复杂动画和交互设计
- SVG 与数据可视化
- 最佳实践和设计模式
教程目录
基础部分
进阶部分
- 03-路径绘制 - path 元素、路径命令详解
- 04-样式与效果 - 填充、描边、渐变、图案
- 05-文本处理 - text 元素、文本路径
- 06-图像与嵌入 - image 元素、foreignObject