一道面试题,构造一个如图的容器,在宽度自由伸缩的情况下比例保持不变。

一套前端笔试题(今日头条)

方法一:flex

    <div class='outer'>
      <div class='third'></div>
      <div class='third'></div>
      <div class='third'></div>
    </div>
    .outer{ 
      display:flex;
      justify-content:space-between;
    }
    .outer .third{
      flex:auto;
      border:1px solid black;
      height: 100px;
      box-sizing:border-box;
    }

问题:1、兼容性问题IE11一下都不支持 2、border未合并

方法二:display:inline

   .outer2 .third{
      width:33%;
      border:1px solid black;
      height: 100px;
      display: inline-block;
      margin:0;
      padding:0;
      box-sizing:border-box;
    }
    <div class='outer2'>
      <div class='third'></div><div class='third'></div><div class='third'></div>
    </div>

问题:1、兼容性问题,inline-block问css2.1属性 2、border未合并 3、严格来讲未占满父元素

补充一下,inline-block的兼容性可以用

*display:inline;
*zoom:1;

来解决

注:三个子元素必须写在同一行,否则会出现间距。不将width设置为33.3%是因为低级浏览器不支持box-sizing属性,width+border会超出一行的宽度

方法三:float

    .outer3{
      overflow: hidden;
    }
    .outer3 .third{
      width:33%;
      border:1px solid black;
      height: 100px;
      margin:0;
      padding:0;
      box-sizing:border-box;
      float:left;
    }
    <div class='outer3'>
        <div class='third'></div>
        <div class='third'></div>
        <div class='third'></div>
    </div>

问题:1、border未合并 2、严格来讲未占满父元素

方法四:table

    table{
      width:100%;
      border-collapse:collapse;
    }
    td{
      border:1px solid black;
      height:100px;
      margin:0;
      padding:0;
    }
    <table>
      <tr>
        <td></td>
        <td></td>
        <td></td>
      </tr>
    </table>

问题:使用table布局影响页面效率

欢迎补充新方法

补充一下,关于border未合并的问题,将border宽度设置为偶数值,mragin-left和margin-right设置为border的一半可以解决这个问题

posted on 2017-02-09 22:08  lichliu  阅读(206)  评论(0编辑  收藏  举报