自适应实现多栏等高布局

方法一、flex布局

在这里插入图片描述
代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
.container{
  display: flex;
  border: 1px solid #000;
}  
.left,.right,.center{
  flex-grow: 1;
}
.left{
  background-color: blue;
}
.right{
  background-color: coral;
}
.center{
  background-color: palevioletred;
}
</style>
<body>
  <div class="container">
    <div class="left">多列等高布局left<br/>多列等高布局left</div>
    <div class="center">多列等高布局center</div>
    <div class="right">多列等高布局right</div>
  </div>
</body>
</html>

优缺点:
缺点:IE9及以下版本不支持flex属性
优点:实现方便,还可以实现各种比例

二、利用border实现

效果图:
在这里插入图片描述
代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
.container{
  width: 200px;
  display: inline-block;
  border: 1px solid #000;
  border-left: 200px solid greenyellow;
  background-color: khaki;
  border-right: 200px solid pink;
}  
.left{
  float: left;
  width: 200px;
  margin-left: -200px;
  padding: 20px;
}
.right{
 float: right;
 padding: 50px;
 margin-right: -200px;
}
.center{
  float: left;
  padding: 20px;
}
</style>
<body>
  <div class="container">
    <div class="left">多列等高布局left</div>
    <div class="center">多列等高布局center<br/>多列等高布局center</div>
    <div class="right">多列等高布局right</div>
  </div>
</body>
</html>

优缺点:
这种方法只能最多只能实现三列等高,兼容IE8+

三、利用margin和padding对冲实现 注意父元素设置“overflow:hidden”

  • 触发父元素的BFC,使其高度自适应浮动元素高度
  • 将超出部分隐藏,主要是隐藏多余的背景色
    效果图:在这里插入图片描述
    代码:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
.container{
  overflow: hidden;
  font-size:0
}  
.column{
  font-size:16px;
  float: left;
  width: 200px;
  margin-bottom: -9999px;
  padding-bottom: 9999px;
  //border-bottom: 9999px solid transparent
}
.left{
 background-color: pink;
}
.right{
 background-color: plum;
}
.center{
 background-color: red;
}
</style>
<body>
  <div class="container">
    <div class="column left">多列等高布局left</div>
    <div class="column center">多列等高布局center<br/>多列等高布局center</div>
    <div class="column right">多列等高布局right</div>
  </div>
</body>
</html>

【TIPS】
1.代码中给.container父元素设置 font-size: 0 后,又给.column 子元素设置 font-size: 16 是为了消除HTML换行、空格等造成的“空白折叠现象”。
2.将上述padding-bottom: 9999px改为border-bottom: 9999px solid transparent;也可以达到一样的效果,原理类似。
优点:兼容所有浏览器
缺点:父元素overflow:hidden之后,如果有子元素需要定位到容器之外,会被隐藏掉;触发锚点定位或者使用DOM.srcollIntoview()方法的时候可能会出现奇怪的定位问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值