CSS实现左右等高布局

163 阅读3分钟

CSS实现左右等高布局

实现左右等高布局(即左右两栏高度一致,无论内容多少),是网页布局中的常见需求。以下是几种常用的实现方法:

1. 使用 Flexbox 布局

实现原理

  • 将父容器设置为 Flex 容器,子元素默认会拉伸到相同高度。

代码示例

<div class="container">
  <div class="left">左边内容</div>
  <div class="right">右边内容</div>
</div>
.container {
  display: flex; /* 设置为 Flex 容器 */
}

.left {
  width: 200px; /* 左边固定宽度 */
  background-color: lightblue;
}

.right {
  flex: 1; /* 右边自适应宽度 */
  background-color: lightcoral;
}

2. 使用 Grid 布局

实现原理

  • 将父容器设置为 Grid 容器,子元素默认会拉伸到相同高度。

代码示例

<div class="container">
  <div class="left">左边内容</div>
  <div class="right">右边内容</div>
</div>
.container {
  display: grid;
  grid-template-columns: 200px 1fr; /* 左边固定宽度,右边自适应 */
}

.left {
  background-color: lightblue;
}

.right {
  background-color: lightcoral;
}

3. 使用表格布局(Table Layout)

实现原理

  • 将父容器设置为 display: table,子元素设置为 display: table-cell,表格单元格默认等高。

代码示例

<div class="container">
  <div class="left">左边内容</div>
  <div class="right">右边内容</div>
</div>
.container {
  display: table; /* 父容器设置为表格布局 */
  width: 100%; /* 宽度占满父容器 */
}

.left {
  display: table-cell; /* 左边设置为表格单元格 */
  width: 200px; /* 左边固定宽度 */
  background-color: lightblue;
}

.right {
  display: table-cell; /* 右边设置为表格单元格 */
  background-color: lightcoral;
}

4. 使用负 Margin 和 Padding 的 Hack 方法

实现原理

  • 通过设置较大的 padding-bottom 和负的 margin-bottom 来实现等高效果。

代码示例

<div class="container">
  <div class="left">左边内容</div>
  <div class="right">右边内容</div>
</div>
.container {
  overflow: hidden; /* 清除浮动 */
}

.left, .right {
  float: left; /* 浮动布局 */
  padding-bottom: 9999px; /* 设置较大的 padding-bottom */
  margin-bottom: -9999px; /* 用负 margin-bottom 抵消 padding-bottom */
}

.left {
  width: 200px; /* 左边固定宽度 */
  background-color: lightblue;
}

.right {
  width: calc(100% - 200px); /* 右边自适应宽度 */
  background-color: lightcoral;
}

5. 使用伪元素实现等高

实现原理

  • 使用伪元素和绝对定位来实现等高效果。

代码示例

<div class="container">
  <div class="left">左边内容</div>
  <div class="right">右边内容</div>
</div>
.container {
  position: relative; /* 父容器设置为相对定位 */
  overflow: hidden; /* 清除浮动 */
}

.left, .right {
  float: left; /* 浮动布局 */
  padding-bottom: 9999px; /* 设置较大的 padding-bottom */
  margin-bottom: -9999px; /* 用负 margin-bottom 抵消 padding-bottom */
}

.left {
  width: 200px; /* 左边固定宽度 */
  background-color: lightblue;
}

.right {
  width: calc(100% - 200px); /* 右边自适应宽度 */
  background-color: lightcoral;
}

.container::after {
  content: '';
  display: block;
  clear: both; /* 清除浮动 */
}

总结

方法优点缺点
Flexbox简单、灵活,适合现代浏览器兼容性稍差(IE 10+)
Grid强大,适合复杂布局兼容性稍差(IE 10+)
表格布局兼容性好,适合旧版浏览器语义化差,不适合复杂布局
负 Margin Hack兼容性好,适合旧版浏览器代码复杂,不够直观
伪元素兼容性好,适合旧版浏览器代码复杂,不够直观

推荐使用 FlexboxGrid,因为它们简单、灵活且适合现代浏览器。如果需要兼容旧版浏览器,可以选择 表格布局负 Margin Hack

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github