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)、

 

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


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CSS圣杯布局双飞翼布局都是三栏布局,其中主要内容区域在最中间,左右两侧是侧边栏。它们的目的是为了解决传统三栏布局固定中间度,侧边栏无法等高的问题。 CSS圣杯布局的实现: HTML结构如下: ``` <div class="container"> <div class="main">主要内容</div> <div class="left">左侧边栏</div> <div class="right">右侧边栏</div> </div> ``` CSS样式如下: ``` .container { display: table; width: 100%; table-layout: fixed; border-spacing: 0; } .main { display: table-cell; width: 100%; background-color: #fff; } .left { display: table-cell; width: 200px; background-color: #ccc; position: relative; left: -200px; margin-left: -100%; } .right { display: table-cell; width: 200px; background-color: #ccc; position: relative; right: -200px; margin-right: -100%; } ``` 实现原理:通过将容器设置为table,主要内容区域和侧边栏都设置为table-cell,实现三栏等高。通过设置负的margin和left/right来实现侧边栏的位置偏移。 双飞翼布局的实现: HTML结构如下: ``` <div class="container"> <div class="main">主要内容</div> </div> <div class="left">左侧边栏</div> <div class="right">右侧边栏</div> ``` CSS样式如下: ``` .container { padding-left: 200px; padding-right: 200px; } .main { float: left; width: 100%; background-color: #fff; } .left { float: left; width: 200px; margin-left: -100%; background-color: #ccc; } .right { float: left; width: 200px; margin-left: -200px; background-color: #ccc; } ``` 实现原理:通过设置主要内容区域的度为100%,再通过padding将左右两侧的度撑开。通过设置负的margin和left来实现侧边栏的位置偏移。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值