使用padding-bottom和margin-bottom实现两栏等高布局原理

声明:以下均为个人见解,若有错误请指出。

效果预览:
两栏等高

<!DOCTYPE html>
<html>
  <head>
    <title>demo</title>
    <style type="text/css">
    * {
      margin: 0;
      padding: 0;
    }
    body {
    }
    .container {
      width: 400px;
      overflow: hidden;
      background-color: pink;
    }
    .left {
      float: left;
      width: 200px;
      background-color: silver;
      padding-bottom: 100px;
      margin-bottom: -100px;
      text-align: center;
    }
    .right {
      float: left;
      width: 100px;
      background-color: skyblue;
    }
    </style>
  </head>
  <body>
    <div class="container">
        <span class="left">我在左侧</span>
        <span class="right">我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字</span>
    </div>
  </body>
</html>  

实现机制:

left元素高度根据右侧文字的高度进行自适应。利用padding-bottom正值和margin-bottom负值相互抵消。

当父元素设置overflow: hidden时产生的影响:

(1)触发bfc,使的父元素的高度在计算时包括float元素的高度,子元素left和right的高度中的最大者决定了父元素的高度。此处父元素的高度即为right元素的高度。
(2)left元素中由于背景色可以作用在padding中,而超出right元素高度部分的padding会被父元素设置的overflow: hidden截断。
(3)left元素的margin-bottom抵消掉padding-bottom部分,使得父元素在检测高度时发现左侧的高度低于右侧的高度,因此父元素的高度会与right的高度一致。

当修改margin-bottom的值为-40px时产生的效果:
两栏等高
此时父元素在检测高度时发现左侧高度高于右侧,因此父元素的高度就等于左侧元素的高度。

注意点:事实上第一种情况中left元素的高度(元素框尺寸)等于padding + 文字的高度,其高度要远高于right元素的高度,但是由于父元素中的overflow: hidden,导致对于父元素来说,left元素的高度只有文字的高度,padding部分会被margin抵消掉。也就导致为什么父元素的高度是right元素的高度而不是left元素的高度。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值