这种布局方式除了是很常见的面试题,更重要的,他还是很常见的一种页面布局。因此必须要掌握几种制作情况。
这里我先列出几种我总结的,可能有些不足,希望大家也可以留言补充,我再整理成更完善的。
在分条展示实现方案前,我先把通用的css贴一下:
*{
margin: 0;
padding: 0;
}
html{
font-family: "微软雅黑";
}
ul li{
list-style: none;
}
a:link,a:hover{
text-decoration: none;
}
.clearfix{
*zoom:1;
}
.clearfix:after{
height: 0;
clear: both;
content: "";
visibility: hidden;
display: block;
}
.fl{
float: left;
}
.fr{
float: right;
}
h3,.tips-info{
margin: 8px 0;
font-size: 14px;
}
li{
margin-bottom: 10px
}
.tips,ol{
background: #fffbfb;
padding: 10px 20px;
}
.tips-ex{
font-size: 12px;
color: #99c1c1;
}
.block{
padding: 10px 20px;
border-top: 5px solid #99c1c1;
margin: 30px 0 0px;
background: #f5f5f5;
}
.browser,.container{
padding: 20px;
}
.container{
font-size: 14px;
}
.container,.img-box{
background: #eee;
border: 1px solid #999;
}
.box{
background: #fff;
padding: 20px;
border: 1px solid #999;
}
.team-box{
width: 158px;
}
.info-box{
}
.person-box{
width: 78px;
}
.person-box .img-box{
margin-bottom: 20px;
}
.person-box .img-box:last-child{
margin: 0;
}
.img-box{
width: 78px;
}
.img-txt{
line-height: 20px;
margin: 20px 0;
text-align: center;
padding: 0 5px;
}
.team-name{
width: 78px;
height: 80px;
text-align: center;
}
/* others */
.top{
margin-top: 150px;
}
.bottom{
margin-bottom: 150px;
}主要是以下几种方案基础代码、无关痛痒的样式代码和左中右三栏各自需要提前固定的尺寸代码。
以下分几种情况实现:
第一种,float布局实现
这绝对是我大脑能第一下想到的!
左右两栏分别左浮动、右浮动。
中间栏使用margin/padding撑开左右两栏需要占据的位置即可。
代码:
html:
<div class="browser"> <div class="container f-cont clearfix"> <div class="box team-box clearfix"> <div class="img-box"> <div class="img-txt">团队logo 80x80</div> </div> <div class="team-name">团队名称</div> </div> <div class="box person-box clearfix"> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> </div> <div class="box info-box"> <div> <h3>关于你们团队的介绍</h3> <span>可以给我们解释一下团队名称得来历,或是分别介绍你们的团队成员。(以下为示例)</span> <p>页面的样式表是非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。index.json 是页面的配置文件:页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。</p> <h3>又一个小标题</h3> <p> 页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。 </p> </div> </div> </div> </div>
css:
.f-cont .team-box,.img-box,.team-name{
float: left;
}
.f-cont .person-box{
float: right;
}
.f-cont .info-box,.p-cont .info-box{
margin: 0 140px 0 220px;
}看下动态效果:
妈耶传不了动图
第二种,定位布局+margin
左右栏分别使用absolute定位,同float一样,左边的定位left 0,右边的定位right 0;
中间还是用margin或padding撑开左右栏需要占据的位置即可。(利用了浮动或定位时,结构飘起来不占据文档空间的特点)
代码:
html:
<div class="browser"> <div class="container p-cont"> <div class="box team-box clearfix"> <div class="img-box"> <div class="img-txt">团队logo 80x80</div> </div> <div class="team-name">团队名称</div> </div> <div class="box info-box"> <div> <h3>关于你们团队的介绍</h3> <span>可以给我们解释一下团队名称得来历,或是分别介绍你们的团队成员。(以下为示例)</span> <p>页面的样式表是非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。index.json 是页面的配置文件:页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。</p> <h3>又一个小标题</h3> <p> 页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。 </p> </div> </div> <div class="box person-box clearfix"> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> </div> </div> </div>
css:
.p-cont{
position: relative;
height: 430px;
}
.p-cont .team-box,.p-cont .person-box{
position: absolute;
top: 20px;
z-index: 9;
}
.p-cont .team-box{
left: 20px;
}
.p-cont .person-box{
right: 20px;
}不足点:
不过这种布局有点缺点就是,父元素需要设置固定高度,中间自适应时,如果内容过多而宽度又过窄,会导致高度被迫增加,严重时冲破父元素高度,产生溢出的现象:
看动图,看不了就去my博客看吧,无奈:(
第三种,display:table 实现
父元素display:table;
左右子元素使用display:table-cell;
中间正常文档流,margin撑开间距即可
代码:
html:
<div class="browser"> <div class="container d-cont"> <div class="cell"> <div class="box team-box clearfix"> <div class="img-box"> <div class="img-txt">团队logo 80x80</div> </div> <div class="team-name">团队名称</div> </div> </div> <div class="box info-box"> <div> <h3>关于你们团队的介绍</h3> <span>可以给我们解释一下团队名称得来历,或是分别介绍你们的团队成员。(以下为示例)</span> <p>页面的样式表是非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。index.json 是页面的配置文件:页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。</p> <h3>又一个小标题</h3> <p> 页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。 </p> </div> </div> <div class="cell"> <div class="box person-box clearfix"> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> </div> </div> </div> </div>
css:
.d-cont{
display: table;
}
.d-cont .cell{
display: table-cell;
vertical-align: top;
}
.d-cont .info-box{
margin: 0 20px;
}这种的高度就不会被撑破,父元素高度就会自适应子元素的高度进行伸缩;
同样,动图飞了...
第四种,浮动 + margin负边距
代码:
html:
<div class="browser"> <div class="container m-cont clearfix"> <div class="m-c"> <div class="box info-box"> <div> <h3>关于你们团队的介绍</h3> <span>可以给我们解释一下团队名称得来历,或是分别介绍你们的团队成员。(以下为示例)</span> <p>页面的样式表是非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。index.json 是页面的配置文件:页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。</p> <h3>又一个小标题</h3> <p> 页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。 </p> </div> </div> </div> <div class="m-l"> <div class="box team-box clearfix"> <div class="img-box"> <div class="img-txt">团队logo 80x80</div> </div> <div class="team-name">团队名称</div> </div> </div> <div class="m-r"> <div class="box person-box clearfix"> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> </div> </div> </div> </div>
css:
.m-l,.m-c,.m-r{
float: left;
}
.m-l{
margin-left: -100%;
}
.m-c{
margin: 0 140px 0 220px;
}
.m-r{
margin-left: -120px;
}第五种,css3 - flex
代码:
html:
<div class="browser"> <div class="container fx-cont"> <div class="cell"> <div class="box team-box clearfix"> <div class="img-box"> <div class="img-txt">团队logo 80x80</div> </div> <div class="team-name">团队名称</div> </div> </div> <div class="cell"> <div class="box info-box"> <div> <h3>关于你们团队的介绍</h3> <span>可以给我们解释一下团队名称得来历,或是分别介绍你们的团队成员。(以下为示例)</span> <p>页面的样式表是非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。index.json 是页面的配置文件:页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。</p> <h3>又一个小标题</h3> <p> 页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。 </p> </div> </div> </div> <div class="cell"> <div class="box person-box clearfix"> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> <div class="img-box"> <div class="img-txt">个人logo 80x80</div> </div> </div> </div> </div> </div>
css:
.fx-cont{
display: -webkit-flex;
display: flex;
}
.fx-cont .info-box{
flex: 1;
margin: 0 20px;
}最后,想看动图的效果的还请您移驾
CSS-三栏响应式布局(左右固宽,中间自适应)的五种方法
點擊查看更多內容
18人點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦




