You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bootstrap中垂直居中div?三列布局场景下的实现咨询

搞定Bootstrap布局中的垂直居中与滚动列问题

嘿,这个垂直居中的问题我太熟了!之前也踩过类似的坑,给你两个靠谱的解决方案,保证能满足你的需求:左右两列静态布局、文本框响应式垂直居中,中间列可滚动。

方案一:纯Bootstrap工具类实现(无需自定义CSS)

这个方法最省心,直接用Bootstrap自带的flex工具类就能搞定,核心思路是让左右列变成flex容器,利用flex布局实现垂直居中,同时给中间列设置滚动属性。

完整代码示例

<!-- 首先确保页面根容器占满视口高度 -->
<div class="container-fluid h-100">
  <!-- 让行占满容器高度 -->
  <div class="row h-100">
    <!-- 左侧列:用d-flex变成flex容器,align-items-center垂直居中,justify-content-center水平居中 -->
    <div class="col-sm-4 d-flex align-items-center justify-content-center">
      <input type="text" class="form-control w-75" placeholder="左侧文本框">
    </div>

    <!-- 中间可滚动列:h-100占满高度,overflow-y-auto开启垂直滚动 -->
    <div class="col-sm-4 h-100 overflow-y-auto p-3">
      <!-- 这里放测试用的长内容,验证滚动效果 -->
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
      <p>测试内容</p>
    </div>

    <!-- 右侧列:和左侧列配置一致 -->
    <div class="col-sm-4 d-flex align-items-center justify-content-center">
      <input type="text" class="form-control w-75" placeholder="右侧文本框">
    </div>
  </div>
</div>

关键细节解释

  • h-100:给容器、行、列设置100%高度,确保垂直居中的参考高度存在(这是你之前可能忽略的点!没有明确高度的话,垂直居中根本无从谈起)。
  • d-flex align-items-center:把左右列变成flex容器,内部元素自动垂直居中。
  • justify-content-center:让文本框在水平方向也居中(如果不需要可以去掉)。
  • overflow-y-auto:中间列内容超过高度时自动显示滚动条,内容不足时不显示,完美适配响应式场景。

方案二:自定义CSS类(适合需要复用样式的场景)

如果你的项目需要多次用到这类布局,可以封装自定义CSS类,让代码更简洁:

自定义CSS

/* 让容器占满视口高度 */
.full-height-container {
  height: 100vh;
}

/* 左右列的垂直居中类 */
.vertical-center-col {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
}

/* 中间滚动列的类 */
.scrollable-col {
  height: 100%;
  overflow-y: auto;
}

对应HTML结构

<div class="container-fluid full-height-container">
  <div class="row h-100">
    <div class="col-sm-4 vertical-center-col">
      <input type="text" class="form-control w-75" placeholder="左侧文本框">
    </div>
    <div class="col-sm-4 scrollable-col p-3">
      <!-- 滚动内容 -->
    </div>
    <div class="col-sm-4 vertical-center-col">
      <input type="text" class="form-control w-75" placeholder="右侧文本框">
    </div>
  </div>
</div>

为什么你之前的方法没生效?

大概率是因为没有给父元素设置明确的高度,Bootstrap的vertical-center类(如果是第三方的)或者列偏移,都需要父容器有固定高度才能生效。而flex布局的核心就是依赖父容器的高度来计算居中位置,所以只要确保容器、行、列都有100%高度,再配合flex类,问题就迎刃而解啦!

内容的提问来源于stack exchange,提问作者Leia_Organa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:33:14