首页 / HTML5 入门教程 / SVG 矢量图入门

HTML5 入门教程

SVG 矢量图入门

本教程共 110 篇 · 第 34 篇 · 更新于 2026-07-28 · 约 7 分钟阅读

HTML5HTML5 入门教程SVG矢量图可缩放图形位图对比图标字体

34. SVG 矢量图入门

本节目标:理解矢量图和位图的区别,学会用 SVG 在网页中绘制简单的矢量图形。

前面学的 JPEG、PNG、WebP 都是位图——由一个个像素点组成。放大后会模糊。SVG 不一样,它是矢量图,放大永远不会失真。

位图 vs 矢量图

想象一下照片和数学公式的区别:

  • 位图(JPEG/PNG):记录每个像素的颜色。放大后,像素被拉伸,画面变模糊
  • 矢量图(SVG):记录”画一个圆心在 (100,100)、半径 50 的圆”。放大后重新计算,永远清晰
位图:●●●●●    → 放大后:■■■■■■■    (锯齿)
      ●●●●●              ■■■■■■■
      ●●●●●              ■■■■■■■

矢量:circle(100,100,r50) → 放大后:circle(200,200,r100)  (平滑)

三种使用方式

方式一:作为图片引用

SVG 可以像普通图片一样用在 <img> 里:

<img src="logo.svg" alt="公司 Logo" width="200" height="200" />

优点:简单。缺点:不能用 CSS 控制 SVG 内部样式,也不能用 JavaScript 操作。

方式二:内联 SVG

直接把 SVG 代码写在 HTML 里:

<svg width="200" height="200" viewBox="0 0 200 200">
  <circle cx="100" cy="100" r="80" fill="blue" />
  <text x="100" y="110" text-anchor="middle" fill="white" font-size="24">
    码上学
  </text>
</svg>

优点:可以用 CSS 和 JavaScript 操作 SVG 内部元素。缺点:HTML 文件变大。

方式三:作为 CSS 背景

.logo {
  background-image: url("logo.svg");
  width: 200px;
  height: 200px;
}

基础形状标签

SVG 内置了一些简单的形状标签。

矩形 rect

<svg width="300" height="200">
  <rect x="10" y="10" width="100" height="80" fill="green" />
</svg>

xy 是左上角坐标,widthheight 是尺寸。

圆形 circle

<circle cx="100" cy="100" r="50" fill="red" />

cxcy 是圆心坐标,r 是半径。

椭圆 ellipse

<ellipse cx="100" cy="100" rx="80" ry="40" fill="orange" />

rx 是 x 轴半径,ry 是 y 轴半径。

直线 line

<line x1="10" y1="10" x2="200" y2="100" stroke="black" stroke-width="2" />

(x1, y1) 是起点,(x2, y2) 是终点。stroke 是线条颜色。

文本 text

<text x="100" y="50" text-anchor="middle" font-size="20">Hello SVG</text>

text-anchor="middle" 让文字水平居中对齐到 x 坐标。

SVG 的坐标系

SVG 的坐标原点在左上角。x 轴向右,y 轴向下。

(0,0) ─────────→ x




  y

这和数学里的坐标系不一样(y 轴向上),别搞混了。

viewBox 属性

viewBox 定义了 SVG 的可见区域。格式是 "x y width height"

<svg width="200" height="200" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="40" fill="blue" />
</svg>

viewBox="0 0 100 100" 意思是:SVG 内部的坐标系是 100x100。但实际显示尺寸是 200x200。SVG 会自动缩放,让 100 个单位的图形填满 200 像素的空间。

这就是 SVG 矢量的精髓——改 widthheight 就能任意缩放,不影响清晰度。

用 SVG 做图标

实际开发中,SVG 最常见的是做图标系统:

<!-- 搜索图标 -->
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor">
  <circle cx="11" cy="11" r="8" />
  <line x1="21" y1="21" x2="16.65" y2="16.65" />
</svg>

stroke="currentColor" 让 SVG 继承父元素的文字颜色。你设 color: red,图标就变红。

Tip

设计师通常用 Figma、Sketch 导出 SVG 代码。你不需要手写复杂的 SVG,理解基础就行。

什么时候用 SVG

场景推荐
照片JPEG / WebP
Logo、图标SVG
简单图形、图表SVG
需要动画的图形SVG(配合 CSS/JS)
需要缩放到任意尺寸SVG

浏览器兼容性

所有现代浏览器都原生支持 SVG。不需要任何 polyfill。

Note

下一节学习 <picture>srcset——让浏览器自动选择最合适的图片版本。