CSS布局方案——多列布局
2017-03-12 00:00
141 查看
摘要: css 多列 布局
方案一:
CSS代码:
优点:简单,兼容性好。
缺点:1、IE6中
方案二:
先给right外再套一层div.right-fix,html如下:
CSS代码:
优点:同方案一。
缺点:1、IE6中
方案三:
CSS代码:
优点:触发BFC。
缺点:IE6不支持该方案。
方案四:
CSS代码:
优点:
缺点:1、代码较多;2、IE7-不支持
方案五:
CSS代码:
优点:不用设置left。
缺点:IE8-不支持
拓展:左定宽+中自适应+右定宽
方案一:
CSS代码:
优缺点:见定宽的方案三。
方案二:
CSS代码:
优缺点:见定宽的方案四。
PS:将left的
方案五:
CSS代码:
缺点:见定宽的方案五。
拓展:不定宽*N + 自适应
方案一:
CSS代码(假设有4列):
思路:总宽度 + 间距 = (每列宽度 + 间距)*N
缺点:1、IE7-中对于浮点数的处理有问题(不能整除时);2、结构与样式耦合性强,列数变化要修改css样式;3、parent左侧多一列间距。
方案二:
现在parent外套一层div.parent-fix,html如下:
CSS代码:
思路:table宽度随着内容变化;未设置单元格宽度时,
优点:结构与样式解耦合。
缺点:1、多套一层div;2、parent左侧多一列间距。
方案三:
CSS代码:
思路:
优点:结构与样式解耦合;设置简单。
缺点:IE8-不支持
拓展:九宫格
方案一:
见定宽的方案四。
表格每行的单元格天然等高。
方案二:
见定宽的方案五。
方案三:
CSS代码:
思路:
缺点:伪等高,实际上容器还是很大。
左定宽+右自适应
假设有HTML如下:<div class="parent"> <div class="left">left,假设width=100px</div> <!-- left和right间有20px间距 --> <div class="right">right</div> </div>
方案一:
float+
margin
CSS代码:
.left { float:left; } .right { margin-left:120px; }
优点:简单,兼容性好。
缺点:1、IE6中
float会产生3px的缩进,因此需要在left中加上
_margin-right:-3px;2、如果在right中清除浮动,则right会掉下去(right的
border-top与left的
border-bottom齐平)。
方案二:
float+
margin+
.fix
先给right外再套一层div.right-fix,html如下:
<div class="parent"> <div class="left">left</div> <div class="right-fix"> <div class="right">right</div> </div> </div>
CSS代码:
.left { float:left; position:relative; _margin-right:-3px; } .right-fix { float:right; width:100%; margin-left:-100px; } .right { margin-left:120px; }
优点:同方案一。
缺点:1、IE6中
float会产生3px的缩进;2、需要多加一层div。
方案三:
float+
overflow
CSS代码:
.left { float:left; margin-right:20px; } .right { overflow:hidden; }
优点:触发BFC。
缺点:IE6不支持该方案。
方案四:
table+
table-cell
CSS代码:
.parent { display:table; table-layout:fixed; width:100%; } .left, .right { display:table-cell; } .left { padding-right:20px; }
优点:
table-layout实现了布局优先,加速table渲染。
缺点:1、代码较多;2、IE7-不支持
display:table和
display:table-cell;3、如有背景,需要设置
background-clip:content-box,但
background-clip是CSS3属性,IE8-不支持。
方案五:
flex
CSS代码:
.parent { display:flex; } .right { flex:1; margin-left:20px; }
优点:不用设置left。
缺点:IE8-不支持
flex;且
flex性能较差,只适合小范围、结构简单的布局。
拓展:左定宽+中自适应+右定宽
左不定宽 + 右自适应
假设有HTML如下:<div class="parent"> <div class="left">left,width通过内容撑开</div> <!-- left和right间有20px间距 --> <div class="right">right</div> </div>
方案一:
float+
overflow
CSS代码:
.left { float:left; margin-right:20px; } .right { overflow:hidden; }
/* .left *{ width:100px;} 通过内容将left撑开*/
优缺点:见定宽的方案三。
方案二:
table+
table-cell
CSS代码:
.parent { display:table; width:100%; } /* 要实现内容优先,所以不用table-layout */ .left, .right { display:table-cell; } .left { width:0.1%; padding-right:20px; }
优缺点:见定宽的方案四。
PS:将left的
width设置足够小的值,但不要用px(1px在IE8下有问题),然后通过内容撑开left。
方案五:
flex
CSS代码:
.parent { display:flex; } .left { width:100px; margin-right:20px; } .right { flex:1; }
缺点:见定宽的方案五。
拓展:不定宽*N + 自适应
等分
假设有HTML如下:<div class="parent"> <div class="col">第一列</div> <!-- 此处省略m列;共n列,每列宽度一样,列间间距也一样(假设为20px) --> <div class="col">第N列</div> </div>
方案一:
float+
box-sizing
CSS代码(假设有4列):
.parent { margin-left:-20px; } .col { float:left; width:25%; padding-left:20px; box-sizing:border-box;}
思路:总宽度 + 间距 = (每列宽度 + 间距)*N
缺点:1、IE7-中对于浮点数的处理有问题(不能整除时);2、结构与样式耦合性强,列数变化要修改css样式;3、parent左侧多一列间距。
方案二:
table+
.fix
现在parent外套一层div.parent-fix,html如下:
<div class="parent-fix"> <div class="parent"> <div class="col">省略n个div.col</div> </div> </div>
CSS代码:
.parent-fix { margin-left:-20px; } .parent { display:table; width:100%; table-layout:fixed; } .col { display:table-cell; padding-left:20px; }
思路:table宽度随着内容变化;未设置单元格宽度时,
table-layout使其宽度平分。
优点:结构与样式解耦合。
缺点:1、多套一层div;2、parent左侧多一列间距。
方案三:
flex
CSS代码:
.parent { display:flex; } .col { flex:1; } .col + .col { margin-left:20px; }
思路:
flex:1等分容器的剩余空间。
优点:结构与样式解耦合;设置简单。
缺点:IE8-不支持
flex。
拓展:九宫格
等高(左自适应 + 右定高)
假设有HTML如下:<div class="parent"> <div class="left">left,假设width为100px</div> <!-- left和right间有20px间距 --> <div class="right">right</div> </div>
方案一:
table+
table-cell
见定宽的方案四。
表格每行的单元格天然等高。
方案二:
flex
见定宽的方案五。
flex布局的
align-items属性的默认值为
stretch,天然等高。
方案三:
float+
overflow
CSS代码:
.parent { overflow:hidden; } .left, .right { padding-bottom:9999px; margin-bottom:-9999px; } /* .left{ float:left; margin-right:20px; } */ /* .right{ overflow:hidden; } */
思路:
margin-bottom和
padding-bottom相互抵消,再用
overflow截断。
缺点:伪等高,实际上容器还是很大。
相关文章推荐
- css+div水平垂直居中布局总结(3种方案)
- 超级实用的CSS布局方案之多列布局(二)
- CSS多列布局方案
- CSS经典三栏布局方案
- css+div垂直居中布局总结(3种方案)
- 右边定宽,左边自适应css布局总结(三种方案)
- CSS四种方案实现——居中布局
- CSS布局方案之圣杯布局
- CSS布局方案
- css基础02:移动端自适应布局方案
- 超级实用的CSS布局方案之多列布局(一)
- 超级实用的CSS布局方案之多列布局(三)
- 超级实用的CSS布局方案之水平垂直居中
- CSS布局终极方案之--改进圣杯布局(兼容IE6+,现代浏览器)
- css系列(布局):实现一个元素在浏览器中水平、垂直居中的几个方案
- CSS-左边定宽,右边自适应布局方案
- IE与FF不兼容网页布局CSS问题解决方案()
- 【总结】css常见两列布局方案
- css常用左右布局方案整理
- CSS布局终极方案之--圣杯布局(兼容IE6+,现代浏览器)