您现在的位置是:网站首页> 编程资料编程资料
面试必问:圣杯布局和双飞翼布局的区别浅谈css双飞翼布局和圣杯布局CSS的三列式"圣杯布局"方案完全解析CSS布局之圣杯布局与双飞翼布局
2021-09-02
1339人已围观
简介 圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式。圣杯布局和双飞翼布局是很多大厂必考的内容,本文就详细介绍一下这两个布局有什么区别,感兴趣的可以了解一下
前言
今天给大家分享一个圣杯布局和双飞翼布局及他们之间的区别,这两个三行布局一直是一些大厂前端面试的高频考点,带你走进大厂面试题,活不多说,冲冲冲~
布局效果


这两个种三行布局效果是一样的,实现的效果如上图示所示,其特点为:
- header和footer的高度为整个浏览器的宽度
- 中间是个三行布局,left和right的宽度是固定的。
- 而middle的内容的宽度是自适应占满中间位置的,高度为三栏中的最大高度其实圣杯布局和双飞翼布局在前的处理是一样的,只不过是在中间处理的时候有些小差异而已啦。
前期处理
- 为了避免出现问题我们先给body设置一个min-width:600px;
- 再将header和footer的宽度设为100%(整个浏览器的页面),并添加背景色便于区分。
- 在content中我们给left,right,midlle都添加float:left效果,设置left,right的宽高。
- middle的宽度设置为100%,高度为与left,right的高度相同,同样为了便于看效果我们这里也给它们一个背景色。
- 这里有个需要注意的地方,我们还应该给content设置一个高度,content中的div我们添加了float:left属性,因此他们都脱离了文本流,导致出现了高度塌陷。
(ps:我这里是在content中添加了一个overflow: hidden,形成一个BFC区域来解决这个问题的,感兴趣的小伙伴可以自行了解,当然你不这样做设置content的高度就行啦)
*{ margin: 0; padding: 0; } body{ min-width: 600px; } #header,#footer{ height: 50px; width: 100%; background: grey; } #middle,#left,#right{ float: left; } #content{ overflow: hidden; } #left,#right{ width: 200px; height: 200px; background: pink; } #middle{ width: 100%; height: 200px; background: yellowgreen; } 
我们发现现在的页面是这样子的,那这怎么回事呢?
答案很简单,left,right,middle本来应该是在一条直线上的,但是content的宽度不够,就把left,right两个盒子挤下来啦。
那现在我们分别来看看这两种布局接下来解决这个问的方法吧:
圣杯布局
我们先给content设置一个padding:0 200px,将左右两边各腾出200px宽度。
接下来我们只需要将left,right,两个盒子放在两个区域就行啦。
最后分别给left,left设置margin属性调整位置。
#content{ overflow: hidden; padding: 0 200px; } #left{ margin-left:-100% ; } #right{ margin-left: -200px;我们再来看一下效果

当当当,见证奇迹的时候到啦~

双飞翼布局
那我们看看双飞翼布局是怎么解决这个问题的呢。来往下看
双飞翼布局是在middle下添加了一个middle-inner盒子,将middle的内容放在这个盒子里面(这有什么用呢?不着急咱先往下看)。
我们和圣杯布局中一样也给float,left设置margin值调整位置。
但是此布局就不需要给left,right设置定位啦。
#left{ float: left; margin-left: -100%; } #right{ float: left; margin-left: -200px; } .middle-inner{ padding: 0 200px; } 
这时我们发现middle中的内容不见了,此时我们之前在midlle里面添加的midlle-inner盒子就派上用场啦,此时只需要给这个盒子设置一个margin:0 200px,那么我们的内容是不是来到中间展示了呢。
.middle-inner{ margin: 0 200px; } 看效果

和我们预期的一样,大厂面试题不过如此嘛,收工收工!!!!
总结一下
最后我们来总结一下,双飞翼布局其实和圣杯布局的精髓是一样的,都是通过设置负margin来实现元素的排布。
- 不同的就是html结构,双飞翼是在middle元素内部又设置了一个milddle-inner并设置它的左右margin,而非圣杯布局的padding,来排除两边元素的覆盖。
- 双飞翼布局可以多了一个html结构,但是可以不用设置left,right元素的定位。
下面给一下完整代码:
圣杯布局
Document headermiddleleftright
*{ margin: 0; padding: 0; } body{ min-width: 600px; } #header,#footer{ height: 50px; width: 100%; background: grey; } #middle,#left,#right{ float: left; } #content{ overflow: hidden; padding: 0 200px; } #left,#right{ width: 200px; height: 200px; background: pink; } #middle{ width: 100%; height: 200px; background: yellowgreen; } #left{ margin-left:-100% ; position: relative; left:-200px; } #right{ margin-left: -200px; position: relative; left:200px; } 双飞翼布局
Document headermiddleleftright
*{ margin: 0; padding: 0; } .wrap{ min-width: 600px; } #header,#footer{ height: 50px; width: 100%; background:grey; } #left,#right{ width: 200px; height: 200px; background: green; } #middle{ background: pink; width: 100%; float: left; height:200px; } #content{ overflow: hidden; } #left{ float: left; margin-left: -100%; } #right{ float: left; margin-left: -200px; } .middle-inner{ margin: 0 200px; } 到此这篇关于面试必问:圣杯布局和双飞翼布局的区别的文章就介绍到这了,更多相关圣杯布局和双飞翼布局区别内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- CSS 实现多彩、智能的阴影效果css3中less实现文字长阴影(long shadow)CSS中使用文本阴影与元素阴影效果
- 解析CSS 提取图片主题色功能(小技巧)CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
- 为什么你写的height:100%不起作用 详解HTML元素的height、offsetHeight、clientHeight、scrollTop等梳理CSS中width和height的默认值auto与%案例详解详解HTML中字体使用line-height依然不能垂直居中解决办法CSS line-height的如何继承的问题深入理解 line-height 和 vertical-alignCSS中的line-height行高属性学习教程深入理解CSS height属性设置元素的高度
- css display table 自适应高度、宽度问题的解决详解CSS多种三列自适应布局实现CSS实现背景图片屏幕自适应的实现css3实现自适应浏览器图片布局特效CSS实现表格首行首列固定和自适应窗口的实例代码css实现六种自适应两栏布局方式CSS将img图片填满父容器div并自适应容器大小css实现两栏布局,左侧固定宽,右侧自适应的多种方法
- CSS 新特性 contain控制页面的重绘与重排问题css重绘与重排的方法
- css position fixed 左右双定位的实现代码CSS之定位布局(position,定位布局技巧)css定位position引发的层级关系问题详解详解css粘性定位position:sticky问题采坑CSS position属性和实例应用演示CSS的position定位和float浮动详解css关于position属性的用法详解(绝对定位和相对定位的混淆)
- css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效CSS3 transform(变形)和transform-origin(变形原点)调试工具
- CSS3实现的侧滑菜单CSS3实现的3D隧道效果用CSS3画一个爱心css3 实现文字闪烁效果的三种方式示例代码六种css3实现的边框过渡效果CSS3 实现的动态星空背景jQuery+CSS3制作卡片式步骤操作ui交互特效代码基于CSS3画一个iPhoneCSS3 实现NES游戏机的示例代码
- 利用HTML5+css3+jquery+weui实现仿微信聊天界面功能HTML5仿微信聊天界面、微信朋友圈实例代码详解html5 canvas 微信海报分享(个人爬坑)HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能html5 canvas合成海报所遇问题及解决方案总结基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)HTML5微信播放全屏问题的解决方法HTML5页面音视频在微信和app下自动播放的实现方法HTML5仿手机微信聊天界面微信端html5页面调用分享接口示例
- 分享一个H5原生form表单的checkbox特效代码CSS+HTML自定义checkbox效果的实例代码Html中使用自定义图片来实现checkbox显示的方法HTML的checkbox和radio样式美化的简单实例使用CSS修改HTML的checkbox效果的小示例分享HTML checkbox 点击说明文字即可选择/取消勾选状态
