2种方法实现经典的左侧固定宽度200px,右侧自适应宽度的布局

      今天去面试前端人员,随即出了一个经典的布局问题,即如标题所示。可是结果令我很惊讶,超过一半的人都没答对,亦或是只答对一半!在此记录下用两种方法,第一种普通的方法,第二种是利用flex布局。


首先我们假定页面上已有下列元素:

<body >
    <div id="left" ></div>
    <div id="right"></div>    
</body>

第一种方法:float+margin-left

   这种方法是最简单也是最容易想到的方法(至少在我看来),请看如下CSS:

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的,在此就不多说了...

第二种方法:display+flex

   使用第二种方法的人我更是没见到,好吧,这可能需要多了解一些flex布局的知识,那么请看如下CSS:

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的强大之处,而在面试中,没有一个人使用这种方法....


   好了,以上就是两种实现该布局的方法了,或许有人说,还有第三种方法呢,position:absolute,left:200px...那这种方法就留给大家去思考啦! D:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值