三列布局实现的方法有:
- 经典三列布局:定位实现三列布局,浮动实现三列布局。
- 圣杯实现三列布局
- 双飞翼实现三列布局
那么什么叫做三列布局呢?
主要是两侧定宽,中间自适应,就是说把一个人看成页面,头、脚,手固定,胸膛看成最中间的部分,当你胖起来的时候,最明显的部位就是腰特别粗大。换句话说,左右手固定了,但身体是可大可小。
实现三列布局最基本的要求:()
- 两边列宽度固定,中间列自适应
- 中间列内容完整显示
- 中间列优先加载
下面我们来看第一个定位实现三列布局(left,right,middle文档流顺序没关系)
*{
margin: 0;
padding: 0;
}
body{
width: 100%;
height: 500px;
}
#left,#right{
width: 200px;
height: 100%;
background: pink;
}
#left{
position: absolute;
left: 0;
top: 0;
}
#right{
position: absolute;
right: 0;
top: 0;
}
#middle{
margin: 0 200px;
}
把left和right给个定位和宽度200,高度和父容器高度一样(height:100%),middle给个距离left和right的(margin:auto 200px)宽度就行
缺点:
怎么说呢?超过高度就会占用right的空间(其实我不太明白为什么不会占用left的空间) 看下图:
浮动实现三列布局
*{
margin: 0;
padding: 0;
}
body{
width: 100%;
}
#left,#right{
width: 200px;
height: 200px;
background: red;
}
#middle{
height: 200px;
background: green;
/* overflow-y:scroll */
}
#left{
float:left;
}
#right{
float:right;
}
把left设置在左边(float:left)再把right设置在右边(float:right)。 html代码要注意一下,文档流是从上往下,从左往右读,如果把middle设置在left和right中间,就会出现下图
因为left设置左浮属性:导致没有宽度的middle会被文档流先读取就会沾满一行,把right挤下来。所以要先给读取float和right也就是下图:
还有就是如果设置滚动条:滚动条就会占用位置right的位置
圣杯实现三列布局
先看看源码的实现:
css:
*{
margin: 0;
padding: 0;
}
.wrap{
min-width: 600px;
}
#header,#footer{
height: 50px;
width: 100%;
background: grey;
}
#middel,#left,#right{
float: left;
}
#content{
overflow: hidden;
padding: 0 200px;
}
#middel{
background: red;
width: 100%;
}
#left,#right{
width: 200px;
height: 200px;
background: pink;
}
#left{
margin-left: -100%;
position: relative;
left: -200px;
}
#right{
margin-right:-200px
/* margin-left: -200px; */
/* position: relative;
left: 200px; */
}
注意一下我们在这里设置了一个overflow:hidden(这本来是一个超出则截断,但在这里我们形成了一个BFC区域:至于什么是BFC区域,等我弄明白再发一篇关于BFC区域的文章)如果不这样设置就会出现塌陷,看下图:
我们的footer就和上一块重叠了。
那个position:relative是相对自身本来位置进行定位,所以margin-left:-100%是看下图
这个百分比是以父元素内容长度的百分比,该父元素内容长度需要去除padding magin border。由于长度设置为了100%,需要一整行的宽度补偿margin,则移到最左边。
(可能很难以理解)
缺点就是:圣杯布局下,如果某一列内容过多,文字会溢出。
双飞翼三列布局 双飞翼和圣杯布局都必须以middle作为文档流先读取(就是说把middle放在left和float前面)。
先看看html的实现:
<body>
<div class="wrap">
<div id="header">header</div>
<div id="content">
<div id="middle">
<div class="middle-inner" >middle</div>
</div>
<div id="left">left</div>
<div id="right">right</div>
</div>
<div id="footer">footer</div>
</div>
</body>
css的实现:
*{
margin: 0;
padding: 0;
}
.wrap{
min-width:600px;
}
#header,#footer{
height: 50px;
width: 100%;
background: grey;
}
#left,#right{
width: 200px;
height: 200px;
background: green;
}
#middle{
background: blueviolet;
width: 100%;
float:left;
}
#content{
overflow: hidden;
}
#left{
float:left;
margin-left:-100%;
}
#middle{
height: 200px;
}
#right{
float:left;
margin-left: -200px;
}
.middle-inner{
margin: 0 200px;
}
这个和圣杯差不多,总的来说就是在middle中还设置了一个容器,去装在middle的内容。 大体上先这样介绍,xdm!!!!休息了,css要真的学起来是真的好难啊!!!