布局是网页的框架,灵活的布局可以让页面信息得以合理的摆放,强健的布局方案可以适应不同分辨率下页面的显示。
1、上中下三栏式
2、左右两栏式
3、左右加页眉页脚
4、左中右三栏式
浮动布局
双飞翼布局
圣杯布局
弹性布局
一、上中下三栏式
1、等宽布局
这种布局方案是上中下等宽,目前比较少见了。
See the Pen 等宽三栏布局by zhaolanzhen (@mrszhao) on CodePen.
2、上下百分比,中间版心固定宽
这种“工”字型的上中下三栏布局是目前比较主流的方式,比如站酷等就是这样的布局。
这种布局需要注意的是,上下百分比的布局需要设置最小宽度为版心的宽度。
See the Pen 百分比三栏布局by zhaolanzhen (@mrszhao) on CodePen.
二、左右两栏式
1、混合浮动+普通流
左栏浮动,右栏不浮动,自适应。关键是父级设置为百分比。
See the Pen 左右两栏式1by zhaolanzhen (@mrszhao) on CodePen.
2、纯浮动式
左右两栏都浮动,但是必须要设置两栏的宽度,因为浮动后的div宽度由内容撑开。但是设置固定值就失去了自适应的效果,可以利用calc()的方法,当然需要牺牲兼容性。
如果为右栏设置了最小宽度,则当父容器宽度不够的时候,右栏会被挤下去。所以也需要为父容器设置最小宽度。
<div class="wrap"> <aside id="left"></aside> <section id="right"></section> </div>
.wrap{
width:80%;
/* 保证最小宽度为左栏+右栏最小宽度 */
min-width:500px;
margin:0 auto;
overflow: hidden;
}
#left{
width:200px;
height:500px;
background: #666;
float: left;
}
#right{
/* 计算出右栏的宽度,实现自适应 */
width:calc(100% - 200px);
height:500px;
background: #eee;
float: left;
min-width:300px;
}3、定位式
父容器相对定位,左右两栏绝对定位,也必须设置宽度,如果用了calc()自适应,为右栏设置了最小宽度时,如果父容器的宽度不够,则右栏会压在左栏上方。所以父容器也要设置最小宽度。
.wrap{
width:80%;
min-width: 500px;
margin:0 auto;
position: relative;
}
#left{
width:200px;
height:500px;
background: #666;
position: absolute;
top:0;
left:0;
}
#right{
width:calc(100% - 200px);
min-width: 300px;
height:500px;
background: #ddd;
position: absolute;
top:0;
right:0;
}三、左右加页眉页脚
中间如果有多栏的模块,先看成一个栏,再划分成多个栏。
See the Pen 左右加页眉页脚 by zhaolanzhen (@mrszhao) on CodePen.
当然可以结合上面的方法做成自适应的效果。
四、左中右三栏式
1、浮动式
左右两栏浮动,中间栏不浮动,父元素设置百分比宽度,可以让中间栏实现宽度自适应。
但是html结构需要把中间栏放在最下面。设置好最小宽度避免布局崩掉。
这种方式简单,但是因为把最主要的中间栏放在了html结构的下方,不利于浏览器渲染。
<div class="wrap"> <aside id="left"></aside> <aside id="right"></aside> <!-- 主体结构放最下面 --> <section id="main"></section> </div>
.wrap{
margin:0 auto;
width:80%;
min-width:720px;
}
#left{
width: 200px;
height:500px;
background: #666;
float: left;
}
#right{
width: 200px;
height:500px;
background: #666;
float: right;
}
#main{
/* 因为没有浮动,所以宽度和父容器保持一致,可以实现自适应。 */
min-width:300px;
height:500px;
background: #ccc;
margin:0 210px;
}2、双飞翼布局
为了让主体div的内容最先渲染,所以要改变布局。
双飞翼布局的关键点是,在主体div外面再加一个盒子做浮动,主体div不浮动,左右外边距用来放置浮动后利用负外边距回来的左右两栏。
<div class="wrap"> <!-- 需要在主体div外面再加一个盒子做浮动。主体div两边加两个外边距,用来放置左右两栏。 --> <section id="main"> <div class="content">#content</div> </section> <aside id="left">#left</aside> <aside id="right">#right</aside> </div>
.wrap{
margin:0 auto;
width:80%;
}
#main{
width:100%;
/* 主体div外面的盒子做浮动 */
float: left;
background: #ccc;
}
#left{
width:200px;
float: left;
height:500px;
background: #666;
/* 左栏利用左负外边距回到上个浮动div的最左边。此时的100%就是父容器的宽度。 */
margin-left: -100%;
}
#right{
width:200px;
float: left;
height:500px;
background: #999;
/* 右栏利用左负外边距回到上个浮动div的最右边,该边距的值和自己的宽度一致。 */
margin-left:-200px;
}
/* 主体div不浮动,只需要设置好两边的外边距和左右两栏宽度一致即可 */
.content{
height:500px;
margin:0 200px;
}See the Pen 双飞翼布局 by zhaolanzhen (@mrszhao) on CodePen.
3、圣杯布局
圣杯布局和双飞翼布局都是经典的三栏布局方案,比起浮动布局的好处就是把主体内容移上去先渲染,不过圣杯布局的html结构更简单,但是样式要稍微复杂一点点。
main,left,right都左浮动,但是利用main的padding来为左右两个容器腾出空间。因为利用负外边距只能让left回到父容器里面的最左边,所以还需要让left容器的position定位改成relative,再利用right值翻出去。right容器利用margin-right的负值翻出去。
注意点是必须为父容器设置最小宽度,因为left是通过定位翻出去的,所以当right的容器碰到left容器原始位置的时候,就会把自个儿挤下去。所以父容器的最小宽度为:left容器宽度的两倍+right容器的宽度。
<div id="container"> <div id="center" class="column"></div> <div id="left" class="column"></div> <div id="right" class="column"></div> </div>
div{
box-sizing:border-box;
}
.column{
float: left;
}
#container{
width:80%;
/* 最小宽度为left容器宽度的两倍+right容器的宽度 */
min-width:550px;
margin: 0 auto;
background-color: #ddd;
height: 600px;
/* 左右的内边距就是腾出左右两栏的空间 */
padding: 0 150px 0 200px;
}
#center{
width:100%;
height: 500px;
background-color: #f5c298;
}
#left{
width:200px;
height: 400px;
background-color: #f9a4bd;
/* 先回到父容器可用空间的最左边 */
margin-left:-100%;
position: relative;
/* 再利用定位翻出去,也可以用left:-200px */
right:200px;
}
#right{
width:150px;
height: 500px;
background-color:#7ac8f5;
/* 可以用定位,也可以直接用margin-right的负值 */
margin-right:-150px;
}双飞翼布局和圣杯布局的特性:
都是三栏布局,左右两栏固定宽度,中间栏自适应。
html结构都提前渲染主体。
双飞翼主体结构多一个父容器。
双飞翼利用的是主体结构的父容器和左右两栏浮动,主体内容不浮动,利用主体内容的左右外边距腾出空间。再为左右两栏设置负外边距回到指定位置。
圣杯布局结构简单点,三栏都浮动,利用主体结构的内边距实现腾出空间,但是左栏除了负外边距外,还需要额外的定位才能实现。而且父容器必须指定最小宽度。
4、弹性布局
这估计是现代浏览器最好的布局方式了。也是最简单的布局方式。
可以让center扩展和收缩,左右两栏固定宽度,但是可以收缩。改变left的排序到最前面。而且因为可以收缩,不设置最小宽度,布局都不会乱。
<div id="container"> <div id="center"></div> <div id="left"></div> <div id="right"></div> </div>
#container{
width:80%;
margin: 0 auto;
height: 500px;
background-color: #ddd;
/* 弹性布局 */
display: flex;
}
#center{
/* 让center可以扩展,收缩 */
flex: 1;
background-color: #eee;
}
#left{
width:200px;
background-color: #ccc;
/* 把left的排序放在最前面 */
order: -1;
}
#right{
width: 150px;
background-color: #aaa;
}See the Pen flex实现三栏布局 by zhaolanzhen (@mrszhao) on CodePen.
发表评论:
◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。