CSS布局——三栏布局

题外话:抓狂系列片之叁个我。

三栏布局要求说明:两边固定宽度,中间自适应,顶部对齐

HTML文档结构有三种(内层div顺序不同):左右中、左中右。

实现效果:

方法如下:

1.左右中:对左右子元素使用了浮动属性(float),从而脱离了文档流,如果按照正常左中右的顺序,会导致右子元素出现在中间子元素的右下方。所以,浮动元素应该尽可能高的放置。

<div class="outer">
    <div class="inner left">left</div>
    <div class="inner right">right</div>
    <div class="inner middle">middle</div>
</div>

利用float属性,左子元素float设置为left,右子元素float设置为right,中间子元素设置margin-left为左子元素width,margin-right为右子元素width。(后附BFC说明)

.outer{
	overflow:hidden; /*生成BFC->将子元素中的浮动元素(float)的高度考虑进去*/
	background:#DCDCDC; /*灰*/
}
.left{
	width:200px;
	height:400px;
	float:left;
	background:#FF0000; /*红*/
}
.middle{
	height:100px; /*指定高度有效,设置百分比无效,若无此行,高度自适应*/
	margin-left:200px; /*左子元素宽度*/
	margin-right:300px; /*右子元素宽度*/
	background:#00FF00; /*绿*/
}
.right{
	width:300px;
	height:300px;
	float:right;
	background:#0000FF; /*蓝*/
}

2.左右中:利用position定位属性,父元素absolute,左右子元素absolute并分别设left为0,right为0,中间元素取margin-left和margin-right分别为做右子元素的宽度

.outer{
    position:relative;
    background:#DCDCDC; /*灰*/
}
.left{
    width:200px;
    height:400px;
    position:absolute;
    left:0;
    background:#FF0000; /*红*/
}
.middle{
    height:100%;
    margin-left:200px; /*左子元素宽度*/
    margin-right:300px; /*右子元素宽度*/
    background:#00FF00; /*绿*/
}
.right{
    width:300px;
    height:300px;
    position:absolute;
    right:0;
    background:#0000FF; /*蓝*/
}

3.左中右:设置属性display:flex (后附flex属性值说明)

<div class="outer">
    <div class="inner left">left</div>
    <div class="inner middle">middle</div>
    <div class="inner right">right</div>
</div>
设置父元素的display属性为flex,其内容两端对齐。指定子元素的高度以撑起容器,中间子元素宽度设置为100%。
.outer{
	display:flex;
	justify-content:space-between; /*子元素内容两端对齐*/
	background:#DCDCDC;
}
.left{
	width:200px;
	height:400px;
	background:#FF0000;
}
.middle{
	width:100%; /*宽度*/
	height:100px; 
	background:#00FF00;
}
.right{
	width:300px;
	height:300px;
	background:#0000FF;
}

附:

1.BFC(Block Formatting Context,块级格式化上下文):简单来说,BFC决定了元素对其内容的定位,以及与其他元素的关系和相互作用。再简言之,BFC内部的元素和外部的元素不会相互影响。

能够触发BFC的条件:

  • 浮动元素,float(不为none)
  • 绝对定位元素,position(absolute,fixed)
  • display(inline-block,table-cell,table-caption)
  • overflow(不为visible)

2.display:flex

将元素设置为弹性布局,其子元素的float、clear和vertical-align均会失效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值