sticky-bottom 是首选,因其不被软键盘顶飞;需父容器可滚动且有明确高度、元素为最后一个子元素、ios 15.4前须真机测试;图标文字对齐用 flex+fs-4+fa-fw;小屏用媒体查询隐藏文字、增大图标、设 column 布局;勿加 z-index 干扰 offcanvas/modal。

sticky-bottom 是首选,不是因为新,而是它不被软键盘顶飞
直接用 sticky-bottom 类,别碰 navbar-fixed-bottom。后者本质是 position: fixed,iOS Safari 和多数 Android 浏览器里,<input> 聚焦弹出软键盘时,导航栏会悬空或被挤出视口——这不是你代码写错,是浏览器 viewport 行为导致的。
用 sticky-bottom 的前提有三个:
- 父容器必须可滚动且有明确高度,推荐包裹一层
<div class="d-flex flex-column min-vh-100"> <li> <code>sticky-bottom元素得是父容器的最后一个子元素(否则粘不住) - iOS 15.4 之前对
position: sticky支持不稳定,真机测试不可跳过 - 图标必须包裹在
<a></a>或<button></button>内,否则语义缺失、无障碍失效、触摸反馈丢失 - 统一用
fs-4控制图标大小(Bootstrap 5.3+),避免混用text-lg、h5等导致高度不一致 - Font Awesome 图标加
fa-fw类(固定宽度),防止不同图标宽度差异导致对齐晃动 -
.list-group-item内设display: flex; align-items: center; justify-content: center;,再重置内边距:padding: 0.75rem 0;
图标+文字对齐要靠 flex + fs-4 + fa-fw,不是靠 margin 或 vertical-align
常见错误:只写 <i class="fas fa-home"></i> 首页,结果图标上浮、点击区域小、小屏堆叠错位。根本原因是 inline 元素 baseline 对齐问题,不是 Bootstrap 或 Font Awesome 的 bug。
正确做法:
小屏下自动收缩文字、放大图标,用 CSS 媒体查询,别写 JS 切换 DOM
响应式不是靠 JS 动态增删文字节点,而是用 CSS 控制显隐和布局流。默认横排图标+文字,小屏(如 max-width: 576px)时隐藏文字、增大图标、收紧间距。
关键 CSS 片段:
.bottom-nav .list-group-item span { display: inline; }
@media (max-width: 576px) {
.bottom-nav .list-group-item span { display: none; }
.bottom-nav .list-group-item i { font-size: 1.5rem; margin-bottom: 0.25rem; }
.bottom-nav .list-group-item { flex-direction: column; }
}
注意:flex-direction: column 比强行横排更适配拇指操作;别用 col-2 栅格硬压宽度——内容溢出时不会自动隐藏,得配 text-truncate 或 overflow: hidden。
别给 sticky-bottom 加 z-index,尤其别盖住 offcanvas 关闭按钮
sticky-bottom 默认层级足够,加 z-index: 1070 或更高容易压住 offcanvas、modal 的关闭按钮,用户点不到、关不掉。
若真需提升层级(比如和顶部 navbar 冲突),只加到必要值:z-index: 1050(Bootstrap 官方 navbar 层级),并确保它不覆盖交互控件。
复杂点在于:所有样式都依赖父容器是否真正可滚动。如果页面内容不够长、没触发滚动,sticky-bottom 就退化为普通定位——这点容易被忽略,但真机上一眼就能暴露。











