vue3+vite,集成svg图标

1、为什么需要使用svg图标

svg图标的体积比我们图片资源体积小很多,并且能和图片实现效果一致,且灵活性更强(修改图标颜色)

2、下载、配置、使用

1.下载插件:

npm i vite-plugin-svg-icons -D

2.下载插件配置:

npm install fast-glob -D

【选择性下载】如果path报错请下载:

 npm i -D @types/node

3.在vite.config.ts中配置插件

在这里插入图片描述
这里需要注意一下:iconDirs的地址,也就是svg图标存储的地址一定要相对于

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
// 引入svg需要用到的插件
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'


// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
      symbolId:'icon-[dir]-[name]'
    })
  ],
  resolve: {
    alias: {
      "@":path.resolve("./src") //相对路径别名配置,使用@代替src
    }
  }
})

4.入口文件导入:main.ts

在这里插入图片描述

import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from '@/App.vue'
const app = createApp(App)
app.use(ElementPlus)

//svg插件需要配置代码
import 'virtual:svg-icons-register'
app.mount('#app')

5.然后在项目的src/assets目录下面创建一个icons目录,用于存储svg文件【这个目录结构与第3步注意点相对应】
在这里插入图片描述

6.创建一个phone.svg文件,里面内容通过阿里巴巴图标库复制的svg代码进行粘贴

  • 注意点击的是复制SVG代码

阿里巴巴图标库地址
这一步省略

7.页面使用:

在这里插入图片描述

<template>
  <div>
    <h1>你好呀:{{ num }}</h1>
    <!-- 测试svg图标使用 -->
    <svg>
      <!-- xlink:href执行用哪一个图标,属性值务必是#icon-图标名字 -->
      <!-- use标签fill睡醒可以设置图标的颜色 -->
      <!-- 注意:如果fill改变不了颜色,要去svg文件里面把fill取消,这里才能够改颜色 -->
      <!-- 如果要设置svg大小,可以在svg标签上设置style行内样式 -->
      <use xlink:href="#icon-phone" fill="pink"></use>
    </svg>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'
let num = ref(1);
</script>
<style scoped></style>

注意:如果颜色、宽度、高度、设置不成功,可以是svg文件里面有设置了,需要把svg里面设置的删除掉,才能在svg标签上设置

[拓展]封装一个全局的icon组件

注意:如果颜色、宽度、高度、设置不成功,可以是svg文件里面有设置了,需要把svg里面设置的删除掉,才能在svg标签上设置

1、创建组件

SvgIcon.vue

<template>
    <div>
        <svg :style="{width,height}">
            <use xlink:href="prefix + name" :fell="color"></use>
        </svg>
    </div>
</template>

<script lang="ts" setup>

defineProps({
    prefix:{
        type:String,
        default:'#icon-'
    },
    name:String,  //接收父组件传过来的图标名称
    color:{  //接收父组件传过来的图标颜色
        type:String,
        default:''
    },
    width:{  //接收父组件传过来的图标宽度
        type:String,
        default:'16px'
    },
    height:{  //接收父组件传过来的图标高度
        type:String,
        default:'16px'
    },
})

</script>

2、注册为全局组件
main.ts

import SvgIcon from '@/components/SvgIcon/index.vue'
app.component("SvgIcon",SvgIcon);

3、使用全局组件

组件中就可以直接使用这个全局的组件了

<template>
    <div>
      <svg-icon name="phone" color="red" width="100px" height="100px"></svg-icon>
    </div>
</template>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值