在组件库的构建中,那些简洁美观、表意清晰的图标组件,宛如灵动的视觉音符,为用户体验增添了独特魅力。你是否好奇,它们究竟是如何在组件库中精彩呈现的呢?此前,我们已深入掌握 SASS 强大的全局变量管理技巧,而在图标组件开发的新征程中,这些技巧将怎样发挥奇妙作用,又会赋予图标组件哪些独特优势呢?带着这些疑问,让我们一同开启组件库首个组件 —— 图标组件的开发之旅,一探究竟。
SVG,全称可缩放矢量图形(Scalable Vector Graphics),是一种基于 XML(可扩展标记语言)的二维图形描述方式。与依赖像素存储的传统位图图像,如 JPEG、PNG 不同,SVG 图形由数学公式精准定义。这就像给图形赋予了 “伸缩自如” 的超能力,无论放大或缩小多少倍,图形始终能保持清晰锐利,线条平滑流畅,细节毫发无损,完美诠释了矢量图形的独特魅力。
下面这段简单代码,直观展现了 SVG 的基础语法:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="red"/>
svg>
其中,标签划定了图形的展示区域,
width
和height
属性分别设定其宽和高。
标签则用于绘制圆形,cx
、cy
确定圆心坐标,r
指定半径,fill
填充颜色。寥寥数行,便能勾勒出一个图形,尽显 SVG 语法的简洁高效✨。
在packages/svgs/components
目录下,我们新增plus.vue
文件来构建plus
SVG 图标组件。
在部分,
标签内的
fill="currentColor"
属性,使图标颜色能随当前文本颜色动态变化,实现了灵活的颜色适配。viewBox="0 0 1024 1024"
属性确定了图标的可视区域,确保在不同显示环境下都能完整呈现。
元素则精准勾勒出plus
图标的形状。这里要特别注意⚠️,不要随意添加额外的fill
属性,否则会导致无法灵活修改图标颜色。在部分,通过
defineOptions
函数定义组件名称为NPlusSvg
,方便在组件库中识别和引用。
为更好管理和组织图标组件,在packages/svgs
目录下新增index.ts
作为入口文件。
import Plus from './components/plus.vue'
export { Plus }
export const svgs = ['Plus'] as const
通过import
语句引入plus.vue
组件,并命名为Plus
,再用export
语句导出,方便在其他地方引用。同时定义常量svgs
,它是包含所有已导出图标的数组。后续新增图标组件时,都需在此文件引入、导出并添加到svgs
数组,为组件库的进一步扩展和维护奠定基础。
as const
是一种类型断言语法,它主要用于将一个表达式的类型推断为最窄的类型。通常用于常量声明,特别是对于对象、数组和字面量类型。正常情况下
const svgs = ['Plus']
的类型会被推断为string[]
。使用了
as const
断言语法它的类型会被推断为readonly ["Plus"]
。并且数组中的元素类型是具体的字面量类型("Plus"
),而不是宽泛的string
类型。这意味着你不能将其他字符串添加到这个数组中,并且数组中的元素不能被重新赋值为其他字符串。
至此,SVG 图标组件包已完成大半,为构建完整强大的组件库迈出了坚实一步。后续我们将继续完善,为组件库增添更多实用、美观的图标组件。
感谢看官看到这里,如果觉得文章不错的话,点个关注不迷路⭐。
诚邀您加入我的微信技术交流群,群里都是志同道合的开发者,大家能一起交流分享摸鱼。期待与您在群里相见,咱们携手在开发路上共同进步✨ !
点我
感谢各位大侠一路相伴,实在感激! 不瞒您说,在下还有几个开源项目 ,它们就像精心培育的幼苗 ,急需您的浇灌。要是您瞧着还不错,麻烦动动手指,给它们点亮几颗 Star ⭐,您的支持就是它们成长的最大动力,在此谢过各位大侠啦!
Nova UI
组件库:https://github.com/gmingchen/nova-ui- 基于 Vue3 + Element-plus 管理后台基础功能框架
- 预览:https://admin.gumingchen.icu
- Github:https://github.com/gmingchen/agile-admin
- Gitee:https://gitee.com/shychen/agile-admin
- 基础版后端:https://github.com/gmingchen/java-spring-boot-admin
- 文档:http://admin.gumingchen.icu/doc/
- 基于 Vue3 + Element-plus + websocket 即时聊天系统
- 预览:https://chatterbox.gumingchen.icu/
- Github:https://github.com/gmingchen/chatterbox
- Gitee:https://gitee.com/shychen/chatterbox
- 基于 node 开发的后端服务:https://github.com/gmingchen/node-server