vite动态配置svg图标及其他方式集合

news2025/1/21 6:25:17

文章目录

  • 前言
  • 使用`vite-plugin-svg-icons`动态配置
    • 安装
    • 插件引入
    • 图标下载
    • 新建组件`svg-icon.vue`
    • 使用
  • 使用vue组件动态配置
  • 总结
    • `如有启发,可点赞收藏哟~`


前言

在配置化的情况下,图标配置也显得极为重要的


使用vite-plugin-svg-icons动态配置

参考vite-plugin-svg-icons

安装

npm i vite-plugin-svg-icons -D

插件引入

  • vite.config.ts
import { resolve } from 'path'
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
export default defineConfig(({ command, mode }) => {
	...
  return {
      plugins: [
      	 ...
      	 createSvgIconsPlugin({
	        // 指定需要缓存的图标文件夹
	        // iconDirs: [resolve(pathSrc, "assets/icons")],
	        // iconDirs: [resolve(__dirname, "src/assets/icons")],
	        iconDirs: [resolve(process.cwd(), 'src/assets/icons')], // 指定项目内图标路径
	        // 指定symbolId格式
	        symbolId: "icon-[dir]-[name]",
	      }),
      ]
  }

在这里插入图片描述

  • main.ts 项目入口引入配置
import 'virtual:svg-icons-register'

在这里插入图片描述

图标下载

下载方式例举几个

  • 阿里图标
  • Element-Plus图标

把需要使用的svg图标放置这个src/assets/icons目录
在这里插入图片描述

新建组件svg-icon.vue

<template>
  <svg
    aria-hidden="false"
    class="svg-icon"
    :style="'width:' + size + ';height:' + size"
  >
    <use :xlink:href="symbolId" :fill="color" />
  </svg>
</template>

<script setup lang="ts">
import { computed } from "vue";

const props = defineProps({
  prefix: {
    type: String,
    default: "icon",
  },
  iconClass: {
    type: String,
    required: false,
    default: "",
  },
  color: {
    type: String,
    default: "",
  },
  size: {
    type: String,
    default: "20px",
  },
});
setTimeout(() => {
  console.log(symbolId)
}, 5000);
const symbolId = computed(() => `#${props.prefix}-${props.iconClass}`);
</script>

<style scoped>
.svg-icon {
  display: inline-block;
  width: 1em;
  height: 1em;
  overflow: hidden;
  vertical-align: -0.15em; /* 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 */
  outline: none;
  fill: currentcolor; /* 定义元素的颜色,currentColor是一个变量,这个变量的值就表示当前元素的color值,如果当前元素未设置color值,则从父元素继承 */
}
</style>

使用

<SvgIcon v-if="menu.icon" :icon-class="icon" />
import { defineComponent, ref } from "vue";
import SvgIcon from "@/components/svg-icon/index.vue";
export default defineComponent({
    components: {
        SvgIcon,
    },
    setup() {
    	const icon = ref('document')
        return {
            icon,
        };
    },
});

在这里插入图片描述

使用vue组件动态配置

可以引入Element-Plus提供的icon组件,也可自定义icon组件

  • IconCommunity.vue 自定义svg组件
<template>
  <svg
    xmlns="http://www.w3.org/2000/svg"
    width="20"
    height="20"
    fill="currentColor"
  >
    <path
      d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
    />
  </svg>
</template>
  • index.vue
<script lang="ts" src="./index.ts" />

<template>
  <div v-for="(icon, index) in ElIcons" :key="icon + index">
    <el-icon><component :is="icon"></component></el-icon>
  </div>
</template>

  • index.ts
import { defineComponent, reactive } from "vue";
import IconCommunity from "@/components/icons/IconCommunity.vue";
import Menu from "@/components/menu/index.vue";
import {
  Document,
  Menu as IconMenu,
  Location,
  Setting,
} from '@element-plus/icons-vue'
export default defineComponent({
  components: {
    Document,
    IconMenu,
    Location,
    Setting,
    IconCommunity
  },
  setup() {
    const ElIcons = reactive(['Document', 'IconMenu', 'Location', 'Setting', 'IconCommunity'])
    return {
      ElIcons,
    };
  },
});

效果如图
在这里插入图片描述


总结

如有启发,可点赞收藏哟~

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

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

相关文章

C#中.NET 7.0 Windows窗体应用通过EF访问新建数据库

目录 一、 操作步骤 二、编写EF模型和数据库上下文 三、移植&#xff08;Migrations&#xff09;数据库 四、编写应用程序 五、生成效果 前文已经说过.NET Framework4.8 控制台应用通过EF访问已经建立的和新建的数据库。 前文已经说过.NET 6.0 控制台应用通过EF访问…

【Python大数据笔记_day09_hive函数和调优】

hive函数 函数分类标准[重点] 原生分类标准: 内置函数 和 用户定义函数(UDF,UDAF,UDTF) ​ 分类标准扩大化: 本来&#xff0c;UDF 、UDAF、UDTF这3个标准是针对用户自定义函数分类的&#xff1b; 但是&#xff0c;现在可以将这个分类标准扩大到hive中所有的函数&#xff0c;…

1. redis入门到放弃

使用shutdown命令的时候&#xff0c;会在关机的同时生成一个RDB文件&#xff0c;使数据不丢失。redis虽然有16个库&#xff0c;但是基本上只会用0库&#xff0c;用其他的库没有意义。集群只能在0号库做mysql的读写&#xff0c;大约为写入600笔/s,读2000笔/s 一、Redis全局命令…

本地mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止

背景介绍&#xff1a; MySQL版本5.7&#xff0c;系统Win7&#xff0c;启动mysql服务时提示如下 解决方案 【会删除库中数据及mysql注册信息】&#xff1a; 1、删除原服务MySQL57 C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld --remove MySQL572、清空data 清空…

elementPlus实现暗黑与白亮主题切换

elementPlus上面默认是支持黑白主题切换的。只需要给html标签添加dark类名并且在mian.ts中导入css变量即可 我们就按照它推荐的useDark这个hook来 useDark使用起来非常简单&#xff0c;只需引入使用即可。vue直接就可以使用&#xff0c;无需做什么其他操作 中文网地址&#…

Apache阿帕奇安装配置

目录 一、下载程序 1. 点击Download 2. 点击Files for Microsoft Windows 3. 点击Apache Lounge 4. 点击httpd-2.4.54-win64-VSI6.zip ​编辑​ 5. 下载压缩包 6.解压到文件夹里 二、配置环境变量 1. 右键我的电脑 - 属性 2. 高级系统设置 3. 点击环境变量 4. 点击系统…

wpf devexpress 自定义统计

总计统计和分组统计包含预定义总计函数。这些函数允许你计算如下&#xff1a; 数据列的数量&#xff08;Count&#xff09; 最大和最小值(Max和Min) 总计和平均值&#xff08;Sum和Average&#xff09; 处理GridControl.CustomSummary 事件或者使用 GridControl.CustomSumm…

2024清理mac苹果电脑内存免费工具CleanMyMac X4.15

当你使用苹果电脑时&#xff0c;内存的优化和清理变得至关重要。随着时间的推移&#xff0c;我们的电脑内存可能会变得拥挤&#xff0c;导致性能下降。清理内存可以提高电脑的速度和反应能力&#xff0c;并确保它始终在良好状态下运行。本文将向您介绍怎么清理苹果电脑内存的方…

深度学习入门(第一天)——深度学习必备知识点

深度学习要解决的问题 人工智能、机器学习、深度学习的区别于联系 机器学习的流程&#xff1a; 数据提取 特征工程 建立模型 评估与应用 特征工程可以说是建模过程中&#xff0c;最重要的部分。 既然特征工程是最重要的&#xff0c;常规我们会做各种各样的特征&#xff0c;…

Google codelab WebGPU入门教程源码<5> - 使用Storage类型对象给着色器传数据(源码)

对应的教程文章: https://codelabs.developers.google.com/your-first-webgpu-app?hlzh-cn#5 对应的源码执行效果: 对应的教程源码: 此处源码和教程本身提供的部分代码可能存在一点差异。运行的时候&#xff0c;点击画面可以切换效果。 class Color4 {r: number;g: numb…

英伟达真是赢麻了,深夜推出最强AI芯片霸场 | 百能云芯

10月14日凌晨&#xff0c;英伟达在2023年全球超算大会&#xff08;Supercomputing Conference&#xff0c;SC&#xff09;上正式宣布&#xff0c;升级旗舰AI芯片&#xff0c;推出全新的H200芯片&#xff0c;以处理更强大的人工智能系统。包括亚马逊的AWS、Alphabet的Google Clo…

完全随机设计的方差分析

一、说明 实验设计在科学研究中发挥着至关重要的作用&#xff0c;使研究人员能够从数据中得出有意义的结论。一种常见的实验设计是完全随机设计&#xff08;CRD&#xff09;&#xff0c;其特征是将实验单元随机分配到治疗组。CRD 的方差分析 (ANOVA) 是一种统计技术&#xff0c…

【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; map和set 1. 前言2. map和set介绍3. pair结构介…

一个开源的汽修rbac后台管理系统项目,基于若依框架,实现了activiti工作流,附源码

文章目录 前言&源码项目参考图&#xff1a; e店邦O2O平台项目总结一、springboot1.1、springboot自动配置原理1.2、springboot优缺点1.3、springboot注解 二、rbac2.1、概括2.2、三个元素的理解 三、数据字典3.1、概括与作用3.2、怎么设计3.3、若依中使用字典 四、工作流—…

pytorch文本分类(一):文本预处理

pytorch文本分类&#xff08;一&#xff09;&#xff1a;文本预处理 本文为自己在鲸训练营答题总结&#xff0c;作业练习都在和鲸社区数据分析协作平台 ModelWhale 上。 &#x1f6a9;学习任务原链接在这里 相关数据链接&#xff1a;https://pan.baidu.com/s/1iwE3LdRv3uAkGGI…

企业工商四要素核验API的实现原理和功能介绍

引言 随着社会经济的不断发展&#xff0c;对企业信息的准确性和可信度要求也越来越高。为了有效防范企业信息不实和欺诈行为&#xff0c;企业工商四要素核验API应运而生。该API可以通过传入企业名称、社会统一信用代码、法人名称、法人身份证等信息&#xff0c;快速进行核验&a…

UFT On录制Web应用时无法识别Chrome浏览器对象

使用UFT的Object Spy 无法识别浏览器对象 成功加载Web插件后&#xff0c;使用UFT的对象间谍无法识别Chrome浏览器的对象 有三种情况可能导致这个问题&#xff1a; 浏览器比例没有设置为100%浏览器版本太低&#xff0c;无法与插件匹配浏览器没有添加UTF One的插件 我的是第三个…

单点车流量与饱和度的计算思考

sat&#xff1a;饱和度 v&#xff1a;平均车速 d(v)&#xff1a;车速为v情况下的安全车距&#xff08;车距车身长&#xff0c;平均值&#xff09; l&#xff1a;车道数 f&#xff1a;单位时间监测流量&#xff08;车/min&#xff09; 饱和度计算公式&#xff1a; 推导过程…

【git】git本地仓库命令操作详解

这篇文章主要是针对git的命令行操作进行讲解&#xff0c;工具操作的基础也是命令行&#xff0c;如果基本命令操作都不理解&#xff0c;就算是会工具操作&#xff0c;真正遇到问题还是一脸懵逼 如果想看远程仓库的操作&#xff0c;可以看另一篇文章&#xff1a; 【git】远程远…

编译智能合约以及前端交互工具库(Web3项目一实战之三)

我们已然在上一篇 Web3项目灵魂所在之智能合约编写(Web3项目一实战之二) ,为项目写好了智能合约代码。 但身为开发人员的我们,深知高级编程语言所编写出来的代码,都是需要经过编译,而后外部方能正常调用。很显然,使用solidity这门新的高级编程语言编写出来的智能合约,也…