两列自适应布局是指一列固定宽度,另一列撑满剩余宽度的布局方式
常见HTML结构如下:
<div class="main">
<div class="left">
左边内容
</div>
<div class="right">
右边内容
</div>
</div>
/*父元素要清除浮动*/
.main{
height: 300px;
}
.main .left{
width:300px;
float:left;
height:300px;
background: #ff0097
}
.main .right{
/*margin-left: 300px;*/
height:300px;
background: #4eb3b9
}
.main{
height: 300px;
position: relative;
}
.main .left{
position:absolute;
top:0;
left:0;
width:300px;
height:300px;
background: #ff0097
}
.main .right{
position:absolute;
top:0;
left:302px;/*同时设置左和右,得到的宽度即为100%-left-right*/
right:0;
height:300px;
background: #4eb3b9
}
.main{
height: 300px;
position: relative;
padding-left:300px;
}
.main .left{
position:absolute;
top:0;
left:0;
width:300px;
height:300px;
background: #ff0097
}
.main .right{
height:100%;
background: #4eb3b9
}
.main{
height: 300px;
position: relative;
padding-left:300px;
}
.main .left{
float: left;
margin-left: -300px;
width:300px;
height:300px;
background: #ff0097
}
.main .right{
height:100%;
background: #4eb3b9
}
.main{
height: 300px;
display: flex;
flex-direction: row;
align-items: center;
}
.main .left{
background: #ff0097;
flex-basis: 300px;
height:100%;
}
.main .right{
flex-grow: 1;
height:100%;
background: #4eb3b9;
}
优化后的HTML结构如下
<div class="main">
<div class="right">
右边内容
</div>
<div class="left">
左边内容
</div>
</div>
优化后样式如下:
.main{
height: 300px;
/*position: relative;*/
padding-left: 300px;
}
.main .left{
float: left;
margin-left: -300px;
width:300px;
height:300px;
background: #ff0097
}
.main .right{
float: right;
width: 100%;
height: 300px;
background: #4eb3b9
}
特征:中间列自适应宽度,旁边两侧固定宽度
常见HTML结构如下:
<div class="main">
<div class="left">left</div>
<div class="content">
主体内容
</div>
<div class="right">right</div>
</div>
优化后的HTML结构如下:
<div class="main">
<div class="center">
主体内容
</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
对应的CSS样式如下:
body{
/*left使用了position: relative,所以就意味着在center开始的区域,还存在着一个left的宽度。所以页面的最小宽度应该设置为100+400+100=600px:*/
min-width: 600px;
}
.main{
height: 300px;
position: relative;
padding:0 400px 0 100px;
}
.left,.right, .center{
float: left;
height:100%;
}
.main .left{
width: 100px;
/*根据浮动的特性,由于center的宽度为100%,即占据了第一行的所有空间,所以left和right被“挤”到了第二行。*/
margin-left: -100%;
/*将left的位置在原有位置基础上左移100px*/
position: relative;
left: -100px;
background: #ff0097;
}
.main .right{
width:400px;
margin-right: -400px;
background: #4eb3b9;
}
.center{
width:100%;
background: #7cb91a;
}
参考:https://blog.csdn.net/weixin_43638968/article/details/107919835
pc端推荐浮动布局,移动端页面使用Flex布局
百分数是相对于父元素的width计算,不管是margin-top/margin-bottom还是margin-left/margin-right。(padding同理)
原文:https://www.cnblogs.com/jiajia-hjj/p/14980468.html