资讯专栏INFORMATION COLUMN

圣杯布局和双飞翼布局

468122151 / 1765人阅读

摘要:比起双飞翼布局,它的起源不是源于对页面的形象表达。一起来看看这两种布局的区别在哪一双飞翼布局可以看到,我们在里面又加了一个内容层。

稍微了解前端的人都知道,圣杯布局和双飞翼布局是前端面试时必问的问题,因为它既能体现你懂HTML结构又能体现出你对DIV+CSS布局的掌握,毕竟我们学习CSS主要就是为了更好地布局带来最好的用户体验嘛~

事实上,圣杯布局其实和双飞翼布局是一回事。它们实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局。它们实现的效果是一样的,差别在于其实现的思想。

圣杯布局的出现是来自于a list part上的一篇文章In Search of the Holy Grail。比起双飞翼布局,它的起源不是源于对页面的形象表达。在西方,圣杯是表达“渴求之物”的意思。而双飞翼布局则是源于淘宝的UED,可以说是灵感来自于页面渲染。一起来看看这两种布局的区别在哪:

一、双飞翼布局

可以看到,我们在main里面又加了一个内容层。如果知道盒子模型,就知道我们是不能直接给main添加margin属性,因为我们已经设置了width:100%,再设置margin的话就会超过窗口的宽度,所以我们再创造一个内容层,将所有要显示的内容放到main-content中,给main-content设置margin就可以了。

因为不改变父元素所以只需要给main-content设置margin: 0 200px 0 200px;属性就可以了达到效果

通过缩放页面就可以发现,随着页面的宽度的变化,这三栏布局是中间盒子优先渲染,两边的盒子框子固定不变,即使页面宽度变小,也不影响我们的浏览。如果你有了那么一点理解以后,我们来看看圣杯布局的实现:

二、双飞翼布局
第一步:给出HTML结构:

Header内容区

中间弹性区

左边栏

右边栏

Footer内容区

写结构的时候要注意,父元素的的三栏务必先写中间盒子。因为中间盒子是要被优先渲染嘛~并且设置其自适应,也就是width:100%。 第二步:给出每个盒子的样式

header{width: 100%;height: 40px;background-color: darkseagreen;}

.container{ height:200px;overflow:hidden;}

.middle{width: 100%;height: 200px; background-color: deeppink;float:left;}

.left{ width: 200px;height: 200px;background-color: blue;float:left;}

.right{width: 200px;height: 200px;background-color: darkorchid;float:left;}

footer{width: 100%; height: 30px;background-color: darkslategray;}

第三步:看此时的效果图

大家可以看到,三栏并没有在父元素的一行显示,就是因为中间盒子我们给了百分之百的宽度。所有左右两个盒子才会被挤下来。
那么如何让它们呈现出一行三列的效果呢?那就要让左边的盒子要到中间盒子的最左边,右边的盒子到中间盒子的最右边。换个想法,如果中间盒子不是100%的宽度,那么按照文档流,左边的盒子一定会在中间盒子的后面显示,接着显示右边的盒子。但是现在中间盒子是满屏了的,所以左右两个盒子被挤到下一行显示。我们要做到的是让左右两个盒子都上去。此时,CSS的负边距(negative margin)该上阵了。

第四步:利用负边距布局
1.让左边的盒子上去

需要设置其左边距为负的中间盒子的宽度,也就是.left {margin-left:-100%;}。这样左盒子才可以往最左边移动。

2.让右边的盒子上去

需要设置其左边距为负的自己的宽度,也就是.right {margin-left:-200px;}。这样右盒子才可以在一行的最右边显示出自己。

第五步:看此时的效果图

第六步:让中间自适应的盒子安全显示

首先:利用父级元素设置左右内边距的值,把父级的三个子盒子往中间挤。

代码如下:

.container{ padding: 0 200px;} 这里的200px是左右盒子的宽度。

效果如下:

我们可以看到,左右两边的内边距是有了,但是中间盒子上的内容还是被压着。

其次:给左右两个盒子加一个定位,加了定位之后左右两个盒子就可以设置left和right值。

代码如下:

.left{ position: relative; left: -200px;}

.right{position: relative;right: -210px;

现在,圣杯布局终于搞定了,也实现了我们要的效果,左右侧的盒子固定,中间盒子自适应,而且中间盒子的内容完全不受影响。你是不是也懂了呢? 真心希望对你有帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/114594.html

相关文章

  • 圣杯布局飞翼布局

    摘要:解决的问题圣杯布局和双飞翼布局解决的问题是一样的,就是两边定宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。 解决的问题 圣杯布局和双飞翼布局解决的问题是一样的,就是两边定宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。 圣杯布局 圣杯布局dom结构: 圣杯布局 ...

    yankeys 评论0 收藏0
  • CSS布局--圣杯布局飞翼布局以及使用Flex实现圣杯布局

    摘要:圣杯布局双飞翼布局所谓圣杯布局和双飞翼布局其实解决的问题是相同的,都是解决左右两栏固定宽度,中间部分自适应,其中某部分内容比其他内容高的时候,保证三者元素等高。双飞翼用在外层多加了一个然后改用。 前言 我曾一度觉得总写css的前端很low,有了这种思想以后我便远离网页布局,H5的工作更不想接,沉迷于页面逻辑和封装组件。直到最近我面试,面试官说我css3理解的不熟,我起初很不屑,但后来静...

    zqhxuyuan 评论0 收藏0
  • 两招搞定三栏布局——圣杯布局飞翼布局

    摘要:如何实现如下的这种中间自适应宽度,左右两栏固定宽度布局这是一道经典的面试题,常用的方法是圣杯布局双飞翼布局。相信看完这篇文章,你就能很清楚的知道什么是圣杯和双飞翼了。在双飞翼中避免左右盒子被覆盖,是通过设置的左右来实现的。 如何实现如下的这种中间自适应宽度,左右两栏固定宽度布局? showImg(https://segmentfault.com/img/bVbe5Dq?w=1215&h...

    Kaede 评论0 收藏0
  • 圣杯布局飞翼布局

    摘要:参考文章同学的关于圣杯布局,圣杯布局和双飞翼布局的区别经典布局圣杯布局实现的效果主要在中,和固定宽度,首先渲染,且自适应宽度。 ps: 参考文章 DotHide同学的关于圣杯布局,圣杯布局和双飞翼布局的区别 经典布局 圣杯布局 showImg(https://segmentfault.com/img/remote/1460000015851268?w=682&h=247); #hea...

    ZweiZhao 评论0 收藏0
  • 浅谈面试中常考的两种经典布局——圣杯飞翼

    摘要:圣杯和双飞翼布局介绍最近正好碰到了写这种布局,一直没有总结过正好借这次机会总结一波,同时加强一下自己的理解。使用双飞翼布局就可以避免这个问题。双飞翼布局则是中间栏不变,将内容部分为两边腾开位置参考 圣杯和双飞翼布局介绍 showImg(http://www.xluos.com/usr/uploads/2018/02/990972879.png);最近正好碰到了写这种布局,一直没有总结过...

    SwordFly 评论0 收藏0
  • 浅谈面试中常考的两种经典布局——圣杯飞翼

    摘要:圣杯和双飞翼布局介绍最近正好碰到了写这种布局,一直没有总结过正好借这次机会总结一波,同时加强一下自己的理解。使用双飞翼布局就可以避免这个问题。双飞翼布局则是中间栏不变,将内容部分为两边腾开位置参考 圣杯和双飞翼布局介绍 showImg(http://www.xluos.com/usr/uploads/2018/02/990972879.png);最近正好碰到了写这种布局,一直没有总结过...

    刘厚水 评论0 收藏0

发表评论

0条评论

468122151

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<