大家好,我是
勇宝
,后台有友友私信我,网站什么时候上线
,还在建设中,哈哈。稍安勿躁
。今天来给大家讲讲
图标
,在我们的网站中开发过程中,一些导航栏
的部分加上图标
会使我们的网站更加的美观
。借着这个机会跟大家唠一唠Vue3
中怎么有好的使用字体图标。
一、iconfont字体图标库
首先推荐一款我自己
项目
中使用到的矢量图标库
iconfont,当前使用iconfont
的方式
有很多吗,本章节我只将我在Vue
项目中常用
到的一种方式,也是比较推荐
的一种。
1、挑选图标
首先打开网站,搜索我们需要用到的图标,比如我搜索收藏
,如下:
2、加入购物车
选择好我们要在项目
使用到的图标。
3、加入项目
把我们选择
好的图标添加
到我们创建
的项目
中,这个鼠标不好使,大家将就一下把
4、复制Symbol代码
有三种导入方式,这里我使用Symbol
的方式导入到我们的vue
项目。点击点此复制代码
下的代码会弹出
一个网页,我们需要复制
其中的代码。
到此为止,我们选择图标的部分就算是结束啦,是不是很简单,下边我们开始导入到我们的Vue项目中。
二、iconfont导入Vue
因为我们是
做项目
,需要简化
我们的操作,也是为了后期维护成本
,所以本小结会封装一个公共的Svg
组件,方便我们去使用图标。也正好借此机会学习
一下组件
的简单封装
。
1、导入Symbol代码
拷贝
项目下面生成的symbol代码
,就是刚才我们复制的跟乱码一下的东西,哈哈。 我这里是放在了src/assets/iconfont/index.js
中啦。
js
//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js
2、SvgIcon组件封装
我们在Vue
的src/components/SvgIcon
目录下创建index.vue
来封装我们的组件。我们来简单写一写,官网也给出相关文档,供大家参考。
我们的组件有以下特点
:
- 能够
自定义
css样式
- 接收传递的
图标名
js
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconClassName"></use>
</svg>
</template>
<script setup>
import { computed, defineProps } from 'vue'
const props = defineProps({
// 添加自定义类名
className: {
type: String,
default: ''
},
// iconfont中的名字
iconName: {
type: String,
required: true
}
})
const svgClass = computed(() => {
if (props.className) {
return `svg-icon ${ props.className }`
} else {
return 'svg-icon'
}
})
const iconClassName = computed(() => `#${ props.iconName }`)
</script>
<style lang="scss" scoped>
.svg-icon {
width: 2em;
height: 2em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
3. 注册SvgIcon组件
首先我们需要在main.js
中导入上面复制
好symbol
的代码
,然后在注册
我们的组件
。
js
import App from './App.vue'
// 1. 导入[js/ts]文件
import '@/assets/iconfont'
const app = createApp(App)
// 2. 注册SvgIcon
app.component('svg-icon', SvgIcon)
......
注:这里是演示,正常情况不应该这样注册组件,我们应该写一个单独的plugins/index.js(我喜欢起这个名字)
文件。
4. 组件的使用
接下来就可以在我们自己
的vue文件
中进行使用
啦!
js
<template>
<div class="pc">
<svg-icon iconName="icon-huidaodingbu"></svg-icon>
</div>
</template>
效果如下:
三、总结
好啦!今天的讲解
就到此为止了,相信看完你也学会了,赶紧动手去试一试吧。iconfont中的图标还是相当多的,基本能满足大部分小伙伴的需求。也欢迎大家评论区推荐更好用的图标库。
写完想起来,以后要不要出一些封装组件的文章,哈哈哈。
我是前端小学生
,勇宝
,感谢支持
与关注
。