当前位置: 首页 > article >正文

vite+vue3项目中svg图标组件封装

一、安装插件

npm i vite-plugin-svg-icons -D

二、插件配置

// vite.config.js

import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import path from "path";

export default defineConfig({
  plugins: [
    // svg图标配置项
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [path.resolve(process.cwd(), "src/assets/icons")],
      // 指定symbolId格式
      symbolId: "icon-[dir]-[name]",
    }),
    // ------ 其他配置项 ------
  ],
});

三、引入注册脚本

// src/main.js
import 'virtual:svg-icons-register'

四、封装组件

在src/components目录下创建一个SvgIcon.vue文件

// src/components/SvgIcon.vue
<template>
    <svg aria-hidden="true" :style="{
        width: width + 'px',
        height: height + 'px'
    }">
        <use :xlink:href="symbolId" :fill="color" />
    </svg>
</template>

<script setup>
import { computed } from 'vue';
const props = defineProps({
    prefix: {
        type: String,
        default: 'icon',
    },
    name: {
        type: String,
        required: true,
    },
    color: {
        type: String,
        default: 'currentColor',
    },
    width: {
        type: [Number, String],
        default: '24',
    },
    height: {
        type: [Number, String],
        default: '24',
    },
})
const symbolId = computed(() => `#${props.prefix}-${props.name}`);
</script>

五、icons 文件目录结构

# src/assets/icons

- icon1.svg
- icon2.svg
- icon3.svg
- dir/icon1.svg

六、在页面中使用

<template>
<!-- color 不传值 svg颜色会继承上级元素color属性值 -->
<svgIcon name="mine" color="#333" width="36" height="36"></svgIcon>
</template>

<script setup>
import svgIcon from "@/components/SvgIcon.vue"

</script>

七、svg图标颜色不生效解决方案

如果svg图标设置颜色值不生效,点击 svg文件 查看源码,修改 fill 属性值为 fill=“currentColor”或者 fill="" 。

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<style type="text/css">
	.st0{fill:#FFFFFF;} // 就是这里把这个#ffffff改成""或者"currentColor"。
</style>
  <path class="st0"
    d="M912.051527 151.150632l-286.624817 780.499041c-5.753719 15.667798-23.118384 23.704707-38.786182 17.950989a30.220937 30.220937 0 0 1-19.305944-22.909364L498.23787 550.442426a30.220937 30.220937 0 0 0-24.265655-24.265655L97.723343 457.080057c-16.415729-3.014425-27.279412-18.766366-24.264987-35.182094a30.220937 30.220937 0 0 1 19.306612-22.910032L873.263342 112.363782c15.669134-5.753719 33.033799 2.28319 38.786849 17.951656a30.220937 30.220937 0 0 1 0 20.835194zM826.833582 205.907791a7.555234 7.555234 0 0 0-9.679684-9.650301l-573.559491 207.092476a7.555234 7.555234 0 0 0 1.149942 14.527205l297.554613 56.790594a7.555234 7.555234 0 0 1 6.020837 6.087616L603.515031 788.626754a7.555234 7.555234 0 0 0 14.549911 1.210044L826.83425 205.908459z" />
</svg>;


http://www.kler.cn/a/272703.html

相关文章:

  • Redis瓶颈和调优
  • 接口防篡改+防重放攻击
  • 【Linux系列】查看服务器是否使用了 SSD 的多种方法
  • PTA L1-039 古风排版
  • LDD3学习7--硬件接口I/O端口(以short为例)
  • springboot多环境配置
  • 使用canvas实现图纸标记及回显
  • Requests教程-17-请求代理设置
  • microk8s使用本地私服registry的镜像http协议
  • The service already exists!怎么解决,Windows怎么安装/卸载服务?
  • RabbitMQ学习总结-消息的可靠性
  • java高频面试题-高级篇
  • C# EPPlus导出dataset----Excel3样式
  • pta系列之古风排版
  • [嵌入式AI从0开始到入土]16_ffmpeg_ascend编译安装及性能测试
  • 2024-03-14学习笔记(YoloV9)
  • 比特币,区块链及相关概念简介(二)
  • d3dcompiler_43.dll缺失,5个方法处理d3dcompiler_43.dll文件缺失
  • JavaEE--小Demo
  • 二叉搜索树、B-树、B+树
  • Hadoop大数据应用:HDFS 集群节点缩容
  • Windows系统安装GeoServe结合内网穿透实现公网访问本地位置信息服务
  • C语言学习笔记day8
  • 1057:简单计算器
  • onnx 格式模型可视化工具
  • 疫情网课管理系统|基于springboot框架+ Mysql+Java+Tomcat的疫情网课管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)