vue项目使用svg图标

下面是在 Vue 3 项目中完整引入和使用 vite-plugin-svg-icons 的步骤

1、安装插件

npm install vite-plugin-svg-icons -D
# 或
yarn add vite-plugin-svg-icons -D
# 或
pnpm add vite-plugin-svg-icons -D

2、配置 Vite

在 vite.config.ts 或 vite.config.js 中配置:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'export default defineConfig({plugins: [vue(),createSvgIconsPlugin({// 指定需要缓存的图标文件夹iconDirs: [path.resolve(process.cwd(), 'src/assets/svg')],// 指定symbolId格式symbolId: 'icon-[name]',// 可选配置svgoOptions: {plugins: [{ name: 'removeAttrs', params: { attrs: ['fill'] } } // 移除svg默认颜色]}})]
})

3. 创建 SVG 组件

<script setup>
import { computed } from 'vue'const props = defineProps({name: {type: String,required: true,},className: {type: String,default: '',},size: {type: [Number, String],default: 15,},circle: {type: Boolean,default: false,},color: String,defaultImg: String,
})
const style = computed(() => {const size = typeof props.size === 'string' ? props.size : `${props.size}px`return {width: size,height: size,borderRadius: props.circle ? '50%' : null,color: props.color,}
})
const symbolId = computed(() => `#icon-${props.name}`)
</script>
<template><svg aria-hidden="true" class="svg-icon" :class="className" :style="style"><use :xlink:href="symbolId" /></svg>
</template>
<style scoped>
.svg-icon {/* width: 30px;height: 30px; */display: inline-block;vertical-align: -2px;fill: currentColor;
}
</style>

4. 全局注册组件

在 main.js 中:

import { createApp } from 'vue'
import App from './App.vue'
import 'virtual:svg-icons-register' // 引入注册脚本
import SvgIcon from '@/components/SvgIcon.vue' // 引入组件const app = createApp(App)// 全局注册svg组件
app.component('SvgIcon', SvgIcon)app.mount('#app')

5. 使用图标

  1. 将 SVG 文件放入 src/assets/svg 目录

  2. 在组件中使用:

    <div class="img-list" v-for="(item, index) in iconlist" :key="index" @click="itemClick(item)">
    <div class="default-img"><!-- 在组件中使用 --><SvgIcon :name="item.iconname" size="30" class="svg-icon" />
    </div>
    </div>
    const list = ref([{iconname: 'float-robot',id: 1},{iconname: 'float-wx',id: 2},{iconname: 'float-tell',id: 3},{iconname: 'float-qq',id: 4},{iconname: 'float-message-board',id: 5}
    ])
    <style scoped lang="scss">
    .img-list{padding: 20px;background: #fff;display: flex;flex-direction: column;justify-content: space-between;justify-items: center;height: 330px;cursor: pointer;box-shadow: 0px 0px 14px 0px rgba(0, 0, 0, 0.12);border-radius: 34px;box-sizing: border-box;&:hover {.default-img {.svg-icon {color: #005fff; // 默认颜色fill: currentColor; // 继承color颜色transition: color 0.3s ease; // 添加过渡效果}}}
    }
    </style>
    

    最后看效果:鼠标经过svg图标变蓝色

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

元器件基础学习笔记——结型场效应晶体管 (JFET)

场效应晶体管&#xff08;Field Effect Transistor&#xff0c;FET&#xff09;简称场效应管&#xff0c;是一种三端子半导体器件&#xff0c;它根据施加到其其中一个端子的电场来控制电流的流动。与双极结型晶体管 &#xff08;BJT&#xff09; 不同&#xff0c;场效应晶体管 …

拆解实战案例:电商ERP管理系统从需求到原型全流程设计

ERP即企业资源计划系统&#xff0c;全称为Enterprise Resource Planning&#xff0c;其核心在于运用系统化管理思想&#xff0c;为企业员工及管理层构建一个提供决策支持的管理系统平台。它汇聚贯通企业各个业务模块产生的数据流&#xff0c;实现资源配置与业务流程高效协同。尤…

【面试题】如何保证MQ的消息不丢失、不重复

文章目录 一、消息丢失问题的解决方案&#xff08;一&#xff09;发送端丢失&#xff08;二&#xff09;存储端丢失1. 同步刷盘2. Broker 集群 &#xff08;三&#xff09;消费端丢失 二、消息重复问题的解决方案&#xff08;一&#xff09;唯一键约束&#xff08;二&#xff0…

ArcGIS Maps SDK for JavaScript:使用图层过滤器只显示FeatureLayer的部分要素

文章目录 引言1 需求场景分析2精确过滤实现方案2.1 基础过滤语法2.2 动态过滤实现 3 模糊查询进阶技巧3.1 LIKE操作符使用3.2 特殊字段处理 4. 性能优化与注意事项4.1 服务端vs客户端过滤4.2 最佳实践建议 5 常见问题解答 引言 在地图应用开发中&#xff0c;图层过滤是常见的需…

day25-计算机网络-3

1. DNS解析流程 windows host文件是否配置域名对应的ip查询本地DNS缓存是否有这个域名对应的ip询问本地DNS&#xff08;网卡配置的&#xff09;是否知晓域名对应的ip本地DNS访问根域名解析服务器&#xff0c;但是根DNS只有顶级域名的记录&#xff0c;根告诉我们.cn顶级域名的D…

中达瑞和SHIS高光谱相机在黑色水彩笔墨迹鉴定中的应用

在文件检验与物证溯源领域&#xff0c;对书写材料&#xff08;如墨水&#xff09;进行快速、准确、无损的鉴别至关重要。由陈维娜等人撰写的《高光谱技术结合化学计量法鉴别黑色水彩笔墨迹》&#xff08;发表于《光谱学与光谱分析》2023年第7期&#xff09;利用中达瑞和SHIS凝采…

华为OD机考 - 水仙花数 Ⅰ(2025B卷 100分)

import java.util.*; public static Integer get(int count,int c){if(count<3||count>7){return -1;}//存储每位数的最高位……最低位int[] arr new int[count];List<Integer> res new ArrayList<>();for(int i(int) Math.pow(10,count-1);i<(int) Math…

Go 标准库 encoding/gob 快速上手

文章目录 1.简介2.基础3.类型和值4.编码细节5.安全6.主要函数6.1 注册1. 接口的底层类型在运行时才能确定2.类型标识的唯一性3.安全性与显式意图4.与结构体的自动处理对比5.示例分析为什么不能像 JSON 那样自动处理&#xff1f;总结 6.2 编码6.3 解码 7.示例7.1 编解码结构体7.…

Ubuntu ifconfig 查不到ens33网卡

BUG&#xff1a;ifconfig查看网络配置信息&#xff1a; 终端输入以下命令&#xff1a; sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start - service network - manager stop &#xff1a;停止…

算法-数论

C-小红的数组查询&#xff08;二&#xff09;_牛客周赛 Round 95 思路&#xff1a;不难看出a数组是有循环的 d3,p4时&#xff0c;a数组&#xff1a;1、0、3、2、1、0、3、2....... 最小循环节为4&#xff0c;即最多4种不同的数 d4,p6时&#xff0c;a数组&#xff1a;1、5、3、…

CSS中text-align: justify文本两端对齐

text-align: justify; 是 CSS 中用于控制文本对齐方式的属性值&#xff0c;它的核心作用是让文本两端对齐&#xff08;分散对齐&#xff09;&#xff0c;使段落左右边缘整齐排列。以下是详细解析&#xff1a; 作用效果 均匀分布间距 浏览器会自动调整单词/字符之间的间距&#…

WebFuture:启动数据库提示: error while loading shared libraries: libaio.so.1问题处理

问题分析 当出现./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory这个错误时&#xff0c;这意味着 MySQL 服务器&#xff08;mysqld&#xff09;在启动过程中无法找到libaio.so.1这个共享库文件。li…

74常用控件_QSpacerItem的使用

目录 代码⽰例: 创建⼀组左右排列的按钮. Spacer 使⽤布局管理器的时候, 可能需要在控件之间, 添加⼀段空⽩. 就可以使⽤ QSpacerItem 来表⽰. 核⼼属性 属性说明width宽度height高度hData水平方向的 sizePolicy - QSizePolicy::Ignored&#xff1a;忽略控件的尺寸&#xf…

vmware 设置 dns

vmware 设置 dns 常用的 DNS&#xff08;Domain Name System&#xff09;服务器地址可以帮助你更快、更安全地解析域名。以下是一些国内外常用的公共 DNS 服务&#xff1a; 国内常用 DNS 阿里云 DNS IPv4: 223.5.5.5、223.6.6.6IPv6: 2400:3200::1、2400:3200:baba::1特点&am…

从一次日期格式踩坑经历,谈谈接口设计中的“约定大于配置“

从一次日期格式踩坑经历&#xff0c;谈谈接口设计中的"约定大于配置" 背景 最近在对接一个第三方接口时&#xff0c;遇到了一个有趣的"坑"。接口文档中要求传入一个符合 RFC3339 格式的日期时间字符串&#xff0c;格式示例为&#xff1a;2019-10-01T08:1…

高考数学易错考点01 | 临阵磨枪

文章目录 前言集合与函数不等式数列三角函数 前言 本篇内容下载于网络&#xff0c;网络上的都是以 WORD 版本呈现&#xff0c;缺字缺图很不完整&#xff0c;没法使用&#xff0c;我只是做了补充和完善。有空准备进行第二次完善&#xff0c;添加问题解释的链接。 集合与函数 …

YOLO12 改进|融入 Mamba 架构:插入视觉状态空间模块 VSS Block 的硬核升级

在医学图像分割领域&#xff0c;传统卷积神经网络&#xff08;CNNs&#xff09;受限于局部感受野&#xff0c;难以捕捉长距离依赖关系&#xff0c;而基于 Transformer 的模型因自注意力机制的二次计算复杂度&#xff0c;在处理高分辨率图像时效率低下。近年来&#xff0c;状态空…

MATLAB遍历生成20到1000个节点的无线通信网络拓扑推理数据

功能&#xff1a; 遍历生成20到1000个节点的无线通信网络拓扑推理数据&#xff0c;包括网络拓扑和每个节点发射的电磁信号&#xff0c;采样率1MHz/3000&#xff0c;信号时长5.7s&#xff0c;单帧数据波形为实采 数据生成效果&#xff1a; 拓扑及空间位置&#xff1a; 节点电磁…

oss:上传图片到阿里云403 Forbidden

访问图片出现403Forbidden问题&#xff0c;我们可以直接登录oss账号&#xff0c;查看对应权限是否开通&#xff0c;是否存在跨域问题

香橙派3B学习笔记8:snap安装管理软件包_打包俩个有调用的python文件

现在尝试一下打包多个有互相调用的 py程序&#xff1a; ssh &#xff1a; orangepi本地ip 密码 &#xff1a; orangepi 操作系统发行版&#xff1a; 基于 Ubuntu 20.04.6 LTS&#xff08;Focal Fossa&#xff09;的定制版本&#xff0c;专门为 Orange Pi 设备优化。PRETTY_NAM…