直接设 height 会让 Logo 变形,因 SVG 或比例异常的 PNG 会强制拉伸失真;正确做法是 width: auto; height: auto 配合 max-height,并避免 font-size 控制、内联样式及 img-fluid 干扰。
给 .navbar-brand img 硬写 height: 32px 看似简单,但 SVG 或高宽比不一致的 PNG 会拉伸失真。Bootstrap 默认不限制图片尺寸,最终高度由图片自身、max-height 和 height: auto 共同决定——关键不是“设多少”,而是“怎么留出弹性空间”。
width: auto; height: auto 是基础,必须同时存在,否则浏览器无法按原始比例缩放max-height 不够:若图片原始高度小于该值,它就按原图渲染;若大于,则被截断或压缩(取决于 object-fit)font-size 缩放 <img>——它对图片无效,只影响图标字体(如 <i class="bi bi-logo">)真正起效的组合不是单个属性,而是四者协同:
.navbar-brand img {display: inline-block;max-height: 38px;height: auto;width: auto;vertical-align: middle;}
display: inline-block 确保 vertical-align 生效(inline 元素默认基线对齐,视觉上偏高)max-height 设为具体像素值(如 38px),避免用 vh 或 em——响应式断点切换时单位换算易出错vertical-align: middle 解决图片和文字基线不对齐导致的“看起来偏上”问题.navbar .navbar-brand img),否则被 Bootstrap 源码覆盖小屏折叠后 .navbar-brand 被包裹进 .navbar-collapse,Flex 上下文变更,原有 max-height 失效,Logo 常突然变矮。这不是 Bug,是 Bootstrap 的布局切换机制。
@media (max-width: 767.98px) { .navbar-brand img { max-height: 32px; } }(注意:Bootstrap 5 断点是 767.98px,不是 768px)<picture> 或 srcset 切换不同尺寸 Logo,确保各源图 aspect-ratio 一致,否则 height: auto 会因宽高比差异导致渲染高度跳变.navbar-brand 加 flex-shrink: 0 以外的 Flex 属性——嵌套 Flex 容易触发 min-width: auto 冗余空白,尤其在折叠态即使把 img 设成 24px,整个导航栏仍卡在 56px 高——问题大概率出在父级:.navbar 的 min-height、padding,或 .navbar-brand 继承的 line-height。
.navbar 的 height 是 auto 还是固定像素;如果是后者,说明有残留的 min-height: 50px(旧版 Bootstrap 或定制构建产物).navbar { min-height: auto; } 或精确设为 min-height: 48px;
.navbar-brand 的行高:.navbar-brand { line-height: 1; },再配合 padding 微调垂直空间background-image 替代 <img>,改 width/height 没用,必须用 background-size: contain 或 100% auto,并配 background-position: center