Bootstrap 4+ 的 .row 默认等高,因 align-items: stretch 已启用;不等高主因是该属性被覆盖(如设为 flex-start)、列内 height: 100% 失效、absolute 元素脱离流或嵌套过深导致 stretch 未传递。
Bootstrap 4+ 默认栅格已基于 Flexbox,col 项天然等高,无需额外 hack;但若列内内容高度不一、又没触发 stretch(比如设置了 align-items: flex-start),就会失高——问题不在栅格本身,而在父容器的 Flex 对齐配置。
row 里 col 有时不等高根本原因是 row 是 display: flex 容器,但它的 align-items 默认值是 stretch,理论上应拉齐。常见破环场景包括:
row 设置了 align-items: flex-start 或 center
col 内部用了 height: 100% 但父级没设高度(Flex 子项的百分比高度需显式触发)position: absolute 元素,脱离文档流导致高度计算失效flex: 0 0 auto 类(如 flex-fill 冲突)或覆盖了 flex-basis
row 的 align-items
直接检查浏览器开发者工具中 .row 元素的 computed align-items 值。若不是 stretch,就该修正:
.row 的 align-items 覆盖align-items-start 等 Bootstrap 工具类,并接受该行不再等高row 上写 style="align-items: ..." —— 这会覆盖默认行为且难追溯align-items
Stretch 确保子项拉伸到最大高度,但若列内内容短,底部留白可能不美观。此时不应禁用 stretch,而应让内容“撑开”或“锚定”:
立即学习“前端免费学习笔记(深入)”;
col 加 h-100(Bootstrap 5)或 height: 100% + 父 row 有明确高度(慎用,易引发循环依赖)d-flex flex-column,再给主体内容加 flex-grow-1,让按钮/文字自动撑到底部col 设 min-height —— 它不参与 Flex 高度分配逻辑,仅作底线约束.card),确保卡片本身设 h-100,否则卡片高度由内容决定,无法拉齐Stretch 行为在所有现代浏览器(Chrome 29+, Firefox 20+, Safari 9+, Edge 12+)中稳定支持,但要注意:
align-items: stretch 支持有 bug,尤其嵌套 Flex 容器下;若需支持 IE11,改用 align-items: flex-start + JS 计算最高列并统一设高(不推荐)row > col > d-flex > d-flex)可能让 stretch 传播失效,建议单层 Flex 控制高度,内部用 margin/padding 调整间距!important 强制 align-items: stretch —— 它掩盖了真正的问题源头(比如样式优先级冲突)最常被忽略的是:等高只发生在同一 row 下的直接子 col 之间;跨 row、或 col 套 col,stretch 就不跨级生效。