CSS多列等高

对于多列等高布局方法远非一种,但是我觉得浏览器兼容最好而且最简便的应该是padding补偿法。

padding补偿法的做法是把列的padding-bottom设为一个足够大的值,再把列的margin-bottom设一个与前面的padding-bottom的正值相抵消的负值,父容器设置超出隐藏,这样子父容器的高度就还是它里面的列没有设定padding-bottom时的高度,当它里面的任一列高度增加了,则父容器的高度被撑到它里面最高那列的高度,其他比这列矮的列则会用它们的padding-bottom来补偿这部分高度差。因为背景是可以用在padding占用的空间里的,而且边框也是跟随padding变化的,所以就成功的完成了一个障眼法。

示例代码

未使用等高布局:

<style type="text/css">
  body {
    padding: 0;
    margin: 0;
    color: #fff;
  }
  .container {
    margin: 0 auto;
    width: 600px;
    border: 3px solid #00c;
    overflow: hidden;
  }
  .left {
    float: left;
    width: 150px;
    background: orange;
  }
  .right {
    float: left;
    width: 450px;
    background: cyan;
  }
</style>
<div class="container">
  <div class="left">Left</div>
  <div class="right">
    Right <br/>
    现在我的高度比left高,所以left下面出出现了脱节的现象。
  </div>
</div>

效果:

使用等高布局后:

<style type="text/css">
  body {
    padding: 0;
    margin: 0;
    color: #fff;
  }
  .container {
    margin: 0 auto;
    width: 600px;
    border: 3px solid #00c;
    overflow: hidden;
  }
  .left {
    float: left;
    width: 150px;
    background: orange;
    padding-bottom: 10000px;
    margin-bottom: -10000px;
  }
  .right {
    float: left;
    width: 450px;
    background: cyan;
    padding-bottom: 10000px;
    margin-bottom: -10000px;
  }
</style>
<div class="container">
  <div class="left">Left</div>
  <div class="right">
    Right <br/>
    现在我的高度比left高,所以left下面出出现了脱节的现象。
  </div>
</div>

效果:

  • 支付宝二维码 支付宝
  • 微信二维码 微信
相关文章