Heroicons
由 Tailwind CSS 团队手工设计的 MIT SVG 图标集,提供四种光学尺寸及 React、Vue 官方组件。
项目概述
Heroicons 收录 316 个界面图标,每个图标提供 24px Outline、24px Solid、20px Mini 和 16px Micro 版本。图标可以直接复制为 SVG,也可以通过官方 React 与 Vue 包按组件导入。
Heroicons 是 Tailwind Labs 为产品界面手工设计的开源 SVG 图标集,但它并不依赖 Tailwind CSS:任何 HTML、模板或前端框架都可以直接使用 SVG。官方网站当前列出 316 个图标,每个图标分别针对 24×24 Outline、24×24 Solid、20×20 Mini 和 16×16 Micro 四种场景绘制,而不是简单缩放同一条路径。项目提供 `@heroicons/react` 与 `@heroicons/vue` 两个官方组件包,组件名称采用 UpperCamelCase 并以 `Icon` 结尾。代码和图标采用 MIT 许可证。它是一套范围克制、风格稳定的界面图标系统,而不是覆盖品牌、Emoji 和行业图形的超大聚合平台。
主要特点
Heroicons 的重点不是追求最大数量,而是以清晰的光学尺寸、统一命名和轻量交付覆盖常见产品界面。
316 个手工界面图标
覆盖导航、操作、状态、媒体、设备和商务等常见产品语义,目录规模适中,容易建立统一的图标词汇。
24px Outline 与 Solid
描边版适合常规操作,填充版适合选中和强调状态,两套图标均针对 24×24 画布绘制。
20px Mini
Mini 版本针对 20×20 画布优化,适合输入框、紧凑按钮、菜单项和表格操作。
16px Micro
Micro 版本为高密度界面和小字号文本旁的图标设计,在 16×16 尺寸下保持清晰轮廓。
独立光学尺寸
不同尺寸拥有针对目标画布调整的几何细节,不是将一个 SVG 等比缩放,因此小尺寸下更容易辨认。
直接复制 SVG
官方网站允许复制单个 SVG,原生 HTML、服务端模板、静态站点和没有官方组件包的框架都能使用。
React 与 Vue 官方组件
`@heroicons/react` 和 `@heroicons/vue` 按尺寸与风格提供命名导出,支持类型检查和静态导入。
可预测的组件命名
图标名称采用 UpperCamelCase 并统一追加 `Icon`,例如 `BeakerIcon`、`XMarkIcon`,便于搜索。
继承 currentColor
图标继承文字颜色,可使用普通 CSS、Tailwind 的 text-* 类或设计令牌控制主题色与状态色。
无运行时服务依赖
SVG 或组件随应用交付,不需要浏览器再请求图标 API,适合离线、严格 CSP 和隐私敏感场景。
MIT 许可证
代码与图标可在个人和商业项目中使用、修改与分发,只需遵守版权与许可声明要求。
适用场景
它适合需要一套克制、统一、可直接进入 React、Vue、Tailwind CSS 或原生 HTML 工作流的界面图标。
Tailwind CSS 产品界面
使用 `size-*`、`text-*` 和状态变体控制图标,与 Tailwind 的布局、颜色和交互类自然组合。
React 与 Vue 控制台
通过官方包为导航、表格、表单、空状态和操作按钮提供类型友好的静态组件。
高密度菜单与表格
根据控件密度选择 20px Mini 或 16px Micro,提升小尺寸下的清晰度。
按钮和表单反馈
用 Outline 表达普通操作、Solid 表达选中或强调状态,并通过颜色继承完成交互效果。
静态 HTML 与服务端模板
直接复制 SVG 到 Astro、Eleventy、Hugo、Rails 或普通 HTML,无需客户端 JavaScript。
设计系统图标层
将 16、20、24 像素和 Outline、Solid 映射为明确的组件尺寸与语义规则。
离线与严格安全环境
所有资源进入本地构建产物,不依赖外部字体、CDN 或图标 API。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Heroicons 擅长的地方
- 由 Tailwind CSS 团队维护,图标视觉语言统一,适合现代产品界面。
- 同一语义提供 16、20、24 像素光学版本,小尺寸不是简单缩放。
- Outline 与 Solid 可建立普通、选中、强调等清晰的状态层级。
- React 和 Vue 官方包拥有简单、类型友好且可静态分析的导入方式。
- 直接 SVG 不绑定任何框架,也不要求项目必须使用 Tailwind CSS。
- 基于 currentColor,普通 CSS、Tailwind 与设计令牌都能控制颜色。
- 不依赖图标字体、CDN 或运行时 API,离线能力和加载行为可预测。
- MIT 许可宽松,适合商业产品、设计系统与内部工具。
需要注意
采用前应考虑的问题
316 个图标能覆盖常见 UI,但专业行业、品牌或长尾语义可能需要 Lucide、Iconify 或自定义图标补充。
Svelte、Solid、Angular 等没有官方包;可复制原始 SVG 或选择社区封装,但需自行评估维护质量。
官方仓库明确表示目前不接受新图标或新框架支持,需求缺口不能预期通过普通提案快速进入上游。
Heroicons 主要是单色产品界面符号;品牌 Logo、Emoji 或多彩图形更适合专门图标集。
16、20、24 像素版本细节不同。把 24px 图标压到 16px 会损失清晰度。
随意混用描边和填充会破坏层级,应明确默认、选中、告警和强调状态。
复制到 React 时需将 `stroke-width` 等属性转换为 JSX 形式;官方 React 包可避免手动转换。
推荐从明确的尺寸子路径静态导入;导入完整命名空间可能把大量未使用图标打入 Bundle。
装饰图标应设置 `aria-hidden="true"`;仅有图标的按钮必须提供 `aria-label` 或可见文本。
这有利于主题适配,也可能在嵌套链接、禁用态和深色模式中产生意外颜色。
当前 npm 稳定版为 2.2.0,仓库仍有 2026 年维护活动,但目录和 API 已较成熟。
MIT 允许商用和修改,但分发代码或图标副本时仍需保留版权与许可声明。
快速开始
下面展示 React、Vue 与原生 SVG 的官方使用方式,并补充尺寸选择、无障碍和发布前检查。
bashnpm install @heroicons/reacttsximport { BeakerIcon as BeakerOutline } from "@heroicons/react/24/outline";
import { BeakerIcon as BeakerSolid } from "@heroicons/react/24/solid";
export function ExperimentStatus({ active }: { active: boolean }) {
const Icon = active ? BeakerSolid : BeakerOutline;
return (
<span className="inline-flex items-center gap-2 text-sky-600">
<Icon className="size-6" aria-hidden="true" />
实验 {active ? "进行中" : "未开始"}
</span>
);
}tsximport { CheckIcon } from "@heroicons/react/20/solid";
import { XMarkIcon } from "@heroicons/react/16/solid";
export function CompactActions() {
return (
<div className="flex items-center gap-2">
<CheckIcon className="size-5 text-emerald-600" aria-hidden="true" />
<button type="button" aria-label="关闭">
<XMarkIcon className="size-4" aria-hidden="true" />
</button>
</div>
);
}bashnpm install @heroicons/vuevue<script setup lang="ts">
import { MagnifyingGlassIcon } from "@heroicons/vue/24/outline";
import { CheckIcon } from "@heroicons/vue/20/solid";
</script>
<template>
<label class="flex items-center gap-2">
<MagnifyingGlassIcon class="size-6" aria-hidden="true" />
<input type="search" aria-label="搜索项目" />
<CheckIcon class="size-5 text-emerald-600" aria-hidden="true" />
</label>
</template>html<button type="button" aria-label="打开菜单">
<svg
class="size-6 text-slate-700"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="1.5"
aria-hidden="true"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
/>
</svg>
</button>bashnpm run lint
npm run typecheck
npm run build
# 检查 Bundle、无障碍名称、16/20/24px 清晰度和深色模式下一步:先按实际显示尺寸选择 16、20 或 24 像素版本,再决定 Outline 或 Solid;不要把 24px 图标机械缩小到密集控件中,也不要用动态图标名称导入整个组件目录。
类似项目
这些项目分别代表前端框架、Tailwind CSS 生态、统一线性图标库和多图标集聚合平台,可帮助判断 Heroicons 是否适合当前产品。
React
用于构建 Web 和原生用户界面的组件化 JavaScript 库。
查看项目Vue.js
渐进式 JavaScript 框架,易学易用且拥有优秀的性能表现。
查看项目Tailwind CSS
以实用类为核心的 CSS 框架,快速构建定制化界面。
查看项目Iconify
统一访问 200 多个开源图标集和 30 万多个 SVG 图标的生态系统,支持组件、CSS、API、设计插件与自托管。
查看项目Lucide
由社区维护的统一线性 SVG 图标库,提供 1,600 多个图标、Tree Shaking 和多框架组件包。
查看项目Phosphor Icons
提供多种粗细与填充风格的图标家族,适合需要更丰富视觉重量的产品。
访问官网Tabler Icons
规模更大的统一线性 SVG 图标集,提供多框架包、Webfont 与设计资源。
访问官网Heroicons vs Lucide
Heroicons 和 Lucide 都提供简洁、可直接嵌入应用的 SVG 图标,但 Heroicons 强调少而精的四套光学尺寸与 React/Vue 官方体验,Lucide 强调更大的统一线性目录和更广泛的框架生态。
| 比较维度 | Heroicons | Lucide |
|---|---|---|
| 核心定位 | Tailwind Labs 的克制型产品界面图标集 | 社区维护的大规模统一线性图标库 |
| 目录规模 | 316 个图标 | 1,600+ 图标,覆盖语义更广 |
| 视觉样式 | Outline 与 Solid 两种主要风格 | 以可调线宽的 Outline 为主 |
| 光学尺寸 | 16、20、24px 独立绘制版本 | 主要基于 24×24 网格并通过 size 调整 |
| 官方框架 | React、Vue,以及原始 SVG | React、Vue、Svelte、Solid、Angular 等广泛生态 |
| 定制能力 | 选择尺寸与 Outline/Solid,继承 currentColor | 可调 size、color、strokeWidth 等描边属性 |
| 社区扩展 | 当前只接受错误修复,不接收新图标和新框架 | 持续接受社区图标贡献,并有实验性 Lucide Lab |
| 品牌与多彩 | 不以品牌或多彩图标为目标 | 同样不收录品牌 Logo,主要是单色界面图标 |
| 许可证 | MIT | ISC,部分 Feather 衍生图标同时保留 MIT |
| 更适合 | 重视光学尺寸、Solid 状态与 Tailwind/React/Vue 体验 | 需要更大目录、更多框架和可调描边的产品 |
如果产品主要使用 React、Vue 或 Tailwind CSS,且希望用 16/20/24px 光学尺寸与 Outline/Solid 建立明确状态,优先选择 Heroicons;如果需要更大的图标目录、更广泛的框架官方包或可调线宽,Lucide 通常更合适。两者都不以品牌 Logo 为目标。
资料核验
版本、维护信息与本页采用的官方资料来源。
官方首页核验为 316 个图标;React npm 稳定版与仓库主包均为 2.2.0。官方 README 列出四种尺寸、React/Vue 安装方式,并说明当前只接受错误修复。GitHub 官方仓库核验时未归档,最近可见提交日期为 2026 年 5 月 12 日。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 5 月 12 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。