当前位置: 首页 > Web前端 > HTML5

《面试题》如何实现圣杯布局?

时间:2023-04-05 19:58:37 HTML5

前言最近有朋友向我抱怨说,面试时突然被问到如何实现布局和原理,他有点懵。之前JavaScript部分回答的还不错,这里翻过来了。完全没思路,后面面试的状态一落千丈。结局如他所料,他没有被录取。给这位朋友一个答复后,我就回家整理了这篇文章。希望其他小伙伴在面试中被问及圣杯的布局时,能够冷静的回答。本文将介绍经典布局——圣杯布局的原理和两种实现方式:floating和flex。什么是圣杯布局?圣杯布局就是讨论“三栏式液体布局”的实现。最早的完美实现是MatthewLevine在2006年写的一篇文章《In Search of the Holy Grail》,主要描述了网页中最佳圣杯的实现方法。它有以下要求:上部(页眉)和下部(页脚)各自占据屏幕的整个宽度。上下部分之间的部分(容器)是三列布局。三栏式布局两侧宽度不变,中间部分自动填满整个区域。中段的高度是三列最高区域的高度。接下来介绍两种实现方法。它们最终的效果是一样的,如下图所示:实现方式一:先浮动代码:

header

middle

middle-content

left

left-content

right

right-content

页脚

.header,.footer{border:1pxsolid#333;背景:#ccc;text-align:center;}.footer{clear:both;}.container{padding:0220px0200px;溢出:隐藏;}.left,.middle,.right{位置:相对;向左飘浮;最小高度:130px;}.middle{宽度:100%;-左:-100%;左:-200px;宽度:200px;背景:red;}.right{margin-left:-220px;右:-220px;宽度:220px;background:green;}分析思路:在html中,首先定义页眉和页脚的样式,让它们水平地充满容器中的三列设置为浮动和相对定位(后面会用到),中间应该是放在前面,页脚应该清除浮动。三列的左右两列固定宽度分别为200px和220px,中间部分设置为100%满。因为浮动的关系,中间会占据整个容器,左右两边的区域被挤掉。接下来设置left的margin-left:-100%;,让left回到上一行的最左边,但是会遮住中间,所以此时给外层容器设置padding:0220px0200px;,为left腾出空间,然后left和Not放在最左边,因为之前已经设置了相对定位,所以使用left:-200px;向左拉回到左边。同样,对于右侧区域,设置margin-left:-220px;向右拉回第一行此时右边有220px的空间,所以最后设置`right:-220px;##将右边的区域拉到最右边。实现方式二:flex弹性盒使用弹性盒实现圣杯布局非常简单。你只需要为中间部分使用flex布局。

header

left

left-content

middle

middle-content

right

右内容

页脚

.header,.footer{border:1px实心#333;背景:#ccc;text-align:center;}.container{display:flex;}.left{width:200px;背景:红色;}.middle{flex:1;背景:蓝色;}.right{宽度:220px;background:green;}解析一下思路:header和footer同上面一样,横向抖满。页脚不再需要清除和浮动。容器中的左、中、右可以依次排列。没有必要把中间放在前面,为容器设置弹性布局。显示:弹性;左右区域宽度固定,中间设置为flex:1;可以得出结论,一般来说,弹性布局是最适合实现圣杯布局的方法。相比浮动,弹性布局的结构更加清晰易懂,无需担心移动端的适配问题。浮动法,面试中可能会遇到,主要考的是对布局的理解能力。所以建议大家可以复制浮动的例子,自己模拟一下,加深理解。ReferencesInSearchingtheHolyGrailPS:欢迎关注我的公众号《朝歌前端栈》交流更多的思想和技术。