卡片高度不一致非bug,是bootstrap流式布局特性;h-100需配合父容器flex布局与明确高度上下文才生效,否则因继承链断裂、样式覆盖或图片加载延迟而失效。

卡片高度不一致不是 bug,是 Bootstrap 默认流式布局的必然结果;靠 h-100 单独加在 .card 上基本无效,必须配合父容器的 flex 布局和高度上下文才能生效。
为什么加了 h-100 还是不等高
h-100 只是“继承父容器 100% 高度”,但前提是父容器得有高度可被继承。常见断链点:
-
.card的直接父元素不是.col(比如中间多套了一层<div>),<code>h-100就卡在半路 -
.col上写了height、min-height或overflow: hidden,会截断高度继承 -
.card-body内用了height: 200px或min-height: 100%,覆盖了h-100的拉伸效果 - 图片加载慢,
.card初始渲染时高度为 0,h-100拉的也是 0 —— 建议加min-height: 200px兜底 - 确保
.card的**直接父元素是.col**(不要嵌套多余 div) - 给每个
.col加d-flex和align-items-stretch(后者可省略,因是默认值) - 再给
.card加h-100,它才能填满.col的高度 - 如果用
.card-img-top,注意它默认object-fit: cover,等高后可能严重裁剪 —— 建议统一设height: 180px或min-height: 180px -
.card和.card-body都要加h-100,否则内部 flex 无高度参考 -
.card-body加d-flex flex-column,让它成为纵向弹性容器 - 正文区域(如
.card-text)加flex-grow-1,自动占满中间空白 - 按钮加
mt-auto(不是align-self-end),更可靠地推到底部 - 检查自定义 CSS 是否含类似
@media (max-width: 768px) { .row { align-items: flex-start !important; } } -
.d-md-flex在小屏会退化为display: block,应改用d-flex d-md-flex - Bootstrap v3 项目里硬加
d-flex到.row会破坏 float 栅格,需同步处理清除浮动 - IE11 下
flex: 1不稳,建议用flex: 1 1 auto,避免flex-basis: 0导致卡片塌缩
.row 和 .col 必须同时参与 flex 布局
只给 .row 加 d-flex 不够,.col 本身不是 flex 容器,无法把高度“传”给 .card。正确链路是:
卡片内部内容对齐到底部按钮
即使外部高度统一了,标题短、文字少的卡片里按钮还是会往上浮。解决方法不是调 margin-top,而是用 flex-column 接管内部排列:
响应式下等高突然失效的典型原因
大屏正常、小屏崩掉,大概率是媒体查询或响应式类悄悄破坏了 flex 链路:
真正卡住的点往往不在卡片本身,而在 .col 是否被当成 flex 容器、高度是否被某处 min-height 或 overflow 截断、以及图片加载时机带来的初始高度计算偏差——这些细节不处理,h-100 就只是个摆设。











