今天去面试前端人员,随即出了一个经典的布局问题,即如标题所示。但是结果令我很惊讶,超过一半的人都没答对,亦或是只答对一半!在此记录下用两种方法,第一种普通的方法,第二种是利用flex布局。前端
首先咱们假定页面上已有下列元素:面试
<body > <div id="left" ></div> <div id="right"></div> </body>
第一种方法:float+margin-left布局
这种方法是最简单也是最容易想到的方法(至少在我看来),请看以下CSS:flex
div{ height:200px; } #left{ float: left; width: 200px; background: blue; } #right{ margin-left: 200px; background: red; }
加上高度和背景是方便查看效果,将左侧div浮动,设置宽200px,右侧的div设置一个左外边距margin-left等于左侧宽度,没了!如此简单便可实现,但是在实际中,我看到的结果是有不写float直接margin-left的,也有写了float不写margin-left的,在此就很少说了...code
第二种方法:display+flexit
使用第二种方法的人我更是没见到,好吧,这可能须要多了解一些flex布局的知识,那么请看以下CSS:io
body{ display: flex; flex-flow: row; } #left{ width: 200px; background: blue; } #right{ flex: 1; background: red; }
先来解释下含义,首先将body的display为flex,让body听从flex布局,而且设置flex-flow为row,横向的,而后就是左侧div宽度200px,右侧div的flex:1,这里很关键,1会将剩余宽度所有占满,即若是左侧宽度发生改变的话,右侧可以自适应,而不用像第一种方法那样margin-left也要修改。这就是display flex的强大之处,而在面试中,没有一我的使用这种方法....float
好了,以上就是两种实现该布局的方法了,或许有人说,还有第三种方法呢,position:absolute,left:200px...那这种方法就留给你们去思考啦! D:)自适应