CSS布局之什么是圣杯布局与双飞翼布局

圣杯布局与双飞翼布局

在面试时,你会经常遇到那么一个考题,有leftrightcontainer三个盒子,要求leftright盒子宽度固定,分别固定于浏览器两侧,container位于中间,宽度随浏览器窗口自适应;说白了,就是要你进行两边定宽,中间自适应的三栏布局,并且中间栏要放在文档流前面以优先渲染。而圣杯布局与双飞翼布局就是用来解决这个问题最常见的布局方法。但两者在实现上有一些差异。

先给出一个常见的DOM结构:

 

先说圣杯布局

第一步,设置如下样式:

 

给三盒子都加:float:left; 这时,由于container的宽度为100%;所以,一行装不下这三个盒子,leftright会被往下挤:

 

这时,给leftmargin-left:-100%; rightmargin-left:-200px; 两个盒子就分别到了自己的位置上去:

 

看到这,有人就会说,这不是达到效果了吗?其实,你仔细看就会发现,表面上看是达到效果了,其实,这时的container的宽度是100%;撑满浏览器的,它的左右两边各被left
right盖住了一部分,这就尴尬了。

第二步,给父元素加padding

 

结果是:

 

我们发现,这时,虽然container的宽度是对的了,但是leftright也也被挤到里面去了,还是把container的内容盖住了。

第三 步,加定位:

 

leftrightposition: relative; 然后left相对自己往左偏移自身宽度的距离,让出盖住的部分,right相对自己往右偏移自身宽度,让出盖住的部分,这就可以达到我们想要的效果了:

 

至于这三个盒子的高度,就看需求而定了,主要好好利用浮动与定位,相信很简单。

再来看双飞翼布局

双飞翼布局前期思路与圣杯布局一样,都是利用浮动和margin将三个盒子弄到一行的位子,也就是说在第一步上是一样的。不同的是如何处理被遮盖的问题。
相对圣杯布局,双飞翼布局要在DOM结构上加一个元素:

 
container内部加了一盒显示内容的盒子container_in的盒子,在布局时,只要leftright不盖住container_in就可以了。

所以,双飞翼布局的css代码如下:

 

只要给container加上左右margin,我们就得到了想要的效果:

 
相对于圣杯布局来说,双飞翼布局不用给leftright加定位于leftright属性,只要在container内部加一个盒子用于显示内容,并给它设置相应的左右margin就可以了。两种布局各有特点。

其实,只要熟练掌握css布局原理,实现这种效果有很多种方法:

针对第二种DOM结构:

1)、

 

 

2)、

 

针对第一种DOM结构:

1)、

 

  这些布局方式,可能不使用与某些需求,但只要掌握布局原理,做一些适当的改变就可以了。。。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值