前言
在进行多栏布局时,我们经常会碰到因为内容大小不一导致各栏高度不一样的问题,比如圣杯布局中三栏的高度问题。这个时候我们就需要使用等高布局让各栏的高度对齐。本文介绍了利用实现等高布局的方案。
等高布局
本文等高布局均以三栏布局为例,默认结构和样式参考如下。
HTML 代码:
<div class="container">
<div class="left">left</div>
<div class="center">center</div>
<div class="right">right</div>
</div>
CSS 代码:
.left {
background-color: red;
}
.center {
background-color: green;
}
.right {
background-color: blue;
}
padding + 负 margin
- 此方法适用以 float 实现的布局,可以以圣杯布局或使用 float 实现的简单三栏布局为例。
- 设置一个大数值的
padding-bottom,再设置相同数值的负的margin-bottom,如果设置了背景颜色,很容易发现视觉上三栏仍然是不齐的,并且高度变得很大,但盒模型“撑起来”的高度并没有发生变化。 - 三栏需要被容器
container包裹,在container上设置overflow:hidden,开启 BFC,使得外部容器高度可以被撑起,并截去超出盒模型实际高度的地方,这样视觉上就变为等高的了。
.container {
overflow: hidden;
}
.center,
.left,
.right {
padding-bottom: 10000px;
margin-bottom: -10000px;
}
模仿 table 布局
- 设置
display: table;和display: table-cell;可以把普通元素变为table元素的实现效果。模仿 table 样式实现等高。 - 该方法比完全使用
table布局减少大量冗余代码,简单易实现。
.container {
display: table;
}
.center,
.left,
.right {
display: table-cell;
}
flex 实现
- flex 元素默认占满整个容器的高度,这样各栏高度均为容器高度,实现等高。
- 实际上使用的是
align-items: stretch属性(默认)。 - 强大高效的现代布局方案。
.container {
display: flex;
}
grid 实现
- 设置
grid-auto-flow: column;,使三栏自动按列排布,高度统一。 - 强大高效的现代布局方案。
.container {
display: grid;
grid-auto-flow: column;
}