1、svg
- svg是一种可缩放矢量图形:改变尺寸的情况下其图形质量不会有损失
- 可自定义填充颜色
2、创建svg-icon组件
由于直接使用svg并不方便,再次我们需要进行进一步封装;在components下新建SvgIcon文件
<template>
<svg class="__icon" aria-hidden="true">
<use :xlink:href="fullName"></use>
</svg>
</template>
<script lang="ts">
import { Options, Vue } from "vue-class-component";
@Options({
props: {
name: String,
},
computed: {
fullName() {
return `#icon_${this.name}`;
},
},
})
export default class SvgIcon extends Vue {}
</script>
<style scoped lang="scss">
.__icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
以上代码我们需要注意两点
- currentColor:css中使用该变量后,用户可自定义color填充颜色
- fullName:
svg名称(symbolId),结合后面svg-sprite-loader配置使用
3、引用SvgIcon组件
-
svg文件路径:@/assets/svg
-
在main.js入口文件注册SvgIcon组件
import SvgIcon from '@/components/SvgIcon/index.vue'// svg component // 公用全局本地 svg icon const requireAll = (requireContext: any) => requireContext.keys().map(requireContext); const req = require.context('@/assets/svg', true, /\.svg$/); requireAll(req); createApp(App) .use(store) .use(router) .component('svg-icon', SvgIcon) .mount("#app");
4、配置
首先安装svg-sprite-loader(npm install svg-sprite-loader --save-dev),完成后在vue.config.js
文件进行配置:
const path = require('path');
const resolve = dir => path.join(__dirname, dir);
module.exports = {
chainWebpack: config => {
// use svg
const svgRule = config.module.rule('svg');
svgRule.uses.clear();
svgRule.include
.add(resolve('src/assets/svg')) // svg文件路径
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon_[name]', // svg-icon组件内部的名称规则
});
}
}
5、使用svg-icon
完成以上操作,我们便可以使用svg-icon组件了:
<template>
<div class="about">
<h1>This is an about page</h1>
<svg-icon name="bug" />
</div>
</template>
页面显示:
修改颜色: