要实现两个并列.card等高,需确保.row设align-items-stretch,.col-md-6加d-flex h-100,.card加h-100且不设height/min-height,.card-body用d-flex flex-column h-100并让正文flex-grow-1、按钮mt-auto,弃用已移除的.card-group和不兼容的.card-deck。

两个并列的 .card 要等高,关键不是给卡片设固定高度,而是让它们“拉伸填满父容器高度”——前提是父容器是 flex 容器且有可继承的高度上下文。
为什么直接套 .row + .col-md-6 不生效
因为 .row 默认是 display: flex(Bootstrap 5),但它的 align-items 默认值是 normal,不是 stretch;而 .col-md-6 本身只是块级盒子,不是 flex 容器,内部的 .card 仍按内容撑高,互不影响。
-
.row的align-items必须显式设为stretch(加align-items-stretch类) -
.card必须加h-100,否则不参与拉伸 - 不能在
.card或.card-body上写height、min-height或flex: none,否则中断高度继承链
.col 上必须加 d-flex h-100
仅靠 .row 拉伸不够,因为 .card 的直接父级是 .col-md-6,它必须自己成为 flex 容器,并提供高度基准。
-
.col-md-6加d-flex:激活 flex 行为,使子项(即.card)能响应交叉轴对齐 -
.col-md-6加h-100:提供高度上下文,否则.card.h-100无处可继承 -
.card必须也加h-100,且不能被任何height/min-height覆盖 - 如果用了
.card-img-top,建议统一设height: 180px或min-height: 180px,避免图片尺寸差异破坏视觉等高
.card-body 内部对齐要单独处理
外部等高后,标题、正文、按钮仍可能堆顶或悬浮——因为 .card-body 还是流式布局,没接管空间分配。
-
.card-body加d-flex flex-column h-100,变成纵向弹性容器 - 正文
<p class="card-text"></p>加flex-grow-1,吃掉中间空白 - 按钮加
mt-auto(不是align-self-end),更稳定地沉底 - 禁止在
.card-body上设height或min-height,否则会撑破或截断
别再用 .card-group 或 .card-deck
Bootstrap 5.3+ 已彻底移除 .card-group,继续使用会触发 Unknown pseudo-class selector ".card-group" 报错;.card-deck 是 v4 的 table-cell 实现,不支持断行、无法嵌套 flex/grid,现代项目应完全弃用。
- 用
.row+.col-*+d-flex h-100+.card.h-100组合替代 - 移动端(如
.col-12)单卡时等高无意义,无需干预;中屏(.col-sm-6)起才真正生效 - 如果用了自定义 CSS 或第三方插件覆盖了
box-sizing,记得确保所有参与等高的容器都为box-sizing: border-box
最易忽略的一点:图片没加 img-fluid 或没统一 object-fit,会导致等高后裁剪失衡——一张卡露人脸,另一张只留衣角。这不属于高度计算问题,但会让“等高”看起来假。











