Bootstrap 3 的 push/pull 类仅支持同一行内两列互换,因其基于 float 布局,通过 left/right 偏移实现视觉挪位,要求两列数值之和为12,且最大偏移为11;不支持三列重排,亦不兼容 Bootstrap 4+ 的 flex order 机制。
Bootstrap 3 的 push 和 pull 类只能交换同一行内、总宽为 12 的两列顺序,不支持三列及以上重排,也不兼容 Bootstrap 4+。
col-md-push-* 和 col-md-pull-* 只能换两列位置Bootstrap 3 网格依赖 float: left 实现布局,push 和 pull 本质是通过 left 或 right 的 CSS 偏移强行“视觉挪位”,而非改变 DOM 顺序或 flex 排序。因此:
<div class="row"> 内操作,跨行无效col-*-* 数值之和必须等于 12(例如 col-md-8 + col-md-4),否则偏移后会错位甚至重叠col-md-push-4 但该列本身占 5 列,实际向右移动 4 列后,剩余空间不足,右侧内容会被挤出视口或覆盖col-md-push-12 这种写法——最大有效值是 11,因为列宽至少为 1push/pull 和 offset 的关键区别在哪表面都是“让列挪位置”,但底层机制和副作用完全不同:
offset(如 col-md-offset-3)用 margin-left 推动整列及其后续所有元素,安全但死板;它不会重叠,超限会自动换行push/pull 用 float + left/right,只动当前列,其他列完全不受影响——这既是灵活性来源,也是坑的起点col-md-6 col-md-push-6 把一列推到最右,但若同行还有另一列没设 pull,它仍按原顺序渲染在左,结果两列视觉重叠md 设了 push,但 sm 下没重置),小屏下可能残留错位不是不能用,而是得清楚边界:
main 在 HTML 后但需视觉前置,aside 在 HTML 前但需视觉后置),且二者加起来刚好 12 列col-md-4×3)想调成 B-A-C 或 C-B-A——Bootstrap 3 原生不支持,硬套 push/pull 必然错行或溢出push/pull 只改样式,DOM 顺序不变push/pull,改用 order(flexbox),升级项目时这些类会直接失效真正容易被忽略的是:哪怕你只在 lg 断点用了 col-lg-push-3,也得同步检查 md 和 sm 下是否需要 col-md-pull-0 或类似重置——否则小屏回退时偏移量残留,列就飘了。