一、前言
三列等高布局可能是我们平时开发中用的比较多的布局, 因为有时为了美观必须让三列等高, 但是我们的div又是被内容撑开的, 不能提前设置高度, 这时候就需要我们利用一些骚操作。不过在flex布局出来以后, 这个问题就变得很简单了, 我们后面再介绍。
二、margin+padding实现
首先我们先来看一下最后的效果:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.one {
float: left;
width: 30%;
background-color: red;
}
.two {
float: left;
width: 30%;
background-color: blue;
}
.three {
float: left;
width: 40%;
background-color: yellow;
}
</style>
</head>
<body>
<div class="one">
<p>111</p>
<p>111</p>
<p>111</p>
<p>111</p>
</div>
<div class="two">
<p>wjaeifojawi</p>
</div>
<div class="three">
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
</div>
</body>
</html>
这时候的效果是这样的:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.one {
float: left;
width: 30%;
background-color: red;
padding-bottom: 1999px;
}
.two {
float: left;
width: 30%;
background-color: blue;
padding-bottom: 1999px;
}
.three {
float: left;
width: 40%;
background-color: yellow;
padding-bottom: 1999px;
}
</style>
</head>
<body>
<div class="one">
<p>111</p>
<p>111</p>
<p>111</p>
<p>111</p>
</div>
<div class="two">
<p>wjaeifojawi</p>
</div>
<div class="three">
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
</div>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.one {
float: left;
width: 30%;
background-color: red;
padding-bottom: 1999px;
margin-bottom: -1999px;
}
.two {
float: left;
width: 30%;
background-color: blue;
padding-bottom: 1999px;
margin-bottom: -1999px;
}
.three {
float: left;
width: 40%;
background-color: yellow;
padding-bottom: 1999px;
margin-bottom: -1999px;
}
#main {
overflow: hidden;
}
</style>
</head>
<body>
<div id="main">
<div class="one">
<p>111</p>
<p>111</p>
<p>111</p>
<p>111</p>
</div>
<div class="two">
<p>wjaeifojawi</p>
</div>
<div class="three">
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
</div>
</div>
</body>
</html>
这样就达到了我们最开始的效果。当div内容增加的时候,就会减少padding的值,增加height的值,但是显示的高度永远是三列最高的高度,大家可以自己去理解一下。
三、flex实现
上面这种方法是不是感觉很绕,没关系,flex布局出来以后我们有了一个非常好的解决方案,只需要加一行代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.one {
width: 30%;
background-color: red;
}
.two {
width: 30%;
background-color: blue;
}
.three {
width: 40%;
background-color: yellow;
}
#main {
display: flex;
}
</style>
</head>
<body>
<div id="main">
<div class="one">
<p>111</p>
<p>111</p>
<p>111</p>
<p>111</p>
</div>
<div class="two">
<p>wjaeifojawi</p>
</div>
<div class="three">
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
<p>fwefwe</p>
</div>
</div>
</body>
</html>
这样达到的效果和上面一样。这是为什么呢?因为flex布局中,主轴默认是x轴,所以div会并排,同时在副轴上,如果不指定排列方式,默认是stretch,就是把div的高度拉伸到和父div一样,也就意味着三列等高了。还不理解的同学可以去阮一峰大佬的教程上仔细看看felx的用法。
四、结语
好了,这就是本文的内容了,其实理解了之后还是很容易实现这个效果的,不懂的同学自己尝试着去实现一下相信很快也能够理解了。