Code前端首页关于Code前端联系我们

Vue3项目到底用哪种图标方案最省心高效又贴合需求

terry 26分钟前 阅读数 7 #Vue

首先得先梳理下,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里用就行,这种方式的好处是不用把SVG代码堆在单文件里,代码更整洁,而且如果是稍微多几个图标的话,管理起来也方便点,不用每个都复制粘贴。 那这种本地方案的优缺点是什么呢?优点很明显:完全自定义,想改SVG的path、圆角、渐变,打开文件直接改就行;没有任何第三方依赖,打包体积不会增加额外的库;加载速度也是最快的,没有网络请求,缺点就是太麻烦了,图标稍微多一点,比如后台系统有几十个甚至上百个图标,自己一个个找、一个个导出成SVG、一个个调整样式,工作量太大;而且有时候找的免费SVG质量参差不齐,得自己修半天path的冗余代码,所以这种方案更适合图标不超过20个的个人小项目、临时Demo,或者是对某个特定图标有非常特殊的自定义需求,第三方库找不到一模一样的情况。

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的组件,可以接受一个:icon属性,把导入的图标组件传进去就行,比如,这样代码更统一,也方便控制图标的大小和颜色。 那这种自带UI库的图标方案优缺点呢?优点除了刚才说的样式兼容和使用简单,还有就是图标数量够多,Element Plus Icon大概有300多个常用图标,Ant Design Vue Icon更多,有500多个,完全能满足一般的官网、后台系统的需求;而且这些图标都是专业设计师设计的,风格统一,质量很高,缺点就是扩展性有限,图标库里没有的图标,你还是得用其他方案补;而且如果你没用对应的UI库,单独安装这两个图标库的话,打包体积会有点大,比如Element Plus Icon如果全局注册所有图标,打包出来大概会多几百KB?虽然不算特别大,但如果项目对体积要求很严格的话,还是不太合适,所以这种方案最适合已经在用对应UI库的项目,不管大小都能用,省心省力。

Iconfont/IconPark:适合需要大量自定义风格统一图标的项目

如果你的项目不用主流UI库,或者需要的图标数量特别多,或者对图标风格有特殊要求(比如要做成品牌专属的线性、面性、双色图标),那Iconfont或者IconPark这种在线图标库平台绝对是首选,这两个平台都是国内比较权威的,用户量很大,图标资源也很丰富,而且都支持在线生成图标库、自定义图标样式、批量下载。 先说说Iconfont吧,这个应该是国内开发者用得最多的在线图标平台了,阿里旗下的,图标资源超百万,免费的也很多,具体怎么用在Vue3项目里?有三种常用的方式:第一种是Unicode方式,就是把平台生成的CSS文件或者字体文件下载到本地,然后用类似的方式使用,这种方式现在用得比较少了,因为Unicode编码不好记,而且不支持多色图标;第二种是Font Class方式,这个比Unicode方式方便点,生成的CSS文件里已经把每个图标都对应了一个有意义的类名,比如,记起来方便,但还是不支持多色;第三种是Symbol方式,这个是现在推荐的方式,支持多色图标,而且加载速度也不错,具体就是把平台生成的JS文件下载到本地或者引入在线地址,然后用类似的方式使用,哦对了,Vue3里可以把这个封装成一个通用的Icon组件,这样用起来更方便,比如封装成。 再说说IconPark,这个是字节跳动旗下的在线图标平台,比Iconfont新一点,功能也更强大,它最大的特点是支持一键切换图标风格,比如同一个搜索图标,可以一键从线性变成面性、变成双色、变成填充渐变,甚至可以自定义每个部分的颜色;而且图标资源都是字节设计师原创的,风格更现代,质量也很高;它还支持直接生成Vue3组件,不用自己封装,生成的组件还支持按需引入,打包体积很小,具体怎么用?直接在IconPark官网上选好图标,选好风格,然后下载Vue3组件包就行,下载下来的包里有每个图标的单文件组件,还有一个index.js文件可以用来全局注册或者按需注册,和用Element Plus Icon的方式差不多。 那这种在线平台的图标方案优缺点呢?优点是图标资源超丰富,免费的也足够用;支持自定义图标风格,完全能满足品牌需求;可以批量管理图标,不用自己一个个找一个个改;IconPark还能直接生成Vue3组件,使用也很简单,缺点就是需要先注册平台账号;有时候网络不好的话,引入在线地址的话可能加载会慢一点,所以建议把文件下载到本地;如果选的是第三方设计师的图标,要注意看一下授权协议,避免商业纠纷,所以这种方案适合不用主流UI库、需要大量图标、对图标风格有特殊要求的项目,不管是个人项目还是商业项目都能用。

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插件就行;在单文件里直接用类似或者的方式使用就行,不用导入,不用注册,插件会自动帮你处理,哦对了,这里的icon-mdi-search里,mdi是图标库的前缀,search是图标的名称,你可以在Iconify的官网上找图标,找到之后直接复制组件名称就行,特别方便。 那这个unplugin-icons的优缺点呢?优点简直太多了:图标资源超丰富,超过20万个,几乎找不到你需要的图标;支持按需引入,打包出来的体积超级小,只包含你用的那几个图标;不用手动安装、导入、注册,插件自动处理,太省心了;支持自定义本地SVG,把本地SVG文件放在指定的文件夹里,插件也能自动识别并生成组件;还支持动态组件,和Element Plus的组件配合使用也没问题,缺点就是配置稍微有点麻烦,新手可能需要花点时间看文档;@iconify/json这个依赖安装的时候有点大,大概有几百MB?不过没关系,它只是开发依赖,打包的时候不会被包含进去;还有就是有时候Iconify官网上找图标会慢一点,不过国内可以用镜像站,所以这种方案适合所有类型的Vue3项目,不管是新手还是老手,不管是小项目还是大项目,不管是用不用UI库,都能用,绝对是现在的首选。

说了这么多,总结一下吧:如果你做的是图标不超过20个的个人小项目或者临时Demo,用本地SVG直接引入;如果你已经在用Element Plus或者Ant Design Vue,直接用对应的自带图标库;如果你需要大量自定义风格统一的图标,用Iconfont或者IconPark;如果你是“懒人”,想用各大平台的图标又不想手动管理,用unplugin-icons,根据自己的项目需求选就行,不用纠结哪个最好,适合自己的才是最好的。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门