iconfont真是太好用了,之前一直使用font-class方式来引用,但是iconfont说Symbol 引用才是未来的主流,那么我们是一定要跟上主流的
这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:
支持多色图标了,不再受单色限制。 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。 兼容性较差,支持 IE9+,及现代浏览器。 浏览器渲染 SVG 的性能一般,还不如 png。
在vue中使用Symbol引入貌似比font-class要复杂一些,但只要一次配置好,之后就很方便了。
注意:网络上有些文章说在build/webpack.base.conf.js中写配置,不过现在项目一般使用vue-cli3生成,所以,并没有webpack.base.conf.js。当然vue-cli3生成的项目默认也没有vue.config.js文件,手动建立即可,文件位置和其他配置文件相同。
vue.config.js 可参考:https://cli.vuejs.org/zh/config/
// vue.config.js const path = require("path"); function resolve(dir) { return path.join(__dirname, dir); } // other code ... module.exports = { // other code ... chainWebpack(config) { // set svg-sprite-loader config.module .rule("svg") .exclude.add(resolve("src/icons")) .end(); config.module .rule("icons") .test(/\.svg$/) .include.add(resolve("src/icons")) .end() .use("svg-sprite-loader") .loader("svg-sprite-loader") .options({ symbolId: "icon-[name]" }) .end(); } // other code ... }; // other code ...注意:svg文件夹中存放的是单个图标svg文件,不是把iconfont购物车中的图标打包了那个svg文件。
// icons/index.js import Vue from "vue"; import SvgIcon from "@/components/SvgIcon"; // svg组件 // register globally Vue.component("svg-icon", SvgIcon); const requireAll = requireContext => requireContext.keys().map(requireContext); const req = require.context("./svg", false, /\.svg$/); requireAll(req);icon-class的类名就是iconfont中下载的svg的文件名。 图标大小颜色可以在CSS中设置。
/* 使用 user.svg */ <svg-icon icon-class="user" />