拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Font Awesome 7:图标库与前端工具集(Web Fonts / SVG / CSS)完整使用指南

Font Awesome 7:图标库与前端工具集(Web Fonts / SVG / CSS)完整使用指南
  • 前端
  • UI组件

【免费下载链接】Font-Awesome

The iconic SVG, font, and CSS toolkit

项目地址:https://gitcode.com/GitHub_Trending/fo/Font-Awesome
点击查看免费下载

导读

本文基于当前仓库 Font-Awesome(Font Awesome Free 7.0.0)的官方 README、npm/Composer 包元数据、编译产物(CSS / SCSS / JS / SVG)与图标元数据,系统讲解这套"图标的 SVG、字体与 CSS 工具集"的版本策略、目录结构、安装方式、三类使用范式(Web Fonts + CSS、SVG with JS、纯 SVG)以及升级、贡献与许可证细节。读完本文,你将能够在自己的 Web、桌面与开源项目中正确地安装、按需引入并灵活组合 Font Awesome 的图标资源,同时理解其版本号规则与许可证边界。

提示:本文所有源码佐证均取自当前仓库,版本与文件结构以仓库实际内容为准(Font Awesome Free 7.0.0,参见 js-packages/@fortawesome/fontawesome-free/package.json)。

一、Font Awesome 是什么:项目定位与版本现状

Font Awesome 是面向 Web 的经典图标库与工具集。正如项目描述"The iconic SVG, font, and CSS toolkit"所示,它同时提供三种形态的图标资源:SVG 文件、Web 字体(icon font)与CSS 样式,供不同技术栈的开发者和设计师按需取用。README 将其定位为"Internet's icon library and toolkit",被大量设计师、开发者和内容创作者使用。

当前仓库对应Version 7(即 Font Awesome 7)。根据 README.md 的版本说明:

  • Font Awesome 6在 7 发布后进入LTS(长期支持)状态,仅接收关键 Bug 修复;
  • Font Awesome 3、4、5已End-of-Life(EOL),官方不再计划发布新版本。

完整版本历史可在官方 Versions 页面查阅;仓库内的 CHANGELOG.md 记录了各版本之间的变更明细,UPGRADING.md 则提供了跨版本的升级指引入口。

二、从 README 看仓库整体结构:每种资源都在哪里

仓库是一个"发布包即源码"的 Monorepo 形态:编译好的 CSS、JS、SVG、字体文件直接放在根目录,而可被 npm 安装的包则聚合在js-packages/下。结合目录清单,主要资源分区如下:

目录/文件内容说明对应 README 章节
css/编译产物:fontawesome.css、all.css、brands.css、regular.css、solid.css、svg-with-js.css、v4-shims.css、v4-font-face.css、v5-font-face.css及其.min.css使用/引入章节
js/SVG-with-JS 运行时:fontawesome.js、all.js、brands.js、regular.js、solid.js、v4-shims.js、conflict-detection.js及其.min.jsSVG with JS 范式
scss/可定制源码:_variables.scss、_core.scss、_icons.scss、_sizing.scss等 20 个 SCSS 模块深度定制
svgs/ 与 svgs-full/单个图标 SVG(分brands/、regular/、solid/三类)纯 SVG 引入
webfonts/fa-brands-400.woff2、fa-regular-400.woff2、fa-solid-900.woff2、fa-v4compatibility.woff2Web Fonts 模式字体文件
metadata/icons.json/icons.yml、categories.yml、icon-families.*、shims.*、sponsors.yml图标元数据与别名
otfs/桌面字体:Font Awesome 7 Brands-Regular-400.otf、Free-Regular-400.otf、Free-Solid-900.otf桌面设计场景
sprites/ 与 sprites-full/雪碧图 SVG(brands.svg、regular.svg、solid.svg)批量图标场景
js-packages/@fortawesome/npm 分包:fontawesome-free、fontawesome-svg-core、free-solid-svg-icons、free-regular-svg-icons、free-brands-svg-icons、fontawesome-common-typesnpm 安装与按需打包
README.md、CHANGELOG.md、UPGRADING.md、CONTRIBUTING.md、CODE_OF_CONDUCT.md、LICENSE.txt文档与规范全部

三、安装:CDN 直链、npm 分包与 Composer

3.1 通过 npm 安装(Web 项目主流方式)

仓库在js-packages/@fortawesome/下提供了按功能拆分的 npm 包。以字体/CSS 为核心的全量包为:

npm i @fortawesome/fontawesome-free

该包在 js-packages/@fortawesome/fontawesome-free/package.json 中声明:

  • main:js/fontawesome.js
  • style:css/fontawesome.css
  • version:7.0.0
  • license:(CC-BY-4.0 AND OFL-1.1 AND MIT)
  • engines:node >= 6

也就是说,安装后可直接引用其css/、js/、webfonts/、svgs/等子目录资源,与仓库根目录下的编译产物一一对应。

如果需要更精细的按需引入(仅打包用到的图标),README 指向的官方文档推荐的拆包方案在仓库中同样以独立包存在:

npm 包说明
@fortawesome/fontawesome-svg-coreSVG-with-JS 的核心运行时(含dom.watch()、library.add()等 API)
@fortawesome/free-solid-svg-iconsSolid(实心)风格图标,1980 个.js+.ts定义文件
@fortawesome/free-regular-svg-iconsRegular(常规)风格图标,274 个.js+.ts定义文件
@fortawesome/free-brands-svg-iconsBrands(品牌)图标,550 个.js+.ts定义文件
@fortawesome/fontawesome-common-types共享的 TypeScript 图标类型定义

从 js-packages/@fortawesome/free-solid-svg-icons 的子目录结构看,每个包内同时提供.js(CommonJS 构建)与.ts(类型定义)两种文件,方便 Webpack/Vite/Rollup 等打包器做 Tree Shaking。

3.2 通过 Composer 安装(PHP 项目)

仓库根目录的 composer.json 定义了fortawesome/font-awesome包,PHP 项目可执行:

composer require fortawesome/font-awesome

该包声明了三个许可证CC-BY-4.0、OFL-1.1、MIT,并在support字段中登记了 issues、source 与 docs 地址,供开发者查阅。

3.3 直接下载 / CDN 引用

README 提供的官方文档链接中包含了 CDN 引入方式(cdnjs.cloudflare.com/ajax/libs/font-awesome/...)。在不使用包管理器时,只需把仓库中的 css/all.min.css(或按风格拆分的brands.min.css/regular.min.css/solid.min.css)与 webfonts/ 下的.woff2字体一起部署到站点即可。

四、使用范式一:Web Fonts + CSS(经典写法)

4.1 引入步骤

  1. 引入 CSS:<link rel="stylesheet" href="css/all.min.css">;
  2. 确保 webfonts/ 目录与 CSS 的相对位置不变(SCSS 中默认字体路径为../webfonts,见 scss/_variables.scss 的$font-path);
  3. 在页面中使用带fa前缀的类名。

4.2 类名语法与三类风格

图标类名遵循<style>-<name>规则,风格前缀对应 css/fontawesome.css 中声明的字体族:

前缀风格典型示例
fa-solid(别名fas)实心图标fa-solid fa-heart
fa-regular(别名far)常规(描边)图标fa-regular fa-heart
fa-brands(别名fab)品牌 Logofa-brands fa-github
<i class="fa-solid fa-heart"></i> <i class="far fa-heart"></i> <!-- 别名写法 -->

从 css/all.css 第 2179 行可以看到底层实现——每个图标类只是设置了一个 CSS 自定义属性:

.fa-heart { --fa: "\f004"; }

而 css/fontawesome.css 开头的伪元素规则负责把该变量渲染出来:

.fa-solid, .fa-regular, .fa-brands, .fa-classic, .fas, .far, .fab, .fa { font-family: var(--fa-style-family, "Font Awesome 7 Free"); font-weight: var(--fa-style, 900); ... } :is(.fas, .far, .fab, ...)::before { content: var(--fa); content: var(--fa)/""; }

即:类名 →--fa变量 →::before伪元素输出字体字形,这是 Font Awesome 6/7 时代的核心渲染机制(V7 兼容 V6 的类名体系)。

4.3 样式:尺寸、固定宽度、旋转、动画等

Font Awesome 的 CSS 体系提供了一系列工具类,其定义分散在 css/fontawesome.css 与 scss/ 各模块中:

  • 尺寸:fa-xs/fa-sm/fa-lg/fa-xl/fa-2xl(分别对应 12/14/20/24/32px 基准),以及fa-2x~fa-10x整数倍缩放;SCSS 中对应的尺寸刻度定义在 scss/_variables.scss 的$sizesmap;
  • 固定宽度:fa-fw(按calc((20/16) * 1em)计算列宽,见 scss/_variables.scss 的$fw-width);
  • 旋转与翻转:fa-rotate-90/180/270、fa-flip-horizontal、fa-flip-vertical(实现于 scss/_rotated-flipped.scss);
  • 动画:fa-spin、fa-pulse(实现于 scss/_animated.scss);
  • 边框与对齐:fa-border、fa-pull-left/fa-pull-right(scss/_bordered.scss、scss/_pulled.scss);
  • 堆叠:fa-stack、fa-stack-1x/fa-stack-2x(scss/_stacked.scss);
  • 列表:fa-ul、fa-li(scss/_list.scss)。
<i class="fa-solid fa-spinner fa-spin fa-2x"></i> <span class="fa-stack"> <i class="fa-solid fa-square fa-stack-2x"></i> <i class="fa-solid fa-flag fa-stack-1x fa-inverse"></i> </span>

4.4 SCSS 深度定制

如果使用 scss/ 源码构建,可以通过 scss/_variables.scss 覆盖默认值:

$css-prefix: fa; // 类名前缀 $style: 900; // 默认字重 $family: "Font Awesome 7 Free"; // 默认字体族 $icon-property: --fa; // 图标变量名 $font-path: "../webfonts"; // 字体文件路径 $primary-opacity: 1; // 双色图标的主题色不透明度 $secondary-opacity: .4; // 双色图标的辅助色不透明度

入口文件 scss/fontawesome.scss 依次@use了core、sizing、widths、list、bordered、pulled、animated、rotated-flipped、stacked、icons等模块,编译后即得到与 css/fontawesome.css 等价的产物。SCSS 变量均带!default,允许在引入前重写实现主题定制。

五、使用范式二:SVG with JS(按需注入)

5.1 原理

SVG-with-JS 模式不再依赖字体文件,而是由 js/fontawesome.js 这个运行时扫描 DOM 中的fa-类名,将<i>替换为内联<svg>。其优势是:只注入实际用到的图标、支持data-*属性动态配置、更容易与前端框架集成。

在仓库中,该模式依赖以下包协同工作:

  • js-packages/@fortawesome/fontawesome-svg-core:核心运行时;
  • js-packages/@fortawesome/free-solid-svg-icons /free-regular-svg-icons/free-brands-svg-icons:三套图标的 JS 定义;
  • css/svg-with-js.css:配套样式(隐藏<i>原始字体字形,避免闪现)。

5.2 典型引入方式(按需打包)

import { library, dom } from '@fortawesome/fontawesome-svg-core' import { faHeart } from '@fortawesome/free-solid-svg-icons' library.add(faHeart) // 注册图标 dom.watch() // 监听 DOM,自动把 <i class="fa-solid fa-heart"> 替换为 SVG

页面中照常书写:

<i class="fa-solid fa-heart"></i>

运行时会把该元素替换为内联 SVG 图标。由于只注册了faHeart,打包体积远小于全量引入——这正是 js-packages/@fortawesome/free-solid-svg-icons 每图标一个独立 JS 文件的原因。

5.3 全量脚本与冲突检测

如果不做按需打包,也可以直接用编译好的全量脚本:

<script defer src="js/all.min.js"></script>

js/all.js 内部已注册全部图标并自动调用 DOM 监听。若页面中还引入了其他版本的 Font Awesome,可额外加载 js/conflict-detection.js 进行冲突检测与报警,避免两套图标互相覆盖。

六、使用范式三:纯 SVG / 雪碧图 / 桌面字体

6.1 单文件 SVG

每个图标在 svgs/solid、svgs/regular、svgs/brands 下各有一份独立的.svg文件(svgs-full/ 为完整版)。以 svgs/solid/heart.svg 为例:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <!--! Font Awesome Free 7.0.0 by @fontawesome ... --> <path fill="currentColor" d="M241 87.1l15 20.7 ..."/> </svg>

特点:fill="currentColor"使其颜色随color样式变化,viewBox="0 0 512 512"统一画布尺寸。可以直接用作<img src>、CSS 背景或插入内联 HTML。

6.2 SVG 雪碧图

sprites/ 与 sprites-full/ 提供了聚合好的雪碧图(brands.svg、regular.svg、solid.svg),适合"一图多图标"场景,配合<symbol>/<use>按 ID 引用,减少请求数。

6.3 桌面设计字体

otfs/ 下的 OTF 字体(Font Awesome 7 Free-Solid-900.otf、Font Awesome 7 Free-Regular-400.otf、Font Awesome 7 Brands-Regular-400.otf)供设计师在 Figma、Sketch、Illustrator 等桌面软件中使用,README 中也提供了桌面版升级指引入口。

七、版本管理:SemVer 与 V7 的特殊规则

README.md 明确:Font Awesome 遵循 Semantic Versioning,版本号格式为<major>.<minor>.<patch>(如7.0.0),但作为包含多种文件与技术形态的umbrella release,在标准 SemVer 之外有四点特别约定:

  1. 任何版本都可能更新既有图标的设计、外观或品牌形象;
  2. patch 版本绝不会故意破坏向后兼容;
  3. minor 版本可能包含不兼容变更,但必须先在 UPGRADING.md 中写明升级指引;
  4. minor 或 patch 版本永远不会删除图标;Bug 修复默认走 patch,若本身涉及不兼容则提升为 minor。

从 js-packages/@fortawesome/fontawesome-free/package.json 可以确认当前仓库即7.0.0,与 README 的 "Version 7" 相互印证。升级时,README 建议查阅 CHANGELOG.md 获取逐版本变更明细,并遵循 UPGRADING.md 中指向的 Web / Desktop 升级指南。

八、图标元数据与别名体系

metadata/icons.json 记录了每个图标的完整元数据(仓库共 9 万余行),以数字字符 "0" 为例:

{ "0": { "changes": ["6.0.0-beta1", "6.2.0", ...], "search": { "terms": ["Digit Zero", "nada", "none", "zero", "zilch"] }, "styles": ["solid"], "unicode": "30", "label": "0", "svg": { "solid": { "raw": "...", "viewBox": [0, 0, 320, 512], "width": 320, "height": 512, "path": "M0 192C0..." } } } }

字段含义:

  • styles:该图标可用的风格(solid / regular / brands);
  • unicode:字形码点(十六进制,如30即\f...类映射的数据来源);
  • svg.raw / path / viewBox:可直接用于生成 SVG 的路径数据;
  • search.terms:搜索关键词,供图标检索;
  • changes:样式变更记录。

对应的 metadata/shims.json 与 css/v4-shims.css、js/v4-shims.js 一起承担v4/v5 旧类名兼容职责——老项目中fa fa-heart之类的写法可通过 shims 无缝迁移到 V7。此外 metadata/icon-families.json 描述图标家族关系,metadata/categories.yml 提供分类检索。

九、许可证与贡献指南

README.md 的 License 章节规定 Font Awesome Free 是免费、开源且对 GPL 友好的,可按不同资源类型适用三种许可证:

资源类型许可证覆盖范围
图标(.svg、.js文件)CC BY 4.0所有以.svg、.js打包的图标
字体(Web/桌面字体文件)SIL OFL 1.1所有字体文件
代码(其余文件)MIT所有非字体、非图标文件

LICENSE.txt 为许可证原文;js-packages/@fortawesome/fontawesome-free/package.json 与 composer.json 也分别以(CC-BY-4.0 AND OFL-1.1 AND MIT)和["CC-BY-4.0","OFL-1.1","MIT"]声明了同样的组合。

关于署名(Attribution):MIT、SIL OFL、CC BY 均要求署名,但仓库内已发布的文件自带精简的署名注释(例如 svgs/solid/heart.svg 首行的<!--! Font Awesome Free 7.0.0 by @fontawesome ... -->),正常使用无需额外操作。官方同时要求使用者不要主动删除这些署名注释。

需要参与开发时,请先阅读 CONTRIBUTING.md(包含开 issue 的指引)并遵守 CODE_OF_CONDUCT.md;跨版本行为规范详见 UPGRADING.md。

十、FAQ 与实战建议小结

  1. Web Fonts 还是 SVG with JS?追求极简引入、零 JS 依赖用 Web Fonts(CSS 方案);追求按需加载体积、与框架深度集成用 SVG with JS;需要原生内联/设计稿素材则直接用svgs/单文件或otfs/桌面字体。
  2. 类名记不住?三个风格前缀 + 图标名即可:fa-solid fa-heart、fa-regular fa-heart、fa-brands fa-github,旧项目可用fas/far/fab别名与 v4 shims 平滑过渡。
  3. 图标没显示?优先检查webfonts/字体文件是否随 CSS 正确部署(SCSS 默认$font-path: "../webfonts"),以及 CSS 中的--fa自定义属性是否被覆盖。
  4. 想更小体积?走 npm 分包 + Tree Shaking,只library.add()用到的图标;生产环境使用*.min.js/*.min.css与 js/conflict-detection.min.js 之外的裁剪组合。
  5. 升级注意什么?任何 minor/patch 升级都不会删图标;遇到不兼容的 minor 升级,先对照 CHANGELOG.md 与 UPGRADING.md 的指引再动手。

本文所有结论均可在当前仓库的 README.md、composer.json、js-packages/@fortawesome/fontawesome-free/package.json、css/all.css、css/fontawesome.css、scss/_variables.scss、metadata/icons.json 等文件中逐一验证。

  • 前端
  • UI组件

【免费下载链接】Font-Awesome

The iconic SVG, font, and CSS toolkit

项目地址:https://gitcode.com/GitHub_Trending/fo/Font-Awesome
点击查看免费下载

相关推荐

上一篇:如何用WeChatMsg将微信聊天记录变成个人数据资产
下一篇:Go Tooling in Action:程序跟踪与性能瓶颈定位技术终极指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表