CSS中的布局

布局那些事

  • 两栏布局
    很多情况下,要用到诸如左边固定,右边自适应这种情况,此时可以利用浮动来解决这个问题。
     <div class="wrapper  ">
       <div class="left"></div>
       <div class="right"></div>
     </div>

.wrapper{
  border:1px solid blue;
  height:300px;
}
.left{
  background-color:#ddd;
  width:100px;
  height:100%;
  float:left;
}
.right{
  background-color:red;
  height:100%;
  margin-left:100px;
}

通过给左边块级元素设置向左浮动,使其脱离标准文档流,从而右边的块级元素能够从第二行“跑到“第一行,这里要注意的是,左边元素其实是覆盖在右边元素上的,所以这里要给右边元素设置坐外边距,该值的大小是左边元素的宽度。

  • 三栏布局
    这里的三栏布局实现有很多种方式。

    —简单的利用浮动的方式

 <div class="left">左栏</div>
<div class="right">右栏</div>
<div class="middle">中间栏</div>

.left{
  width: 100px;height: 300px; background: yellow; float: left;    
}
.right{
  width: 100px; height: 300px; background: green; float: right;
}
.middle{
  height: 300px; background: red; margin:0 100px;
}

这里要注意的是html的结构,可以看到中间拦是在最后面的,在某些极端优化场景下,要求中间内容要首先被解析出来,这样子可能会有问题,后续再说。

–利用定位的方式

<div class="left">左栏</div>
  <div class="middle">中间栏</div>
<div class="right">右栏</div>

html,body{
  margin:0;
}
.left{
  width: 200px;height: 300px; background: yellow;
  position:absolute;   
  top:0;
  left:0;
}
.right{
  width: 200px; height: 300px; background: green;
 position:absolute; 
  top:0;
  right:0;
}
.middle{
  height: 300px; background: red;
  margin:0px 200px;
}

这样子的html结构是比较正常的,但是如果他们的父元素有内外边距,那么中间的部分可能不会和两端平齐,所以我给根元素设置了外边距为0。

—设置负值的margin
在上述第一个方法中提到,有时候我会希望中间主体内容先渲染出来,所以要把中间栏的dom放在最前面,那这时候要怎么去布局呢,可以这样来:

 <div class='main'>
  <div class='middle'>
    <div class="content">
          中间栏
    </div>
  </div>
  <div class="left">左栏</div>
  <div class="right">右栏</div>
 </div>


.main{
  overflow:hidden;

}
.content{
     border:1px solid #555;
     margin:0 200px;
}

.left{
  width: 200px;height: 300px; background: yellow;
  float:left;
  margin-left:-100%;
  word-break:break-all;

}
.right{
  width: 200px; height: 300px; background: green;
  float:left;
  margin-left:-200px;
}
.middle{
  height: 300px; background: red;
 float:left;
  width:100%;

}
.wrapper{
  float:left;
  width:100%;
}

其实主要是利用了负值的margin,值得注意的是,在middle下还有一个content的子元素,并且设置了水平的margin,主要是为了让内容能够在中间显示,这也是所谓的“双飞翼“布局,不过这种做法多了一些标签,乍看之下有点复杂。还有一种类似的“圣杯“布局,大致想法是一样的,只不过在解决内容不被遮盖上,是利用了padding和相对定位来实现。

—利用flex布局
弹性盒子的话实现就很简单了

  <div class='box'>
  <div class="left">左栏</div>
  <div class="middle">中间栏</div>
  <div class="right">右栏</div>
  </div>
.box{
 display:flex;
}
.left{
  width: 200px;height: 300px; background: yellow;
}
.right{
  width: 200px; height: 300px; background: green;
}
.middle{
  height: 300px;width:100%; background: red;
}

除了兼容性问题以外,这个实现起来就好多了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值