- 前端
【免费下载链接】icons
Official open source SVG icon library for Bootstrap.
在 Bootstrap Icons 这个官方开源 SVG 图标库中,exclamation-square-fill(实心感叹号方形图标)是 "Alerts, warnings, and signs"(警告、提示类)分类下的典型成员,承载着表单校验、危险操作确认、权限提醒等高频 UI 场景。本文以该图标对应的文档页docs/content/icons/exclamation-square-fill.md为骨架,结合仓库内的 SVG 源文件、图标字体构建产物与 Hugo 文档模板源码,系统拆解它的设计结构、四种使用方式、代码点映射原理,以及单个图标文档页在官网中的生成机制,读完即可在自己的 Bootstrap 项目中直接落地使用。
一、图标文档页:元数据即内容骨架
每个 Bootstrap Icons 图标在仓库中都对应一份独立的 Hugo Markdown 文档,位于docs/content/icons/目录下。exclamation-square-fill.md 的完整内容如下:
--- title: Exclamation square fill categories: - Alerts, warnings, and signs tags: - alert - warning ---这份 front matter 是该图标全部文档内容的"元数据骨架":
- title:图标显示名称
Exclamation square fill,用于图标详情页的 H1 标题与面包屑导航; - categories:归属分类
Alerts, warnings, and signs,在官网首页按分类浏览时生效; - tags:
alert、warning两个检索标签,供图标列表页的实时过滤搜索使用。
可以看到,图标列表页的过滤逻辑正是读取这些字段:docs/layouts/partials/icons.html中每个图标条目渲染了data-name、data-tags、data-categories三个自定义属性,前端搜索框按用户输入对这些属性做过滤,从而在数千个图标中快速定位到本图标。
二、SVG 源码结构:16×16 网格上的实心警告标识
图标的本体是 icons/exclamation-square-fill.svg,完整内容只有一行:
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-exclamation-square-fill" viewBox="0 0 16 16"> <path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm6 4c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995A.905.905 0 0 1 8 4m.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2"/> </svg>从源码结构可以读出以下关键设计:
- 16×16 viewBox:所有图标统一在 16×16 像素网格上绘制(README 中也明确新图标先在 Figma 中按 16×16 网格设计),保证整套图标视觉比例一致;
- fill="currentColor":图标颜色完全继承 CSS 的
color属性,因此可以像文本一样通过text-danger、text-warning等颜色工具类随时改色; - 单路径绘制:该 SVG 只包含一条
<path>,将"实心方形底"与"感叹号"合并在同一路径中(fill方案、无 stroke),这是-fill系列图标区别于描边版的关键——描边版通常拆成两条路径(外框线 + 感叹号),如 exclamation-square.svg 所示,其外框由M14 1a1 1 0 0 1 1 1v12...和M2 0a2 2 0 0 0-2 2v12...两段构成,而感叹号则由独立的第二路径M7.002 11a1 1 0 1 1 2 0...绘制; - class 命名:
bi bi-exclamation-square-fill与字体图标类名、TypeScript 类型名保持一致,形成"文件名 = 类名 = 代码点键名"的统一命名约定。
对比两个版本不难发现:实心版把外框画成完整的填充矩形并自带圆角(M2 0a2 2 0 0 0-2 2v12...中的a2 2即半径 2 的圆角弧线),感叹号则保持相同的M7.1 4.995、M8 4等坐标,两者在放大预览(如详情页 10em 展示)时观感统一。
三、四种使用方式:从内联 SVG 到 SVG sprite
README 明确该项目支持四种使用方式:内联复制 SVG、<img>引用、SVG sprite、CSS 图标字体。针对本图标逐一说明:
1. 内联 SVG(Copy HTML)
直接把上面的 SVG 源码粘贴进 HTML,这是文档详情页 "Copy HTML" 区块提供的默认做法,适合对样式有精细控制、需要按场景缩放改色的场景。
2.<img>元素引用
<img src="/icons/exclamation-square-fill.svg" alt="警告" width="16" height="16">适合静态图片场景,但无法继承currentColor动态变色。
3. SVG sprite 引用
仓库根目录的 bootstrap-icons.svg 聚合了全部图标,每个图标是一个带id的<symbol>。图标列表页正是这样引用的(见 docs/layouts/partials/icons.html):
<svg class="bi" width="1em" height="1em" fill="currentColor"> <use xlink:href="../bootstrap-icons.svg#exclamation-square-fill"/> </svg>浏览器只会加载一次 sprite 文件,后续引用全部走本地缓存,同时保留了fill="currentColor"的着色能力,是大型项目中的推荐方案。
4. CSS 图标字体
<i class="bi bi-exclamation-square-fill"></i>引入 font/bootstrap-icons.css 或压缩版 font/bootstrap-icons.min.css 后即可使用;字体文件位于 font/fonts/bootstrap-icons.woff2 与 font/fonts/bootstrap-icons.woff。该方式是文档详情页 "Icon font" 区块默认给出的代码片段,字体图标随字号缩放、支持所有文本样式,适合按钮、标签等 UI 元素。
四、代码点映射:从 \f338 到 U+F338
字体图标的核心是"图标名 → 私有区代码点"的映射。在 font/bootstrap-icons.css 中:
.bi-exclamation-square-fill::before { content: "\f338"; }即通过::before伪元素注入代码点\f338。这一映射同时存在于四份构建产物中,用途各异:
| 产物文件 | 记录位置 | 内容 |
|---|---|---|
| font/bootstrap-icons.css | 第 596 行 | .bi-exclamation-square-fill::before { content: "\f338"; } |
| font/bootstrap-icons.scss | 第 603 行 | "exclamation-square-fill": "\f338"(Sass 变量$bootstrap-icons-map中的键值对) |
| font/bootstrap-icons.json | 第 569 行 | "exclamation-square-fill": 62264(十进制数值) |
| font/bootstrap-icons.ts | 第 863 行 | "exclamation-square-fill"(联合类型成员) |
十进制 62264 换算为十六进制即0xF338,落在 Unicode 私有使用区(Private Use Area),因此各环境下的等价写法为:
- Unicode:
U+F338 - CSS:
\f338 - JavaScript:
\uf338 - HTML 实体:

这些写法正是文档详情页 "Code point" 区块展示的四种形式(见 docs/layouts/icons/single.html 中通过transform.Unmarshal读取font/bootstrap-icons.json并printf "%X"格式化输出的逻辑)。
值得留意的是,同一个警告语义在图标库中按容器形状被拆成了多个相邻代码点,从 font/bootstrap-icons.css 可以读出完整"警告家族":
| 图标 | 代码点 |
|---|---|
| exclamation-circle-fill / exclamation-circle | \f332/\f333 |
| exclamation-diamond-fill / exclamation-diamond | \f334/\f335 |
| exclamation-octagon-fill / exclamation-octagon | \f336/\f337 |
| exclamation-square-fill/ exclamation-square | \f338/\f339 |
| exclamation-triangle-fill / exclamation-triangle | \f33a/\f33b |
| exclamation | \f33c |
设计上沿用同一套"方形/圆形/三角形/菱形/八角形 × 实心/描边"矩阵,方便开发者按界面风格灵活选型:实心方形警示常用于表单错误提示,三角形则是经典警告标志。
五、TypeScript 类型与 Sass 地图:工程化接入
如果项目使用 Sass 与 TypeScript,还可以直接消费仓库的工程化产物:
Sass 侧:将font/bootstrap-icons.scss引入构建链后,字体通过@font-face声明加载fonts/bootstrap-icons.woff2与.woff(文件哈希由$bootstrap-icons-font-hash控制,用于缓存失效),同时$bootstrap-icons-map提供了完整的名称→代码点映射,可用于生成自定义的图标类或在编译期做校验。
TypeScript 侧:font/bootstrap-icons.ts导出一个由全部图标名组成的字符串联合类型,"exclamation-square-fill"是其中的合法成员(第 863 行)。在类型化项目中,可以用它约束图标名参数,让 IDE 自动补全并杜绝拼写错误:
type BootstrapIconName = "exclamation-square-fill" | "exclamation" | ...; function renderIcon(name: BootstrapIconName): string { // 结合 bootstrap-icons.json 中的代码点生成字体字符或 sprite 引用 }六、一行 front matter 如何生成完整详情页
官网每个图标的详情页(大型预览、Examples、Download、Icon font、Code point、Copy HTML 六个区块)并非手写,而是由 Hugo 模板根据.md文件名动态渲染。核心逻辑在 docs/layouts/icons/single.html:
- 通过
printf "/icons/%s.svg" .File.TranslationBaseName根据文档文件名拼接出 SVG 源文件路径(exclamation-square-fill.md→/icons/exclamation-square-fill.svg); - 用
readFile读取 SVG 内容并safeHTML注入模板,于是"大图预览"和 "Examples" 区块(标题场景、行内文本、链接、三种按钮、输入组前置图标)中的图标全部来自这一个源文件; - "Download" 区块提供 SVG 源文件的下载链接;
- "Icon font" 区块按
bi bi-<文件名>约定生成<i>标签片段; - "Code point" 区块按上文所述从
font/bootstrap-icons.json读取十进制数值并转成十六进制,输出 Unicode / CSS / JS / HTML 四种写法; - "Copy HTML" 区块展示完整可复制的 SVG 源码。
这意味着:修改一个图标,只需改动icons/下的 SVG 源文件与docs/content/icons/下的元数据文档,再用npm run icons(优化 SVG、生成字体与 sprite,见 README.md)与npm run pages(为每个图标生成模板页)重新构建即可,官网展示与字体产物会自动同步。
七、实战示例:把图标放进真实 UI
结合 docs/layouts/icons/single.html 中 "Examples" 区块的模板结构,以下场景可以直接照搬:
表单错误提示(输入组前缀)
<div class="input-group"> <span class="input-group-text text-danger"> <i class="bi bi-exclamation-square-fill"></i> </span> <input type="text" class="form-control" placeholder="请输入有效邮箱" aria-label="邮箱"> </div>操作按钮(危险动作确认)
<button type="button" class="btn btn-danger"> <i class="bi bi-exclamation-square-fill"></i> 删除该项目 </button>行内警告文案与链接
<p class="text-warning"> 当前配置存在冲突 <a href="#" class="text-decoration-none">查看详情 <i class="bi bi-exclamation-square-fill"></i></a> </p>由于 SVG 与字体都继承currentColor,只需切换text-danger/text-warning/text-body-secondary等颜色工具类即可完成语义化配色;缩放方面,字体图标随font-size变化,内联 SVG 可通过width/height或font-size: 10em这类样式控制。
结语
exclamation-square-fill虽只是 Bootstrap Icons 两千多个图标中的一个,却是理解整个图标库"文档—源码—产物"工作流的绝佳样本:一份 8 行的 front matter 元数据,串联起 SVG 源文件、CSS 代码点、JSON 数值表、TS 类型和 Hugo 模板渲染的全链路。掌握它的结构、代码点(\f338/U+F338)与四种接入方式,即可举一反三,在整个 "Alerts, warnings, and signs" 分类中自如选用合适的警告图标。
- 前端
【免费下载链接】icons
Official open source SVG icon library for Bootstrap.
相关推荐
Bootstrap Icons 的 exclamation-square 警告图标:SVG 结构、字体码位与四种使用方式详解
Bootstrap Icons 的 exclamation square 警告图标:SVG 结构、字体码位与四种使用方式详解 在 Bootstrap 官方开源
前端用 IoT 预测植物生长:基于温度遥测与生长度日(GDD)的农业实践指南
用 IoT 预测植物生长:基于温度遥测与生长度日(GDD)的农业实践指南 本文是 IoT For Beginners 课程中"农业"专题第一课(2 farm/l
前端Bootstrap Icons 的 arrow-up-right-square-fill 图标:SVG 源码、字体用法与全套实现解析
Bootstrap Icons 的 arrow up right square fill 图标:SVG 源码、字体用法与全套实现解析 本文以 Bootstrap
前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考