这一章回答一个问题:一个 sag-icons 风格的图标是怎么被画出来的。
我们不打算把你培训成设计师。但如果你要做一个图标库,至少要懂几个关键的设计决策——它们决定了你的图标能不能被工程化、能不能保持视觉一致、能不能被 CSS 主题系统驱动。
读完这一章你会知道:
data-tone 标记语义色块你可能觉得"设计"是设计师的事,前端只管搬砖。但做图标库不是这样。
库里的图标必须有视觉一致性——同样的圆角、同样的线宽、同样的视觉重量。如果每个图标是不同人凭感觉画的,放在一起就会显得"杂乱"。
而 sag-icons 这种"多色调"图标库还有额外的约束:每个图标必须能被 CSS 主题系统驱动。这意味着图标作者要在画的时候就把"这块是蓝色、那块是绿色"标记好——不是画完事再补。
下面这些设计规范,sag-icons 都遵循。后面我们讲 Figma 操作时,你会看到这些规范是怎么落到几何里的。
为什么 24×24?因为它是事实标准——Lucide、Tabler、Heroicons、Phosphor 全是 24×24。一旦换尺寸,你就要给所有下游应用做适配,得不偿失。
roundround24×24 + 2px stroke 是经过验证的"小尺寸可读"组合。再小的画板(如 16×16)就要降到 1.5px stroke,会出现亚像素模糊。
rx="2"(图标大小约 7-8px)rx="3" 或 rx="4"r="1.5" 或 r="2"这没有标准答案,但所有图标用同一套规则。一旦混用就会出现"这个圆角硬、那个圆角软"的违和感。
sag-icons 定义了 5 个语义色:
| 语义 | 变量 | 典型用途 |
|---|---|---|
| 蓝色 | data-tone="blue" | 主色、品牌标识 |
| 青色 | data-tone="cyan" | 次主色、信息 |
| 绿色 | data-tone="green" | 成功、确认 |
| 琥珀 | data-tone="amber" | 警告、提示 |
| 白色 | data-tone="white" | 高亮、负空间 |
注意:sag-icons 不用红色。红色通常代表"错误/危险",会冲淡其他语义色的视觉密度。如果一定要做"错误"图标,琥珀色 + 警告图标本身的语义就够用了。
这套色板映射在
src/css/svg-icon.ts:9-17。
我们以 home 为例,看清一个 sag-icons 图标内部结构:
三个 path,分别承担不同角色:
data-tone="blue"):语义色块。被 CSS 主题系统接管。data-tone):永远白色。用 fill="#fff" 写死——门不应该跟着主题变。data-tone="blue"):语义色块。注意第二点:不是所有 path 都需要语义色。像"门"这种功能性固定的元素,直接写死颜色反而更安全——它不会跟着主题切换出错。
对应文件:
src/data/icons/base/home.ts
现在我们画一个新图标,从空白画板开始。
<your-lib-name>-iconsicon-home(或你想画的图标)建议在 Figma 里建立这样的目录:
每个图标做成 Figma Component,命名 icon-<kebab-case>。这样导出 SVG 时会自动命名。
以 workbench 为例(这是 sag-icons 的真实图标):
rx="2"data-tone="blue"data-tone="cyan"data-tone="green"data-tone="amber"对应文件:
src/data/icons/nav/workbench.ts
上图是占位符。实际教程里你会看到 Figma 截图。
关键设计动作:
rx="2" 而不是 rx="0"——保持柔和在 Figma 里,"data-tone"不是 Figma 原生属性。你有两个办法:
办法 A:用图层命名约定
在 Figma 里把每个色块的图层命名为 tone-blue / tone-cyan 等。导出 SVG 后用脚本批量替换为 data-tone 属性(后面第 3 章会讲脚本)。
办法 B:用 Figma 插件
装 Figma Data Tone 插件(如果有),或在 SVG 导出后用 sed 替换。
sag-icons 实际用的是办法 A:图层命名 → 脚本转换。这是最稳的版本控制友好的方式。
画完一个图标后问这几个问题:
如果你打算扩到 200+ 图标,一致性比单个图标的美观更重要。
sag-icons 把 78 个图标分成 7 个类别:
类别不是强约束,但合理分类对:
第 3 章我们会看到,类别直接映射到 src/data/icons/<category>/ 目录。
到这里你应该明白:
data-tone下一章我们讲怎么把 Figma 里的图标变成 TS 文件——也就是 sag-icons 的图标数据层。
| 内容 | 路径 |
|---|---|
| 调色板定义 | src/css/svg-icon.ts:9-17 |
| home 图标 | src/data/icons/base/home.ts |
| workbench 图标 | src/data/icons/nav/workbench.ts |
| 类别定义 | src/data/categories.ts |