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图标名称

三,效果

相关推荐
不一样的少年_14 分钟前
不花一分额外 API 钱,用现成的 Claude Code / Codex / Cursor 搭建 AI 个人知识库
前端·后端·ai编程
tryCbest32 分钟前
ES6 ( ECMAScript 2015)核心语法
前端·ecmascript·es6
李小轰_Rex1 小时前
零开销 AI 数字人方案|Live2D 数字人驱动方案分享
前端·aigc
ModyQyW1 小时前
vite-plugin-uni-manifest 0.7:在 uni-app 读取之前生成
前端·uni-app
我命由我123451 小时前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
修炼的dance2 小时前
批量转码前用 ffprobe 筛一遍,36 个文件能跳过 26 个
前端
费曼学习法2 小时前
从 0 到 1 上手 Super-Agent 架构:任务拆解、工具路由与失败回滚的三段实现
前端
2026小鱼AI2 小时前
当 LLM 生成的教学设计“不合格”:结构化校验、局部重生成与并发下的质量漂移
前端
疯华整猫2 小时前
借助 Trae 复刻百度网盘“无权限摇一摇”检测:Android 传感器 AI 辅助实战
前端
deli0072 小时前
流式输出为什么一段一段蹦?拆开 SSE 分块实测 20094 个乱码
前端