前端多列布局备忘
发布时间:2020-11-22
浏览量: 1479
文章分类: 前端相关
自适应布局解决方案
一列定宽、一列自适应(定宽+自适应)
- 使用
float + margin方法解决 假设左边我们定宽100px,右边不定宽,那么实现可以如下
.left{
float: left;
width: 100px;
}
.right {
margin-left: 100px;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
- 使用
float + overflow方法解决 同样的问题,在换一个解决方法试试
.left{
float: left;
width: 100px;
}
.right {
overflow: hidden;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
- 使用
table方法解决
.parent{
display: table;
width: 100%;
table-layout: fixed;
}
.left,.right{
display: table-cell;
}
.left{
width: 100px;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
- 使用
flex方法解决
.parent{
display: flex;
}
.left{
width: 100px;
}
.right{
flex: 1;
}
两页定宽+自适应
.left,.center{
float: left;
width: 100px;
}
.right{
overflow: hidden;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="center">
<p>center</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
其余的方法等同上面的类似
不定宽 + 自适应解决方案
- 使用
float + overflow方法解决
.left{
float: left;
}
.right{
overflow: hidden;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
- 使用
table方法解决
.parent{
display: table;
width: 100%;
}
.left,.right{
display: table-cell;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
- 使用
flex方法实现
.parent{
display: flex;
}
.left{
width: 100%;
}
.right{
flex: 1;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
多列不定宽+ 自适应解决方法上面的方法也同样适用
等宽布局解决方案
多列等宽布局
- 使用
float方法解决 这个没什么好说的,比如我们一行有4个,直接float-left:25%即可。但是问题如果我们想增加间距等问题就会比较麻烦。
首先我知道整列的宽度是100% = C,每列的宽度=W,每列之间的间隔=G,因为4列之间只有3个间隔,所以公式可以如下
C = W * N + G * (N - 1)也可以在换算一下,也就是C = (W +G) *N -G,在换算也就是C + G = (W + G) * N,也就是给外面的父容器+上间隔的像素。
.parent{
margin-left: -20px;
}
.column{
float: left;
width: 25%;
padding-left: 20px;
box-sizing: border-box;
}
<div class="parent">
<div class="column">1</div>
<div class="column">2</div>
<div class="column">3</div>
<div class="column">4</div>
</div>
- 使用
table实现
.parent-fix{
margin-left: -20px;
}
.parent{
display: table;
width: 100%;
table-layout: fixed;
}
.column{
display: table-cell;
}
<div class="parent-fix">
<div class="parent">
<div class="column">1</div>
<div class="column">2</div>
<div class="column">3</div>
<div class="column">4</div>
</div>
</div>
- 使用
flex实现
.parent{
display: flex;
}
.column{
flex: 1;
}
<div class="parent">
<div class="column">1</div>
<div class="column">2</div>
<div class="column">3</div>
<div class="column">4</div>
</div>
等高布局解决方案
多列的时候左右两列一样高
等高布局的意思就是其中有一列的内容被撑开的时候,另外一列一样要被撑开
- 使用
table解决
.parent{
display: table;
width: 100%;
table-layout: fixed;
}
.left,.right{
display: table-cell;
}
.left{
width: 100px;
border-right: 20px solid transparent;
background-clip: padding-box;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
- 使用
flex解决
.parent{
display: flex;
}
.left{
width: 100px;
margin-right: 20px;
}
.right{
flex: 1;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
- 使用
float解决(伪等高)
.left{
float: left;
width: 100px;
}
.right{
overflow: hidden;
}
.left,.right{
padding-bottom: 9999px;
margin-bottom: -9999px;
}
.parent{
overflow: hidden;
}
<div class="parent">
<div class="left">
<p>left</p>
</div>
<div class="right">
<p>right</p>
<p>right</p>
</div>
</div>
一句话总结就是flex天下无敌,简单方便。