- 前端
- UI组件
【免费下载链接】SuperTinyIcons
Under 1KB each! Super Tiny Icons are miniscule SVG versions of your favourite website and app logos
SuperTinyIcons 是一套以“每个 SVG Logo 体积小于 1KB”为硬性约束的开源图标库,当前仓库共收录 479 个网站与应用的极简 Logo,平均体积不到 534 字节。本文以 README.md 为主线,结合 check.py、test/test.js 与 src/sti 生成器源码,系统讲解它的体积压缩原理、图标提交规范、无障碍实现、npm 安装方式与 Web/React/CSS 使用技巧,帮助你在自己的项目中低成本引入这套图标,并能看懂它背后的一整套校验与生成机制。
项目核心:小于 1KB 的 Logo 是怎么做到的
SuperTinyIcons 的核心目标写在项目描述里:每个图标必须小于 1KB。这不是一句口号,而是贯穿整个仓库的硬性验收标准。
所有 Logo 文件都存放在 images/svg 目录(共 479 个 SVG),它们统一具备以下几何约定:
- 使用512×512 的 viewBox坐标系;
- 图标主体必须适配半径为 256 像素的圆形,即整体落在 512×512 正方形内切圆之内;
- 因为是矢量图形,图标可以无限放大缩小而不失真,既能做 16px 的 favicon,也能做 100px 的品牌展示。
以仓库中真实的体积对比为例:
| 527 字节 SVG | 3,328 字节 PNG | 352 字节 SVG | 2,987 字节 PNG | 235 字节 SVG | 1,615 字节 PNG |
|---|---|---|---|---|---|
| GitHub 527B | GitHub PNG 3.3KB | Twitter 352B | Twitter PNG 2.9KB | Flickr 235B | Flickr PNG 1.6KB |
同样的 Logo,SVG 版本比 PNG 位图小一个数量级,而仓库中大部分图标(如 Vercel 仅 180 字节、Bandcamp 仅 188 字节)又远小于 1KB 上限。
为什么追求“小”:字节即成本
原文档给出了非常直白的理由:字节是要花钱的——存储要花钱、网络传输要花钱、解析渲染也要消耗时间。SVG 是文本格式,路径越精简、属性越少,体积就越小。Simplicity(简洁)应当成为所有工程实践追求的目标。这正是该图标库把“体积”而非“美观丰富”放在第一优先级的原因:在保证 Logo 可辨识的前提下,尽可能压缩每一个字节。
压缩手法:体积从何而来
README 说明,这些文件由人工在 Inkscape、Illustrator 或纯文本编辑器中绘制,再经过多轮压缩工具处理(SVG Path Editor、svgo、svgcleaner 等)。结合仓库文件实际内容,可以总结出几类关键技巧:
1. 保留必要的xmlns命名空间
每个 SVG 的<svg>标签上都保留xmlns="http://www.w3.org/2000/svg"。这在技术上并非严格必需,但某些 Web 浏览器在把 SVG 作为图片渲染时不带它会显示失败,所以保留它是兼容性代价,属于“不能省”的字节。
2. 省略背景色
图标默认是透明的,背景色可以在使用时由页面统一提供(例如放在圆形或圆角容器中)。如果项目里已有背景色,就可以进一步删掉fill背景路径。
3. 简化颜色写法
颜色值可以被简化,例如#FF0000写成red,直接省下 4 个字符。
4. 降低路径精度
绝大多数图标路径的小数位数为0 位,只有少数 Logo 为了观感精度保留 1~2 位小数(如 GitHub 图标中的m0 0H512V512H0这种整数路径)。在可接受范围内继续降低精度,能进一步缩小体积。
5. 单行路径、极简结构
看一个真实的压缩成果——images/svg/github.svg 全文仅 4 行、527 字节:
<svg xmlns="http://www.w3.org/2000/svg" aria-label="GitHub" role="img" viewBox="0 0 512 512"><path d="m0 0H512V512H0" fill="#181717"/><path fill="#fff" d="M335 499c-13 0-16-6-16-12l1-70c0-24-8-40-18-48 57-6 117-28 117-126 0-28-10-51-26-69 3-6 11-32-3-67 0 0-21-7-70 26-42-12-86-12-128 0-49-33-70-26-70-26-14 35-6 61-3 67-16 18-26 41-26 69 0 98 59 120 116 126-7 7-14 18-16 35-15 6-52 17-74-22 0 0-14-24-40-26 0 0-25 0-1 16 0 0 16 7 28 37 0 0 15 50 86 34l1 44c0 6-3 12-16 12-14 0-12 17-12 17H347s2-17-12-17Z"/></svg>一个完整 Logo 只用一个<path>的d属性画完主体轮廓,颜色仅两个fill值,这正是“字节成本”理念的极致体现。
尺寸校验背后的自动化:源码如何保证“小于 1KB”
“小于 1024 字节”不是口头承诺,而是被代码强制执行的。仓库里有两条独立的校验链路:
1. Python 全量校验脚本 check.py
check.py会遍历 images/svg 下所有文件,执行一系列检查:
- 文件类型:必须是
.svg后缀; - XML 合法性:使用
xml.etree.ElementTree解析,非法文件直接报错; - 格式规范:自动把 CRLF 换成 LF、双空格换成单空格、去掉结尾多余换行,并强制要求文件第 2 行以
aria开头、第 3 行是viewBox="0 0 512 512"(DuckDuckGo 例外,因为它的画布几何不同); - W3C 标准校验:启动仓库内置的 Nu Validator(test/vnu.jar,需 JDK 17+),把 SVG 包进一个最小 HTML 文档后 POST 到本地 8888 端口,任何校验错误都会导致失败;
- 体积上限:每个文件
st_size必须 ≤ 1023 字节,否则输出Files must be under 1,024 Bytes并置失败标志; - 引用完整性:每个图标必须在 images/reference 目录下同时存在对应的
.url引用文件和 PNG/JPG/SVG 参考图(如github.url、github.png)。
运行方式:
uv run check.py # 或 python3 check.py全部通过时会输出:✅ All files in the correct format and under 1,024 Bytes.
2. Node.js 测试 test/test.js
配合npm test(底层为 mocha + chai),对变更文件逐项断言:
- 文件大小必须
lessThan(1024); - 将 SVG 包装为 HTML 后提交到 Nu Validator 在线服务,响应必须为空字符串(无错误)。
it("should be under 1KB", () => { expect(fs.statSync(filepath).size).to.be.lessThan(1024) })也就是说,任何人新增或修改一个图标,都会被这两套自动化工具按同样标准把关。
提交新图标:规则、模板与无障碍
如果你希望为仓库贡献新 Logo,原文档明确了三条硬性规则,缺一不可:
- 文件必须小于 1024 字节(最大 1023 字节),没有讨价还价的余地;
- 必须能放进半径 256 像素的圆内,可用
rx="50%"自行检查; - 必须代表某个流行服务的当前官方 Logo。
最小模板
至少需要以下组成部分:
<svg xmlns="http://www.w3.org/2000/svg" aria-label="..." role="img" viewBox="0 0 512 512"><path d="m0 0H512V512H0" fill="#fff"/> ... </svg>无障碍(Accessibility)是默认内置的
每个图标天生具备无障碍属性(源码 src/sti/utils.py 的Icon类也会读取并保留它):
role="img":让<svg>在浏览器无障碍树中被识别为图片;aria-label="XYZ":用品牌名给图标提供可读名称。
特别注意:如果通过<img src="...svg">方式引用,浏览器不会识别 SVG 内部的 ARIA,此时仍应在<img>上写alt属性。
尺寸指南图:绿、黄、红三区
提交前请对照官方尺寸指南(见 images/guidelines/guideline.svg)排版:
- 绿色:安全区,图标主体应放在这里;
- 黄色:相当于“路肩”,用于容纳需要伸出主体的元素(如角标、装饰件);
- 红色:禁区,图标不能触及;红色圆圈同时也表示圆形裁剪后的最终呈现效果。
遵循这套分区,无论前端最终用什么圆角/圆形裁剪,图标观感都不会被破坏。
安装与使用:npm 包与四种接入方式
安装
npm install --save super-tiny-icons包体积配置见 package.json 的files字段——发布时仅包含images/svg/目录,非常轻量。
方式一:传统<img>直接引用
<img src="./node_modules/super-tiny-icons/images/svg/github.svg" />方式二:React / JSX 模块化导入
import logo from "super-tiny-icons/images/svg/github.svg"; <img src={logo} />;方式三:CSS 自定义尺寸与形状
图标是矢量,尺寸完全由 CSS 控制,常见的方形/圆角/圆形三种容器只需改width与border-radius:
<style> .small-square { width: 20px; } .medium-rounded { width: 50px; border-radius: 10%; } .large-circular { width: 100px; border-radius: 50%; } </style> <img src="images/svg/reddit.svg" class="small-square" /> <img src="images/svg/reddit.svg" class="medium-rounded" /> <img src="images/svg/reddit.svg" class="large-circular" />因为图标本身设计成适配 256 半径圆,border-radius: 50%这种圆形裁剪下边缘元素也不会被切坏。
方式四:Android Vector Drawable
除 SVG 外,仓库还提供 images/android-vector-drawable 目录下的Android Vector Drawable版本(如github.xml、android.xml),可直接用于 Android 应用的drawable资源。注意:这类 XML 格式不保证小于 1KB。
仓库自带的站点与图集生成器
除了图标本身,仓库的 src/sti 目录还包含一个完整的 Python 工具链,用于把 479 个图标汇总成可浏览的页面和图集:
- src/sti/utils.py:
Icon数据类负责解析每个 SVG 的viewBox、aria-label、文件大小,并统计全库的最小/最大/平均/总字节数(get_icons_from); - src/sti/app.py:基于 Flask 的 Web 应用,路由渲染
index.html、libraries.html、reference.html等页面,并提供/atlas.svg(整张图集)与/mxlibrary.xml(draw.io 素材库)端点; - src/sti/atlas.py + src/sti/cli.py:命令行生成器,可一键输出
atlas.svg(一个文件容纳全部图标,通过:target选择器切换显示,模板见 src/sti/templates/atlas.svg)以及 draw.io 可直接导入的atlas.drawio文件:
python -m sti.atlas --format svg # 输出整张 SVG 图集 python -m sti.atlas --format drawio # 输出 draw.io 素材库这意味着这套图标不仅是静态资源,还可以被程序化地汇总、统计、转成其他设计工具可用的格式。
许可证与合规说明
绝大多数矢量 Logo 基于他人作品重绘,仓库在 README.md 的 Licenses 一节逐一列出了来源与许可证(如 Aha-Soft 的 CC-BY、RSS 的 MPL 1.1、Mastodon 的 AGPLv3、Docker 的 Apache 等,部分来自 SVGporn 的 CC0 素材)。凡能保留原始许可证的都尽量保留。需要提醒的是:部分 Logo 可能仍受版权与商标法保护,但正如原文档所说,这些文件已经小到“可以整段记进内存”,使用时应自行评估商标展示场景的合规要求。
结语
SuperTinyIcons 的价值不在于“好看”,而在于把512×512 矢量 Logo 压缩到 1KB 以内这条反直觉的工程约束贯彻到底:几何上适配圆形裁剪、结构上精简到单路径、流程上由 check.py 和 test/test.js 双重自动化把关。如果你正在为站点、文档、移动端或桌面工具寻找一组体积友好、开箱即用且带无障碍支持的多品牌 Logo,这套仓库既可以直接通过npm install super-tiny-icons使用,也可以按 CONTRIBUTING.md 的流程提交你自己的 1KB 作品。
- 前端
- UI组件
【免费下载链接】SuperTinyIcons
Under 1KB each! Super Tiny Icons are miniscule SVG versions of your favourite website and app logos
相关推荐
如何快速掌握SuperTinyIcons:超小SVG图标库的终极使用指南
如何快速掌握SuperTinyIcons:超小SVG图标库的终极使用指南 SuperTinyIcons是一个提供386个超小SVG图标的开源项目,每个图标文件大
前端UI组件Bootstrap Icons Cart X 图标全解析:从 SVG 源码到图标字体、Sprite 与 TypeScript 的完整使用指南
Bootstrap Icons Cart X 图标全解析:从 SVG 源码到图标字体、Sprite 与 TypeScript 的完整使用指南 Cart X( b
前端Blueprint 图标包 @blueprintjs/icons 完整指南:从安装使用到源码级图标新增与校验流程
Blueprint 图标包 @blueprintjs/icons 完整指南:从安装使用到源码级图标新增与校验流程 Blueprint 是一个基于 React 的
前端UI组件设计系统
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考