css实现两栏布局

106 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

在开发中,实现两栏布局和三栏布局都是非常常见的操作,是前端开发的一门基本功。虽然常用的就那么一两种,但实际可以用很多方式实现。本文就详细记录一下如何实现双栏布局的几种方法。下篇文章再记录一下三栏布局。

浮动法

浮动法是利用浮动元素在页面中脱离文档,没有了自己的位置,另一侧的元素会被覆盖,使用margin撑开就可以实现双栏。

一:将左侧固定宽度并设置浮动,右边自适应并设置margin-left,从而实现左边固定宽度右侧自适应的双栏布局

代码如下:

<style>
.left{
   width: 200px;
   background-color: red;
   float:left;
  }
.right{
   background-color: green;
   margin-left: 200px;
  }
</style>
<body>
   <div class="left">左部</div>
   <div class="right">右部</div>
</body>

效果如下:

image.png

二:将右侧固定宽度设置浮动,左边自适应设置margin-right,从而实现左边自适应右侧固定宽度的双栏布局

代码如下:

<style>
.left{
   margin-right:200px;
   background-color: red;
  }
.right{
   width:200px;
   float:right;
   background-color: green;
  }
</style>
<body>
   <div class="right">右部</div>
   <div class="left">左部</div>
</body>

效果如下:

image.png

利用flex

弹性布局是比较常用于实现双栏布局的一种方式,非常推荐使用。将父元素设置为flex布局,flex布局的方向属性默认是水平排列,其他的宽度等都可自定义。则可以简单实现双栏布局。

代码如下:

<style>
.box{
   display:flex;
}
.left{
   width:200px;
  }
.right{
   flex:1;
  }
</style>
<body>
   <div class="box">
     <div class="right">右部</div>
     <div class="left">左部</div>
   </div>
</body>

利用BFC

BFC可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响外面的元素,并且BFC清除浮动;可以阻止元素被覆盖。

因此利用BFC的特性可以让右侧触发BFC的元素来清除左边浮动的影响(除了下面示例的overflow:hidden,overflow:auto和overflow: scroll,display: flex均可形成BFC),从而实现双栏布局。

代码如下:

<style>
.left{
   width: 200px;
   float:left;
  }
.right{
   overflow:hidden;
  }
</style>
<body>
   <div class="left">左部</div>
   <div class="right">右部</div>
</body>

利用网格布局

利用网格布局的属性也可简单实现双栏布局,但是需要考虑浏览器是否兼容网格布局,故开发中不常使用。

<style>
.box{
  dispaly:grid;
  grid-template-columns:200px auto;
  }
</style>
<body>
   <div class="box">
     <div class="right">右部</div>
     <div class="left">左部</div>
   </div>
</body>

绝对定位+margin

方法一:将父级元素设置相对定位。左边元素设置为 absolute 定位,并且宽度设置为 200px。将右边元素的 margin-left 的值设置为 200px。

方法二:将父级元素设置为相对定位。左边元素宽度设置为 200px,右边元素设置为绝对定位,左边定位为 200px,其余方向定位为 0。