一、 单列布局
HTML 代码:
1 <div id="header">
2 <h2>Page Header</h2>
3 <p>头部内容</p>
4 </div>
5 <div id="content">
6 <h2>Page Content</h2>
7 <p>正文内容</p>
8 </div>
9 <div id="footer">
10 <h2>Page Footer</h2>
11 <p>底部内容</p>
12 </div>>
1.1、定宽
思路:设置div的左右margin为auto
#header,#footer,#content{
margin:0 auto;
width:800px;
margin-top: 10px;
}
1.2、变宽
思路设置宽度为相对宽度,常用百分比
#header,#footer,#content{
margin:0 auto;
width:70%;
margin-top: 10px;
}
二、 两列布局
HTML结构:
<div id="header">
<h2>Page Header</h2>
<p>头部内容</p>
</div>
<div id="container">
<div id="content">
<h2>Page Content</h2>
<p>正文内容</p>
</div>
<div id="side">
<h2>Page Content</h2>
<p>侧边栏内容</p>
</div>
</div>
<div id="footer">
<h2>Page Footer</h2>
<p>底部内容</p>
</div>>
2.1、两列固宽
方法一:绝对定位法: 使content相对于container绝对定位,脱离文档流,side就会向上移动占据原来content所在的位置,然后将content的宽度和side的左margin设置为相同的值,就正好可以保证它们并列紧挨着放置,且不会相互重叠。
#container{
position: relative;
}
#content{
border: 2px solid #00f;
position: absolute;
top: 0;
left: 0;
width: 500px;
}
#side{
border: 2px solid #f90;
margin: 0 0 0 500px;
}
缺点:当右边的side比左边的content高时,显示效果不会有问题,但是如果左边的content比右边的side高的话,由于content已经脱离了文档流,对包裹的container这个div的高度不会产生影响,而footer是根据side栏确定的,content栏会遮蔽部分甚至全部footer栏。
方法二、浮动法: 将content和side都设置为向左浮动,二者的宽度等于总宽度。
#content{
float: left;
width: 500px;
border: 2px solid #00f;
}
#side{
float: left;
width: 300px;
border: 2px solid #f90;
}
此时footer的位置不太正常。container的边框也被缩成一条线,需要清除浮动对于包裹元素高度的影响。应用.clearfix(前面布局模型章节中写过)
2.2、两列等比例变宽
方法一、绝对定位法:同上面的两列固宽,不同的是使用百分比宽度和边距,container等外层宽度相对浏览器窗口,content和side相对于外层div定义宽度。
方法二、浮动法:同上面的浮动法,将width的值改为百分比。
2.3、两列单列变宽
方法一、绝对定位法:
#header,#footer,#container {
margin: 10px auto;
width: 85%;
}
#container {
position: relative;
}
#side { /*定宽*/
position: absolute;
top: 0;right: 0;
width: 300px;
border: 2px solid #f90;
}
#content {/*变宽*/
margin: 0 300px 0 0;
border: 2px solid #00f;
}
所以使用这种方法时要注意保证变宽列的高度是最高的。使固定宽度列绝对定位。
方法二、浮动法:同上面的浮动法
三、 三列布局
3.1、三列定宽
方法1:绝对定位法:原理同两列布局,只不过需要设置content的左右margin
方法2:浮动法:原理同两列布局
3.2、三列等比例变宽
绝对定位法和浮动法
同上面的两列等比例变宽,只要分配好每一列百分比就好
3.3、中间列定宽,两列变宽
绝对定位法和浮动法
3.4、中间列变宽,两列定宽
见双飞翼布局和圣杯布局一篇。