新闻中心

在 Bootstrap 3 中使用 Flexbox 实现列等高布局

2025-12-02
浏览次数:
返回列表

在 Bootstrap 3 中使用 Flexbox 实现列等高布局

bootstrap 3 默认的栅格系统不支持列等高,导致内容长度不一致时出现布局错位。本教程将详细介绍如何通过引入自定义 flexbox css 类,巧妙地将 row 和 col 元素转换为 flex 容器和 flex 项目,从而实现列内容的自动拉伸对齐,有效解决边框和阴影的视觉不一致问题,提升页面布局的专业性和美观度。

引言:Bootstrap 3 列等高挑战

在网页设计中,当使用 Bootstrap 3 栅格系统构建多列布局时,如果各列内容的高度不一致,通常会导致列的底部不对齐。这不仅影响视觉美观,还会导致诸如边框、背景或阴影等样式出现断裂,尤其是在需要列之间有明确视觉边界的场景下。虽然 Bootstrap 3 本身并未内置 Flexbox 支持来解决这一问题,但我们可以通过自定义 CSS 引入 Flexbox 属性,巧妙地实现列的等高对齐。

理解 Flexbox 与其在 Bootstrap 3 中的应用

Flexbox (弹性盒子布局) 是一种一维布局模型,它能够让容器中的项目沿着主轴或交叉轴进行对齐、分布空间。其核心特性之一是子元素可以自动拉伸以填充其父容器的高度。在 Bootstrap 3 环境下,尽管其核心 CSS 不依赖 Flexbox,我们依然可以手动为其栅格元素添加 Flexbox 行为。

实现列等高的关键在于:

  1. 将 div.row 元素设置为 Flex 容器。
  2. 将 div.col-md-X 元素设置为其父容器 div.row 的 Flex 项目。
  3. 如果 div.col-md-X 内部还有需要拉伸的子元素(例如包裹内容的 div.info 或 form),那么 div.col-md-X 本身也需要成为一个 Flex 容器,同时其内部子元素成为 Flex 项目。

这种层层嵌套的 Flexbox 应用,确保了从最外层到最内层的内容都能根据需要自动拉伸高度。

定义核心 Flexbox CSS 类

为了方便管理和应用,我们定义两个简单的 CSS 类:

  • .d-flex: 用于将元素定义为 Flex 容器。
  • .d-flex-item: 用于将元素定义为 Flex 项目,并使其能够填充可用空间。
/* 现有样式保持不变,例如: */
.contact .info {
  padding: 30px;
  background: #fff;
  box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.1);
  margin-bottom: 40px; /* 注意:这个 margin-bottom 会影响父容器的高度,如果需要精确等高,可能需要调整 */
}

.contact .php-email-form {
  padding: 30px;
  background: #fff;
  box-shadow: 0 0 24px 0 rgba(0, 0, 0, 0.1);
  margin-bottom: 40px; /* 同上 */
}

/* 自定义 Flexbox CSS 类 */
.d-flex {
  display: flex;
}

.d-flex-item {
  /* flex: <flex-grow> <flex-shrink> <flex-basis>; */
  /* 1 0 auto 表示允许项目放大,不允许缩小,初始大小根据内容决定 */
  flex: 1 0 auto;
}

flex: 1 0 auto; 解释:

  • flex-grow: 1: 允许 Flex 项目在必要时放大,以占据 Flex 容器中的额外空间。
  • flex-shrink: 0: 不允许 Flex 项目缩小。
  • flex-basis: auto: Flex 项目的初始主尺寸,由其内容或宽度/高度属性决定。结合 flex-grow: 1,它能确保项目在不缩小的情况下,尽可能拉伸以填充容器。

在 HTML 结构中应用 Flexbox 类

现在,我们将这些自定义的 Flexbox 类应用到现有的 Bootstrap 栅格结构中。关键在于理解 Flexbox 的作用范围是“一层深”:一个 Flex 容器只影响其直接子元素。因此,我们需要根据布局的深度,在适当的层级应用 d-flex 和 d-flex-item。

考虑以下原始的 Bootstrap 3 结构片段:

开源(网店)电子商务软件iWebShop 开源(网店)电子商务软件iWebShop

iWebShop 软件是一款面向独立卖家而开发的单用户B2C网店系统,服务于有建立电子商务需求的独立商家,它是一款高性能高扩展能力的开源 LAMP 电子商务软件,可作为大中型电子商务平台使用。轻松实现买家注册、产品展示、在线定购、在线支付等电子商务功能;iWebShop 集成了产品发布与查询、买家登录、购物车、在线订单、在线支付、在线交流等完善的网上销售功能,最主要的是 iWebShop 的站点管

开源(网店)电子商务软件iWebShop 0 查看详情 开源(网店)电子商务软件iWebShop
<div class="row">   
  <div class="col-md-5">
    <div class="info">
      <!-- ... 内容 ... -->
    </div>
  </div>
  <div class="col-md-7">
    <form class="php-email-form">
      <!-- ... 内容 ... -->
    </form>
  </div> 
</div>

为了实现等高,我们需要进行如下修改:

  1. div.row: 设为 Flex 容器。
  2. div.col-md-5 和 div.col-md-7: 设为 div.row 的 Flex 项目。
  3. div.col-md-5: 自身也需设为 Flex 容器,因为它的子元素 div.info 需要拉伸。
  4. div.info: 设为 div.col-md-5 的 Flex 项目。
  5. form.php-email-form: 设为 div.col-md-7 的 Flex 项目。

修改后的 HTML 结构如下:

<section id="contact" class="contact">
  <div class="container">
    <div class="section-title">
      <h2>CONTACT</h2>
    </div>

    <!-- 1. div.row 设为 Flex 容器 -->
    <div class="row d-flex">
      <!-- 2. div.col-md-5 设为 Flex 项目,并作为 Flex 容器 -->
      <div class="col-md-5 d-flex-item d-flex">
        <!-- 3. div.info 设为 Flex 项目 -->
        <div class="info d-flex-item">
          <div class="email">
            <i class="bi bi-envelope"></i>
            <h4>Email:</h4>
            <p>email</p>
          </div>
          <div class="phone">
            <i class="bi bi-phone"></i>
            <h4>Telephone:</h4>
            <p>95 966 0</p>
          </div>
          <div class="address">
            <i class="bi bi-geo-alt"></i>
            <h4>Messenger:</h4>
            <p>address</p>
          </div>
          <div class="phone">
            <i class="bi bi-phone"></i>
            <h4>Whatsapp:</h4>
            <p>745 2720</p>
          </div>
          <div class="phone">
            <i class="bi bi-phone"></i>
            <h4>Telegram:</h4>
            <p>745 2720</p>
          </div>
        </div>
      </div>

      <!-- 4. div.col-md-7 设为 Flex 项目 -->
      <div class="col-md-7 d-flex-item">
        <!-- 5. form.php-email-form 设为 Flex 项目 -->
        <form action="forms/contact.php" method="post" role="form" class="php-email-form d-flex-item">
          <div class="row">
            <div class="form-group col-md-6">
              <label for="name">N</label>
              <input type="text" name="name" class="form-control" id="name" required>
            </div>
            <div class="form-group col-md-6">
              <label for="name">Email</label>
              <input type="email" class="form-control" name="email" id="email" required>
            </div>
          </div>
          <div class="row">
            <div class="form-group col-md-6">
              <label for="name">Mobile</label>
              <input type="text" class="form-control" name="subject" id="subject" required>
            </div>
            <div class="form-group col-md-6">
              <label for="name">F</label>
              <input type="text" class="form-control" name="subject" id="subject" required>
            </div>
          </div>
          <div class="form-group">
            <label for="name">T</label>
            <input type="text" class="form-control" name="subject" id="subject" required>
          </div>

          <div class="form-group">
            <label for="name">U</label>
            <textarea class="form-control" name="message" rows="6" required></textarea>
          </div>
          <div class="err">
            <div class="processing">Loading</div>
            <div class="error-message"></div>
            <div class="sent-message">Your message has been sent.!</div>
          </div>
          <div class="text-center"><button type="submit">Send</button></div>
        </form>
      </div>
    </div>
  </div>
</section>

注意事项与总结

  • **引入 Bootstrap

以上就是在 Bootstrap 3 中使用 Flexbox 实现列等高布局的详细内容,更多请关注php中文网其它相关文章!


# 行间  # 网站seo自学  # 阿里巴巴营销推广提成  # 巩义网站建设服务平台  # seo策略经典案例  # 雷山县网站优化公司  # 网站站外优化设置在哪  # 重庆seo软件费用价格  # 建设电影网站 资源  # 龙华网站seo优化  # 周口网站建设优化渠道  # 关键在于  # 在线支付  # 设置为  # css  # 自定义  # 开源  # 网店  # 等高  # 设为  # red  # 网页设计  # ai  # app  # bootstrap  # html  # php 


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


相关推荐: 初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  Pygame教程:解决用户输入与游戏状态更新不同步问题  yandex入口引擎手机版 yandex安卓版下载入口  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  聚水潭ERP登录页面入口 聚水潭ERP官网登录界面  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  J*a编写用户注册与登录功能_掌握字符串与验证逻辑  j*a toString()的覆盖  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  期待已久:小米17 Ultra、小米首款NAS本月登场  Typer应用中动态命令行参数的解析与处理  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  妖精动漫免费平台 妖精动漫官网资源观看网址  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  内存疯狂猛猛涨价:主板销量直接腰斩!  J*aScript生成器_j*ascript异步迭代  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  Eclipse怎么运行工程_Eclipse工程运行配置说明  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  如何将HTML表格多行数据保存到Google Sheets  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  黑猫投诉统一入口官网 消费者权益保护投诉平台  将HTML动态表格多行数据保存到Google Sheet的教程  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】  在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全  Go Martini框架:动态服务解码后的图片内容  React Hooks最佳实践:动态组件状态管理的组件化方案  微信客户端如何收红包_微信客户端接收红包使用教程  在Typer应用中优雅地处理和重组任意命令行参数  QQ网页版官方账号入口 QQ网页版网页版登录指南  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略 

搜索