
vue3.0+ts+element-plus多页签应用模板:如何优雅地使用Svg图标
在组件中使用时,直接提供 通过
发布日期:2021-05-07 18:29:43
浏览次数:30
分类:精选文章
本文共 1720 字,大约阅读时间需要 5 分钟。
Vue3.0 + TypeScript + Element Plus 多页签应用模板:如何优雅地使用 SVG 图标
一、关于 SVG Sprite 技术
雪碧图(Sprite)是一种通过将多个小图标嵌入到单一图片中,根据需求切换不同位置来实现图片展示的技术。与传统雪碧图类似,SVG Sprite 技术通过将多个 <symbol>
标签嵌入到一个 <svg>
标签中,每个 symbol
元素都有唯一的 ID。开发者在使用时,只需调用对应的 ID 即可显示所需 SVG 图标。
二、使用的插件
在封装组件之前,我们需要了解并配置以下两个插件。
1. svg-sprite-loader
这个插件用于生成 SVG 雪碧图。它会将加载的 SVG 图片拼接成一个完整的 SVG 文件,并在页面中通过 <use>
标签复用各个图标。
2. svgo-loader
这个插件用于优化 SVG 代码。它可以删除 SVG 文件中冗余的属性(如 fill
),从而实现通过 CSS 自定义颜色和大小的目的。与 svg-sprite-loader 结合使用,可以实现更灵活的 SVG 处理。
三、安装与配置插件
1. 安装插件
在项目根目录下执行以下命令安装插件:
npm i svg-sprite-loader svgo-loader --save-dev
2. 下载 SVG 图标
将 SVG 图标下载到项目中,建议将文件保存到 src/assets/icons/svg
目录下。
3. 配置 webpack
修改 vue.config.js
文件,添加 SVG 文件的处理规则:
// 配置 svg-sprite-loader 与 svgo-loaderconst svgRule = config.module.rule('svg')svgRule .test(/\.svg$/) .include.add(path.resolve('src/assets/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) .end() .use('svgo-loader') .loader('svgo-loader') .options({ configFile: path.resolve('../svgo.config.js') }) .end()// 配置正常 SVG 文件const normalSvgRule = config.module.rule('normal_svg')normalSvgRule .test(/\.(svg)(\?.*)?$/) .include.add(path.resolve('public/imgs')) .end() .use('file-loader') .loader(path.resolve('node_modules/file-loader/dist/cjs.js')) .options({ name: 'static/img/[name].[hash:8].[ext]' }) .end()
4. 生成 SVG 雪碧图
在浏览器开发者工具中,你应该能看到所有 SVG 文件已经被成功处理,并生成了一个包含所有图标的 SVG 雪碧图。
四、封装 SvgIcon 组件
以下是完整的组件代码:
五、使用说明
name
属性(如:<svg-icon name="leaf" />
)。size
属性支持直接传递像 12px
或 1.5em
这样的值。className
和 pointer
属性可以额外自定义样式。下一篇预告
· Vue3.0 + TypeScript + Element Plus 多页签应用模板:侧边导航菜单(上)
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月13日 09时35分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
为什么阿里巴巴要求谨慎使用ArrayList中的subList方法
2019-03-06
Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
2019-03-06
基于Python的Appium环境搭建合集
2019-03-06
Requests实践详解
2019-03-06
接口测试简介
2019-03-06
Golang Web入门(4):如何设计API
2019-03-06
让sublime实现js控制台(前提是安装了nodejs)
2019-03-06
树莓派连接二手液晶屏小记
2019-03-06
error: 'LOG_TAG' macro redefined
2019-03-06
android10Binder(一)servicemanager启动流程
2019-03-06
ES6基础之——new Set
2019-03-06
nodeJS实现识别验证码(tesseract-ocr+GraphicsMagick)
2019-03-06
玩玩小爬虫——试搭小架构
2019-03-06
AS与.net的交互——加载web上的xml
2019-03-06
Javascript之旅——第八站:说说instanceof踩了一个坑
2019-03-06
Javascript之旅——第九站:吐槽function
2019-03-06
Javascript之旅——第十一站:原型也不好理解?
2019-03-06
Sql Server之旅——第十站 看看DML操作对索引的影响
2019-03-06
十五天精通WCF——第二天 告别烦恼的config配置
2019-03-06
双十一来了,别让你的mongodb宕机了
2019-03-06