今天给大家分享一个圣杯布局和双飞翼布局及他们之间的区别,这两个三行布局一直是一些大厂前端面试的高频考点,带你走进大厂面试题,活不多说,冲冲冲~
这两个种三行布局效果是一样的,实现的效果如上图示所示,其特点为:
(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来实现元素的排布。
下面给一下完整代码:
圣杯布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="wrap"> <div id="header">header</div> <div id="content"> <div id="middle"> middle </div> <div id="left">left</div> <div id="right">right</div> </div> <div id="footer">footer</div> </div> </body> </html>
*{ 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; }
双飞翼布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="wrap"> <div id="header">header</div> <div id="content"> <div id="middle"> <div class="middle-inner"> middle </div> </div> <div id="left">left</div> <div id="right">right</div> </div> <div id="footer">footer</div> </div> </body> </html>
*{ 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; }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
长按识别二维码并关注微信
更方便到期提醒、手机管理