新闻中心

Bootstrap 4:响应式布局中使列高度自适应内容

2025-10-19
浏览次数:
返回列表

bootstrap 4:响应式布局中使列高度自适应内容

本文介绍了如何在使用 Bootstrap 4 构建响应式布局时,使两列在移动设备上折叠成一列后,其高度能够根据内容自适应。通过使用 `@media` 查询和 `display: block!important` 样式,可以有效地解决在没有滚动条时,列高度平均分配的问题,同时保留原有的滚动条功能。

在使用 Bootstrap 4 构建响应式布局时,经常会遇到需要在不同屏幕尺寸下调整列的排列方式和高度的问题。一个常见的场景是,在桌面端,两列并排显示,各自具有滚动条;而在移动端,这两列折叠成一列,垂直排列。在某些情况下,当内容较少,没有滚动条时,这些列可能会平均分配剩余的高度,而不是根据内容自适应。本文将介绍如何解决这个问题,确保在各种情况下列的高度都能正确显示。

问题描述

假设我们有一个包含 Header、两列内容区域和 Footer 的布局。在桌面端,两列内容区域并排显示,并且可以独立滚动。在移动端,我们希望这两列内容区域折叠成一列,垂直排列,并且高度能够自适应内容。

以下是一个基本的 HTML 结构示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 4 Responsive Columns</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
  <style>
    html,
    body {
      height: 100%;
    }
  </style>
</head>
<body>
  <div class="container-fluid d-flex flex-column vh-100">
    <div class="row border flex-shrink-0">
      Header
    </div>
    <div class="row flex-grow-1 overflow-hidden">
      <div class="col-6 mh-100 overflow-auto">
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
      </div>
      <div class='col-6 mh-100 overflow-auto'>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
      </div>
    </div>
    <div class="row border flex-shrink-0">
      Footer
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

在移动端,我们通常会使用 @media 查询来改变列的宽度和溢出属性,使其折叠成一列:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 4 Responsive Columns</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
  <style>
    html,
    body {
      height: 100%;
    }
  </style>
</head>
<body>
  <div class="container-fluid d-flex flex-column vh-100">
    <div class="row border flex-shrink-0">
      Header
    </div>
    <div class="row flex-grow-1 mh-100 overflow-auto">
      <div class="col-12 overflow-visible">
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
      </div>
      <div class='col-12 overflow-visible'>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
      </div>
    </div>
    <div class="row border flex-shrink-0">
      Footer
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

然而,当内容不足以产生滚动条时,两列的高度会平均分配,这可能不是我们想要的结果。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 4 Responsive Columns</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
  <style>
    html,
    body {
      height: 100%;
    }
  </style>
</head>
<body>
  <div class="container-fluid d-flex flex-column vh-100">
    <div class="row border flex-shrink-0">
      Header
    </div>
    <div class="row flex-grow-1 mh-100 overflow-auto">
      <div class="col-12 overflow-visible">
        Hello
      </div>
      <div class='col-12 overflow-visible'>
        World
      </div>
    </div>
    <div class="row border flex-shrink-0">
      Footer
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

解决方案

为了解决这个问题,我们可以使用 @media 查询在移动端为包含列的 row 元素添加 display: block!important 样式。这将覆盖 Bootstrap 默认的 flexbox 行为,使得列的高度能够根据内容自适应。

以下是修改后的代码:

科威旅游管理系统 科威旅游管理系统

该软件是以php+MySQL进行开发的旅游管理网站系统。系统前端采用可视化布局,能自动适应不同尺寸屏幕,一起建站,不同设备使用,免去兼容性烦恼。系统提供列表、表格、地图三种列表显示方式,让用户以最快的速度找到所需行程,大幅提高效率。系统可设置推荐、优惠行程,可将相应行程高亮显示,对重点行程有效推广,可实现网站盈利。系统支持中文、英文,您还可以在后台添加新的语言,关键字单独列出,在后台即可快速翻译。

科威旅游管理系统 0 查看详情 科威旅游管理系统
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 4 Responsive Columns</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
  <style>
    html,
    body {
      height: 100%;
    }

    @media (max-width: 768px) {
      .row.flex-grow-1 {
        display: block !important;
      }
    }
  </style>
</head>
<body>
  <div class="container-fluid d-flex flex-column vh-100">
    <div class="row border flex-shrink-0">
      Header
    </div>
    <div class="row flex-grow-1 mh-100 overflow-auto">
      <div class="col-12 overflow-visible">
        Hello
      </div>
      <div class='col-12 overflow-visible'>
        World
      </div>
    </div>
    <div class="row border flex-shrink-0">
      Footer
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

通过添加以下 CSS 规则,我们可以在屏幕宽度小于或等于 768px 时,将 row 元素的 display 属性设置为 block:

@media (max-width: 768px) {
  .row.flex-grow-1 {
    display: block !important;
  }
}

!important 确保这个样式能够覆盖 Bootstrap 默认的样式。

完整示例

以下是包含滚动条和没有滚动条的完整示例代码,展示了如何使用上述方法来解决问题:

包含滚动条的示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 4 Responsive Columns</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
  <style>
    html,
    body {
      height: 100%;
    }

    @media (max-width: 768px) {
      .row.flex-grow-1 {
        display: block !important;
      }
    }
  </style>
</head>
<body>
  <div class="container-fluid d-flex flex-column vh-100">
    <div class="row border flex-shrink-0">
      Header
    </div>
    <div class="row flex-grow-1 mh-100 overflow-auto">
      <div class="col-12 overflow-visible">
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
        Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>Hello<br>
      </div>
      <div class='col-12 overflow-visible'>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
        World<br>World<br>World<br>World<br>World<br>World<br>World<br>
      </div>
    </div>
    <div class="row border flex-shrink-0">
      Footer
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

没有滚动条的示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 4 Responsive Columns</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
  <style>
    html,
    body {
      height: 100%;
    }

    @media (max-width: 768px) {
      .row.flex-grow-1 {
        display: block !important;
      }
    }
  </style>
</head>
<body>
  <div class="container-fluid d-flex flex-column vh-100">
    <div class="row border flex-shrink-0">
      Header
    </div>
    <div class="row flex-grow-1 mh-100 overflow-auto">
      <div class="col-12 overflow-visible">
        Hello
      </div>
      <div class='col-12 overflow-visible'>
        World
      </div>
    </div>
    <div class="row border flex-shrink-0">
      Footer
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

总结

通过使用 @media 查询和 display: block!important 样式,我们可以有效地解决在使用 Bootstrap 4 构建响应式布局时,列高度自适应内容的问题。这种方法既能保证在移动端列的高度根据内容自适应,又能保留原有的滚动条功能。在实际开发中,可以根据具体需求调整 @media 查询的断点值,以适应不同的屏幕尺寸。

以上就是Bootstrap 4:响应式布局中使列高度自适应内容的详细内容,更多请关注其它相关文章!


# 单选框  # 引用文献网站建设总结  # 湛江seo优化直供  # 店内推广营销工具怎么写  # 河南网站长尾关键词排名  # 建立网站seo  # 营销推广短视频拍摄方法  # 桦南网站推广怎么样赚钱  # seo人性营销  # 活动营销策划推广方案  # 网站推广快往a金脉科技可靠  # 解决这个问题  # 平均分配  # 有效地  # 解决问题  # 我们可以  # css  # 表单  # 管理系统  # 自适应  # 滚动条  # overfl  # .net  # 排列  # 响应式布局  # cdn  # ai  # npm  # bootstrap  # js  # html  # jquery 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  使用J*aScript检测输入元素是否包含在特定类中  2026春节假期时间安排 2026春节假日查询  Mac怎么锁定备忘录_Mac备忘录加密设置教程  在python-socketio事件处理器中安全访问Flask应用上下文  Python实现多节点属性重叠度分析教程  如何提高微信支付的安全性_微信支付安全防护与设置建议  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  可靠CSGO开箱平台解析 CSGO开箱网合集  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  顺丰快件物流信息 官方网站查询入口  字由网在线版登录地址 字由网网页版安全入口  谷歌google账号怎么注册账号 谷歌账号注册官方流程  响应式图片在网页设计中的正确实现方法  12306选座怎么选到临时改签座_12306改签选座策略与步骤  C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法  c++中为什么推荐使用using替代typedef_c++现代化类型别名  Go语言中Map值调用指针接收器方法的限制与应对  Win10双系统截图高效法 截屏快捷键速记【技巧】  如何在 Excel Online 和 Google 表格中更改日期格式  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  深入理解J*aScript Promise异步执行与微任务队列  TikTok网页版直接登录 TikTok网页端官方平台入口  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符  126邮箱手机版登录官网2026_126手机邮箱免费入口最新  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  内存检查:在VS Code中调试C++时的内存视图  126邮箱账号注册 电脑版登录入口  谷歌邮箱注册显示错误Gmail服务器异常与延迟处理  Go语言中JSON数据解码与字段访问指南  css绝对定位元素脱离父容器怎么办_确保父元素position非static  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  qq游戏免费畅玩入口_qq游戏电脑版快速启动  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  Linux如何构建多环境配置管理_Linux多环境配置方案  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  服务端验证_j*ascript输入检查  Lar*el DB::listen 事件中的查询执行时间单位解析  抖音极速版最新版本 抖音极速版官方下载地址  谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问  快手官方唯一登录入口 谨防山寨钓鱼网站  163邮箱注册官网 免费申请163个人邮箱  必由学在线入口 必由学网页版快速登录入口 

搜索