Vue3项目使用SVG图标

GitHub代码地址:GitHub - seapack-hub/seapack-template: seapack-template框架

一,前置工作

(一)安装依赖 vite-plugin-svg-icons

vite-plugin-svg-icons 的优点
预加载 : 在项目运行时就生成所有图标,只需操作一次 dom
高性能: 内置缓存,仅当文件被修改时才会重新生成

typescript 复制代码
npm install vite-plugin-svg-icons -D

(二)配置

在vite.config.ts中进行配置

typescript 复制代码
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

export default () => {
  return {
    plugins: [
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), 'src/icons')],
        // 指定symbolId格式
        symbolId: 'icon-[dir]-[name]',
      }),
    ],
  }
}

在main.ts文件中引入

typescript 复制代码
// 本地SVG图标
import 'virtual:svg-icons-register'

二,使用

(一)封装组件

创建一个SPIcon组件,封装svg。避免重复编码

vue 复制代码
<template>
  <svg aria-hidden="true" class="svg-icon" :style="{height:size,width:size}">
    <use :xlink:href="symbolId" :fill="color"></use>
  </svg>
</template>

<script setup lang="ts">
import {computed} from 'vue'
const props = defineProps({
  //图标大小
  size:{
    type:[Number,String],
    default: '16px'
  },
  //图标颜色
  color:{
    type:String,
    default:"#606266"
  },
  //图标前缀,默认icon
  prefix:{
    type:String,
    default:'icon'
  },
  //图标名称
  name:{
    type:String,
    default:""
  }
});
const symbolId = computed(()=>`#${props.prefix}-${props.name}`);
</script>

<style scoped lang="scss">

</style>

注意: symbolId 的值需要与 vite.config.ts中配置的保持一致。

最终symbolId的值格式为#icon-svgName。

(二)组件内使用

使用封装好的组件

(三)对应svg文件

svg图标名称

三,效果

相关推荐
扶风ff10 分钟前
求职笔试资料太散?用练题簿在线刷题,按岗位整理练习清单
前端·学习·小程序
浪浪山_大橙子14 分钟前
公司里的 AI,终于不只会聊天:我用 GPT‑6 把企业工作伙伴开源了
前端·后端·面试
琹箐17 分钟前
命令行调用接口
前端
可乐鸡翅yeah_1 小时前
AES‑128 加密 M3U8,IV 初始化向量新手容易踩坑
前端·网络·数据库·ffmpeg·音视频·m3u8在线
MetWeave1 小时前
机场天气的"广播系统":三种报文一次讲明白
前端
易朵朵1 小时前
CSS 格式化上下文
css·vue.js
xieter1 小时前
【技术精选】深入浅出现代前端渲染与性能优化实践指南 (2026-10-04)
前端·javascript
计算机魔术师1 小时前
Anthropic 密会宗教领袖谈 Claude 意识,OpenAI 为什么急眼
前端
xieter1 小时前
【硬核实战】TypeScript Compiler API: Preserving Child Node Narrowing in Reusable Type Guards 🔧 (2026-10-03)
前端·javascript
xieter1 小时前
【硬核实战】React 19 useFormStatus Returning False? I Built a SubmitButton That Fixes It (2026-10-03)
前端·javascript