这种布局方式除了是很常见的面试题,更重要的,他还是很常见的一种页面布局。因此必须要掌握几种制作情况。
这里我先列出几种我总结的,可能有些不足,希望大家也可以留言补充,我再整理成更完善的。
在分条展示实现方案前,我先把通用的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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦