Bootstrap 5+ 的 alert 默认无图标,若显示图标则来自手动添加、第三方插件或自定义 CSS;推荐用伪元素 + Font Awesome 字符码插入图标,需匹配字体族名、字重并设置 padding-left 和绝对定位。
直接用伪元素 + font awesome 字符码替换,别碰 alert 自带的图标逻辑——bootstrap 5+ 的 alert 默认根本不带图标,所谓“默认图标”其实是你自己或第三方加的,或者你误以为它有。
Bootstrap 官方 Alert 组件(div.alert)在 v5.3+ 中完全不渲染任何图标。如果你看到图标,大概率来自以下之一:
<i class="fa-solid fa-info-circle"></i> 这类 HTML::before 插入了图标(比如你之前写过类似 .alert::before 的规则)先打开浏览器开发者工具,选中 Alert 元素,看 computed styles 里有没有 ::before 内容,或 DOM 里有没有 i 标签。没有的话,就不是“修改”,而是“添加”。
这是最干净、无 JS 依赖、兼容性好且不干扰 Bootstrap 原逻辑的方式。前提是 Font Awesome 已正确加载(CSS 版本,非 SVG-JS 版)。
font-family 必须匹配实际加载的 FA 版本:"Font Awesome 6 Free"(v6),不是 "FontAwesome" 或 "fontawesome"
font-weight: 900 是 solid 图标必需值;若用 regular 图标(如 fa-regular fa-circle-info),得改 font-weight: 400 并换字体族名为 "Font Awesome 6 Free"(v6 中 solid/reguar 共享同一字体族名,仅靠 weight 区分).alert 加 padding-left: 2.5rem,否则文字会覆盖图标position: absolute + top: 50% + transform: translateY(-50%),确保垂直居中,不受行高影响示例 CSS:
.alert { position: relative; padding-left: 2.5rem;}.alert::before { font-family: "Font Awesome 6 Free"; font-weight: 900; content: "f05a"; /* info-circle */ position: absolute; left: 1rem; top: 50%; transform: translateY(-50%); color: inherit;}.alert-success::before { content: "f058"; } /* check-circle */.alert-warning::before { content: "f071"; } /* exclamation-triangle */.alert-danger::before { content: "f057"; } /* times-circle */
.btn-close)里的 × 图标Alert 右上角那个 × 不是文字,是 Bootstrap 用 background-image 渲染的 SVG,且带 !important。想换成 FA 图标,不能只改 background,得用伪元素重绘。
background-image,避免冲突;加 .btn-close::before 插入 FA 字符font-family: "Font Awesome 6 Free" 和 font-weight: 900
line-height: 1 和 vertical-align: middle,否则 × 字符会上下偏移:hover 和 :disabled 状态,否则交互时图标颜色/尺寸可能突变示例:
.btn-close { background-image: none; font-size: 1.25em; width: 1.5em; height: 1.5em;}.btn-close::before { content: "f00d"; font-family: "Font Awesome 6 Free"; font-weight: 900; line-height: 1; vertical-align: middle;}
最常被忽略的是:FA 字体路径或版本不匹配导致图标显示为方块,以及忘记给 .alert 加 padding-left —— 这两个问题占图标错位/不显示案例的 80% 以上。