两列布局的多种方式
2017-03-26 23:55
134 查看
面试的时候真的太常被面到这个问题了!
所以还是实践一下做个笔记吧。
HTML布局如下:
若不做任何操作,其样式为
可以看到这个的右边根本没有自适应
所以在right要
BFC布局有说明:BFC区域不会与float box重叠
所以,left这里为float box,使用overflow:hidden;来触发BFC,这样right就不会与left重叠啦。
下面实现以下圣杯布局
圣杯布局用于一般三列布局,其中左右两列定宽,中间一列自适应宽度。但是其实对于两列其中一列自适应也是可以实现的。
主要用到float、负margin和position
html如下:
CSS
有几点需要注意一下:
1. 中间自适应的区域在结构上要放在left和right之上。
2. content(即包裹在最外面的那一层div)他必须是
3. 负margin的使用原理是对float元素移动到上面。left的margin-left设置为-100%得到的值是-父元素的宽度,即left将会跑到main的左边。right设置为-200px则是让right移动到main的右边。但同时,由于float属性他们会挡住main的显示。
4. 于是需要使用position定位,将left和right分别定位到最左端和最右端。
效果图如下:
两列布局效果:
圣杯布局的确是比上面所述的几种方法要好多了~
表示感谢~~
html如下:
CSS:
有几点要注意:
1. margin是在main的内部的div下设置的。
2. 没了。
效果图如下:
效果和圣杯布局一模一样,但是在理解上则更加简单。
所以还是实践一下做个笔记吧。
HTML布局如下:
<body> <div class="content"> <div class="left"> <p>Hello</p> <p>I'am left</p> </div> <div class="right"> <p>Hi</p> <p>I'am right</p> </div> </div> </body>
若不做任何操作,其样式为
左边固定宽度,右边自适应
左边固定为200pxfloat+margin-right
.left{ background:#fcc; width: 200px; float: left; } .right{ background: #f66; margin-left: 210px; }
position:absolute
.content{ position: relative; width: 100%; height: 500px; border: 1px solid #000; } .left{ background:#fcc; width: 200px; position: absolute; } .right{ background: #f66; position: absolute; left: 210px; }
可以看到这个的右边根本没有自适应
所以在right要
right:0;,就是同时设置left和right达到自适应的效果
Flex
.content{ width: 100%; height: 500px; border: 1px solid #000; display:flex; } .left{ background:#fcc; width: 200px; margin-right:10px; } .right{ background: #f66; flex:1; }
float+BFC
.content{ width: 100%; height: 500px; border: 1px solid #000; } .left{ background:#fcc; width: 200px; margin-right: 10px; float: left; } .right{ background: #f66; overflow: hidden; }
BFC布局有说明:BFC区域不会与float box重叠
所以,left这里为float box,使用overflow:hidden;来触发BFC,这样right就不会与left重叠啦。
右边固定,左边自适应
这个和上面类似,只是float和position都不太适用了。所以还是使用BFC和Flex吧。圣杯布局及其原理
看了评论,于是去查了一下圣杯布局和双飞翼布局。下面实现以下圣杯布局
圣杯布局用于一般三列布局,其中左右两列定宽,中间一列自适应宽度。但是其实对于两列其中一列自适应也是可以实现的。
主要用到float、负margin和position
html如下:
<body> <div class="content"> <div class="main"> 中间自适应区域 </div> <div class="left"> <p>I'am left</p> </div> <div class="right"> <p>I'am right</p> </div> </div> </body>
CSS
*{ padding: 0; margin: 0; } .content{ box-sizing: border-box; width: 100%; padding-left: 200px; padding-right: 200px; } .main{ background: #f66; width: 100%; float: left; height: 100px; } .left{ background:#fcc; width: 200px; float: left; margin-left: -100%; position: relative; left: -200px; height: 50px; } .right{ position: relative; right: -200px; background: #fcc; width: 200px; float: left; margin-left: -200px; height: 60px; }
有几点需要注意一下:
1. 中间自适应的区域在结构上要放在left和right之上。
2. content(即包裹在最外面的那一层div)他必须是
box-sizing:border-box。因为只有这样在后面设置其padding值时,他才会把内容里面的三个div全部挤进来而不是扩充出去。
3. 负margin的使用原理是对float元素移动到上面。left的margin-left设置为-100%得到的值是-父元素的宽度,即left将会跑到main的左边。right设置为-200px则是让right移动到main的右边。但同时,由于float属性他们会挡住main的显示。
4. 于是需要使用position定位,将left和right分别定位到最左端和最右端。
效果图如下:
两列布局效果:
圣杯布局的确是比上面所述的几种方法要好多了~
表示感谢~~
双飞翼布局
双飞翼布局相对与圣杯布局来说就更简单了。根本不需要用到position:relativehtml如下:
<body> <div class="content"> <div class="main"> <div class="main_content"> 中间自适应 </div> </div> <div class="left"> <p>I'am left</p> </div> <div class="right"> <p>I'am right</p> </div> </div> </body>
CSS:
*{ padding: 0; margin: 0; } .content{ box-sizing: border-box; width: 100%; } .main{ width: 100%; float: left; } .main_content{ background: #f66; margin: 0 200px; height: 100px; } .left{ background:#fcc; width: 200px; float: left; margin-left: -100%; height: 50px; } .right{ background: #fcc; width: 200px; float: left; margin-left: -200px; height: 60px; }
有几点要注意:
1. margin是在main的内部的div下设置的。
2. 没了。
效果图如下:
效果和圣杯布局一模一样,但是在理解上则更加简单。
相关文章推荐
- css两列自适应布局的多种实现方式及原理。
- UI界面--多种布局方式实现的工具栏
- Android入门——构建UI布局的多种方式
- 多种方式实现Android页面布局的切换
- Android之ListView中使用多种布局方式
- 横向两列布局(左列固定,右列自适应)的4中实现方式
- 两列布局的几种方式
- CSS 两列布局 之 左侧适应,右侧固定 3种方式
- 【Android笔记】listview加载性能优化及有多种listitem布局处理方式
- listview加载性能优化及有多种listitem布局处理方式
- android 实现listview的adapter多种布局方式
- listview加载性能优化及有多种listitem布局处理方式
- Android进阶——构建UI布局的多种方式总结
- asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
- 多种方式实现js图片预览
- lucene多种搜索方式详解例子
- 对RecycleView的多种item布局的封装
- 更简单的布局方式-FlexBox
- 多种jQuery绑定事件的实现方式
- c++ vector(向量)使用方法详解(顺序访问vector的多种方式)