Vue3项目到底用哪种图标方案最省心高效又贴合需求
首先得先梳理下,Vue3项目现在主流用的图标方案大概有四类?不能空口说,得按实际开发里的场景、成本、扩展性这些维度掰扯清楚,不然就跟瞎推荐似的,不管你是做个人小工具、公司官网、还是后台系统,总有一款能对上你的情况。
本地SVG直接引入:适合追求极致自定义且图标量少的小项目
这种方案不用装任何第三方库,是最基础但也最灵活的方式,毕竟直接操作SVG文件本身,具体怎么弄?其实有两种常用的本地引入姿势,新手可能只知道第一种,第二种省点事儿。
第一种是把SVG当组件写进.vue单文件里,这个很简单,直接复制SVG的代码到template标签里就行,举个例子,比如要加个搜索图标,直接把搜索SVG的path这些内容粘贴到template,然后给整个SVG加个自定义的class比如icon-search,用CSS控制大小、颜色就行,哦对了,这里有个小技巧,把SVG里的fill属性改成currentColor,这样图标颜色就能自动跟着父元素的文字颜色走,特别方便,不用再单独给每个图标写颜色样式了。
第二种是配置vite/webpack的loader,把SVG文件导入成组件用,如果用vite的话更简单,现在最新的vite已经默认支持导入SVG成组件了?等下好像是需要加个query,比如import SearchIcon from './assets/icons/search.svg?component',然后直接在template里用
Element Plus Icon/Ant Design Vue Icon:适合直接用对应UI库的项目
如果你的Vue3项目已经在用Element Plus或者Ant Design Vue这两个主流UI库了,那直接用它们自带的图标库绝对是最省心的选择,没有之一,为什么这么说?首先是样式完全兼容UI库,图标大小、颜色、hover效果这些默认就和UI库的按钮、输入框、导航栏这些组件匹配,不用你再花时间调整;其次是使用超级简单,都不用额外配置loader什么的,直接按照文档导入用就行。
比如用Element Plus Icon的话,第一步是先安装这个库,npm install @element-plus/icons-vue就行;第二步是全局注册或者按需注册,全局注册的话在main.js里写个循环把所有图标都注册成全局组件,这样在任何单文件里都能直接用,不用重复导入;如果想让打包体积更小,就按需注册,在哪个单文件里用哪个图标,就单独导入哪个,这里还有个小优化点,现在很多UI库的图标支持动态组件了,比如Element Plus的
Iconfont/IconPark:适合需要大量自定义风格统一图标的项目
如果你的项目不用主流UI库,或者需要的图标数量特别多,或者对图标风格有特殊要求(比如要做成品牌专属的线性、面性、双色图标),那Iconfont或者IconPark这种在线图标库平台绝对是首选,这两个平台都是国内比较权威的,用户量很大,图标资源也很丰富,而且都支持在线生成图标库、自定义图标样式、批量下载。
先说说Iconfont吧,这个应该是国内开发者用得最多的在线图标平台了,阿里旗下的,图标资源超百万,免费的也很多,具体怎么用在Vue3项目里?有三种常用的方式:第一种是Unicode方式,就是把平台生成的CSS文件或者字体文件下载到本地,然后用类似的方式使用,这种方式现在用得比较少了,因为Unicode编码不好记,而且不支持多色图标;第二种是Font Class方式,这个比Unicode方式方便点,生成的CSS文件里已经把每个图标都对应了一个有意义的类名,比如,记起来方便,但还是不支持多色;第三种是Symbol方式,这个是现在推荐的方式,支持多色图标,而且加载速度也不错,具体就是把平台生成的JS文件下载到本地或者引入在线地址,然后用类似的方式使用,哦对了,Vue3里可以把这个封装成一个通用的Icon组件,这样用起来更方便,比如封装成
unplugin-icons:适合想用各大平台图标又不想手动管理的懒人项目
最后要说的这个unplugin-icons绝对是现在Vue3项目里最火的图标方案之一,特别适合“懒人”开发者,因为它支持几乎所有主流的在线图标库和本地SVG,而且可以按需引入,不用手动安装每个图标库,不用手动注册每个图标,甚至不用手动复制粘贴图标代码,它是一个unplugin插件,支持vite、webpack、rollup这些构建工具,现在很多Vue3的脚手架模板都默认集成了这个插件。
具体怎么配置呢?如果用vite的话,首先安装unplugin-icons和@iconify/json这两个依赖,@iconify/json是Iconify的图标集合,里面包含了几乎所有主流在线图标库的图标,比如Iconfont、IconPark、Material Design Icons、Font Awesome等等,图标资源超过20万个;然后在vite.config.js里配置一下unplugin-icons插件就行;在单文件里直接用类似
说了这么多,总结一下吧:如果你做的是图标不超过20个的个人小项目或者临时Demo,用本地SVG直接引入;如果你已经在用Element Plus或者Ant Design Vue,直接用对应的自带图标库;如果你需要大量自定义风格统一的图标,用Iconfont或者IconPark;如果你是“懒人”,想用各大平台的图标又不想手动管理,用unplugin-icons,根据自己的项目需求选就行,不用纠结哪个最好,适合自己的才是最好的。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网


