4当前位置:网页制作CSS教程CSS三栏布局(两边固定中间自适应宽度)的方法
4网页制作分类
CSS | HTML
FrontPage | DreamWeaver
JavaScript | ASP
.Net | PHP
JSP | XML
数据库 | PhotoShop
FireWorks | Flash
视频 | 其它
4赞助商链接
4最新网页制作
·a:hover img在ie6中出现问题的解决方法
·CSS三栏布局(两边固定中间自适应宽度)的方法
·overflow解决float浮动后高度自适应的问题
·浅谈CCS中float的实质
·CSS各种选择符详解
·窗口全屏垂直居中的方法
·CSS网页布局应避免滥用DIV元素
·CSS3 transform实现图片和网页倾斜的效果
·CSS3 transform旋转属性在IE中的实现
·IE9的bug:有序列表项为0
4热门网页制作
·使网页变灰的代码(包括FLASH等所有网页元素)
·应用CSS美化网页
·CSS实现文字底部对齐
·一款DIV+CSS制作的导航条
·CSS隐藏表格超出的内容
·CSS使网页背景图片居中的三种方法
·用CSS改变鼠标箭头
·表格边框CSS语法大全
·CSS制作文本或图片闪烁效果
·几种常用的新闻列表样式
4相关网页制作
·CSS实现透视效果
·CSS控制网页字体样式
·CSS实用教程
·《十天学会web标准(div+css)》之第五天
·几种常用的新闻列表样式
·CSS实现文字竖排效果
·CSS控制图片自动适应大小
·DIV+CSS布局入门
·二行代码解决全部网页木马
·CSS控制网页字体样式
CSS三栏布局(两边固定中间自适应宽度)的方法
类别:CSS教程    来源:网络    时间:2012-1-27    贴士:推荐给好友
收藏本页 8 
  在讲这种布局之前,我还想和大家一起回想一下三列布局中的另一种,就是左右两列固定、中间自适应宽度。这种布局方法,网上问问G爸和度娘一定会有一大堆,但我还是要重复说说,方便自己今后查阅,记性太差,没办法。别的先不说了,就开始进入主题吧。

  第一种方法:

  对于两边固定中间一列自适应的布局方法,我最早使用的是绝对定位法。先看代码:
<div id="left">左边栏</div>
<div id="right">右边栏</div>
<div id="main">主内容</div>


  比如说,我左右两列都是220px,中间宽度自适应,那么我们使用绝对定位实现的方法是这样的:
html,
body {
 margin: 0;
 padding: 0;
 height: 100%;
}
#left,
#right {
 position: absolute;
 top:0;
 width: 220px;
 height: 100%;
}
#left {
 left: 0;
}
#right {
 right:0;
}
#main {
 margin: 0 230px;
 height: 100%;
}


  这种方法是最简单,也是麻烦最多的,如果中间栏含有最小宽度限制,或是含有宽度的内部元素,当浏览器宽度小到一定程度,会发生层重叠的情况。我个人现在不再建议使用这种布局。

  第二种方法:采用的是浮动布局

  这种方法和上面的绝对定位方法很相似,只不过这里采用的是浮动,而不是绝对定位,先来看其html代码:
<div id="left">left</div>
<div id="right">right</div>
<div id="main">mian</div>


  这种方法我利用的就是浮动原理,左右定宽度分别进行左浮动和右浮动,此时主内容列(中间列没有定度)主会自动插入到左右两列的中间,最要注意的一点是,中间列一定要放在左右两列的后面,如上面的html代码所示,下面我们一起来看看其css样式是怎么实现的:
#left,
#right {
 float: left;
 width: 220px;
 height: 200px;
 background: blue;

#right {
 float: right;

#main {
 margin: 0 230px;
 background: red;
 height: 200px;
}


  是不是好简单一种方法呀,大家可以在本地机子上动手测试一下,效果如下所示:

点击图片打开新窗口浏览


  第三种方法:负的margin

  使用这种方法就稍微复杂了一些了,使用的是负的margin值,而且html标签也增加了,先来看其代码吧:
<div id="main">
 <div id="mainContainer">main content</div>
</div>
<div id="left">
 <div id="leftContainer" class="inner">left content</div>
</div>
<div id="right">
 <div id="rightContainer" class="inner">right</div>
</div>


  从上面的Html代码中我们可以明显得看出,在main、left、right三个div内部我都增加了一个div,那么他们起了什么样的作用呢,大家从下面的CSS中可以明显的体会出来:
#main {
 float: left;
 width: 100%;
}
#mainContainer {
 margin: 0 230px;
 height: 200px;
 background: green;
}
#left {
 float: left;
 margin-left: -100%;
 width: 230px

#right {
 float: left;
 margin-left: -230px;
 width: 230px;

#left .inner,
#right .inner {
 background: orange;
 margin: 0 10px;
 height: 200px;
}


  简单的说一下其实现原理,这种方法布局,主要运用的是负的margin值。首先在div#main中我定了一个100%宽度并进行左浮动,并且主内容是放在其内层div#mainContainer中,并在这个主内容层中需要进行一个margin-left和margin-right设置,并且这两个值是很有讲究的,并不是可以随便设置的,这两个值需要等于左右两列的宽度。我们此处是230px。左栏和右栏都使用负的margin值加上左浮动来布局,左栏是左浮动并加了一个“margin-left: -100%”,这是因为div#left前面有一个div#main,并且其宽度为100%,这样一来在左栏定这个margin-left: -100%;刚好使左边栏定位到页面的最左边;而右栏也进行左浮动,但其定义的“margin-left”也是负值,并且等于其自身的宽度230px;最后在div#left、div#right中加上一个div.inner是为了更好的控制边栏与主内容列之间的间距。比如说此例的10px。大家可以看看其效果是不是和第二种方法一样:

点击图片打开新窗口浏览


  上面啰嗦完了常见的布局方法,接着进我们一起来看另外一种三列布局中间固定宽度,两边自适应宽度。对于我来说,这是一种很少碰到的布局方法,不知道大家有何体会,那么下面我们一起来看这种布局方法的实现过程,同样先来看html代码:
<div id="left">
 <div class="inner">this is left sidebar content</div>
</div>
<div id="main">
 <div class="inner">this is main content</div>
</div>
<div id="right">
 <div class="inner">this is right siderbar content</div>
</div>


  这种方法也是借助于负的margin来实现的,首先我们在中间列定好固定值,因为此值是不会在改变的,接着对其进行左浮动;那么关键地主是在左右边栏设置地方,这种方法是将其都进行50%的宽度设置,并加上中负的左边距,此负的左边距最理想的值是中间栏宽度的一半加上1px,比如说此例中是“540px/2+1”也就是说他们都有一个“margin-left: -271px”,这样一来,左右边栏内容无法正常显示,那是因为对他们进行了负的左边距操作,现在只需要在左右边栏的内层div.inner将其拉回来,就OK了,大家可以看下在的代码:
#left,
#right {
 float: left;
 margin: 0 0 0 -271px;
 width: 50%;
}
#main {
 width: 540px;
 float: left;
 background: green;
}
.inner {
 padding: 20px;
}
#left .inner,
#right .inner {
 margin: 0 0 0 271px;
 background: orange;
}


  具体效果如下:

点击图片打开新窗口浏览


  这种方法如果在IE下会存在布局混乱的bug,你可以将div#right和div#left中的width值稍作修改:
#left,
#right {
 float: left;
 margin: 0 0 0 -271px;
 width: 50%;
 *width: 49.9%;
}


  这样一来,在IE下也就安全了。

  实现这种效果的方法可能有很多,希望大家有更好的方法能一起分享一起学习。
·上一篇:overflow解决float浮动后高度自适应的问题
·下一篇:a:hover img在ie6中出现问题的解决方法
本站部分内容收集整理于网络,仅用于学习,不存在商业目的,如有涉及版权等问题请联系站长,本站将在第一时间内进行处理!
Copyright © 2007-2010 Zzsky.Cn  中国站长天空  网站制作维护:可乐猫  QQ:8127544(请注明来意)
设为首页  加入收藏  联系站长  友情链接  闽ICP备08002933号