SVG 在  HTML 页面

SVG 在 HTML 页面中的 7 种正确用法(2025 年前端主流写法,按推荐顺序排序)

排名写法适用场景优点缺点2025 推荐指数
1行内 <svg>(直接写在 HTML 里)图标、动态图形、需要改颜色/动画、暗黑模式可被 CSS/JS 直接控制
支持 CSS 变量
响应式最强
无需 HTTP 请求
代码略多★★★★★
2<img src="xxx.svg">静态图标、内容图、LOGO、不需要交互最简单
可缓存
支持懒加载
不能改颜色
不能动画
不支持 JS 交互
★★★★☆
3CSS background-image装饰性图标、按钮背景轻松改大小/颜色(background: url(xxx.svg) no-repeat
支持 currentColor
不能放内容区(语义差)★★★★☆
4<svg><use href="icons.svg#home"/></svg>(Sprite 方式)大量图标系统、性能要求极致只请求一次文件
缓存极好
可改颜色
需要额外维护 sprite 文件★★★★☆
5<object type="image/svg+xml" data="icon.svg"></object>需要 SVG 内部脚本运行时独立作用域
可运行内部 <script>
不能直接用 CSS 改颜色★★☆☆☆
6<iframe src="chart.svg"></iframe>极少数复杂独立 SVG完全隔离基本没人用了★☆☆☆☆
7<embed src="xxx.svg">老项目兼容基本被淘汰不推荐★☆☆☆☆

2025 年最推荐的 3 种写法(直接抄)

1. 行内 SVG(90% 场景首选)

<!-- 自动跟随主题颜色 + 可动画 -->
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
  <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/>
  <circle cx="12" cy="7" r="4"/>
</svg>

优点:currentColor 自动继承文字颜色,暗黑模式一行 CSS 就全变!

2. <img> + 支持 CSS 改色的技巧(2025 新姿势)

<!-- 配合 SVG 文件里写 fill="currentColor" -->
<img src="icons/user.svg" alt="用户" class="icon">

<style>
.icon {
  width: 32px;
  height: 32px;
  color: #0066ff;   /* 这样就能改颜色了! */
}
</style>

记住:只要你的 .svg 文件里用 fill="currentColor"stroke="currentColor",就能被外部 CSS 控制颜色!

3. SVG Sprite + <use>(大型项目最省流量)

<!-- 先隐藏一个 sprite(只加载一次)-->
<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
  <symbol id="home" viewBox="0 0 24 24">
    <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
    <polyline points="9 22 9 12 15 12 15 22"/>
  </symbol>
  <symbol id="user" viewBox="0 0 24 24">…</symbol>
</svg>

<!-- 使用时 -->
<svg width="32" height="32" fill="currentColor">
  <use href="#home"/>
</svg>

2025 年前端框架最佳实践

框架推荐方式
React直接 import 为组件:import Home from './home.svg?react'(用 Vite + @svgr)
Vue 3<component :is="HomeIcon" />unplugin-icons 自动按需加载
Vite加插件 vite-plugin-svg-icons<svg><use href="#i-mdi-home"/></svg>
Next.js直接 <Image src="/icons/home.svg" width={24} height={24} />(自动优化)

一句话总结(2025 金句):

  • 需要改颜色、动画、交互 → 直接行内写 SVG
  • 纯展示、不交互 → 用 <img> 或 CSS background
  • 图标超多 → 用 SVG Sprite 或 Iconify/unplugin-icons

需要我直接发你一套「2025 年最强的 200 个可改色 SVG 图标包(全部用了 currentColor)」吗?解压即用,配合上面写法随便改颜色!

文章已创建 2838

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部