0

0

CSS三栏布局探讨——中间固定宽度两边自适应宽度

高洛峰

高洛峰

发布时间:2017-02-16 13:22:50

|

1393人浏览过

|

来源于php中文网

原创

下面和大家一起探讨和学习了一种用p+css进行的三列(三栏)布局,而且是中间固定左右两边自适应宽度,听起来蛮有意思的。因为以前只是碰到过,左右两列固定而中间自适应的运用 今天早上在阿当大侠的编写高质量前端代码群中与几位朋友一起探讨和学习了一种用p+css进行的三列(三栏)布局,而且是中间固定左右两边自适应宽度,听起来蛮有意思的。因为以前只是碰到过,左右两列固定而中间自适应的运用。于是思考一下马上敲起了键盘自己实战了一下,接着与大家一起测试,还是通过了各浏览器的考验,为了方便自己以后好查阅,也想让不知道的朋友一起学习一下这样的布局,特整理了一下代码,贴上来与大家一起分享和学习。

在讲这种布局之前,我还想和大家一起回想一下三列布局中的另一种,就是左右两列固定,中间自适应宽度。这种布局方法,网上问问G爸和度娘一定会有一大堆,但我还是要重复说说,方便自己今后查阅,记性太差,没办法。别的先不说了,就开始进入主题吧。对于两边固定中间一列自适应的布局方法,我最早使用的是绝对定位法。先看代码

代码如下:

立即学习前端免费学习笔记(深入)”;

论论App
论论App

AI文献搜索、学术讨论平台,涵盖了各类学术期刊、学位、会议论文,助力科研。

下载
<p id="left">左边栏p> 
<p id="right">右边栏p> 
<p id="main">主内容p>


比如说,我左右两列都是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代码

代码如下:

立即学习前端免费学习笔记(深入)”;

<p id="left">left p> 
<p id="right">rightp> 
<p id="main">mianp>


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

代码如下:

立即学习前端免费学习笔记(深入)”;

#left, 
#right { 
float: left; 
width: 220px; 
height: 200px; 
background: blue; 
} 
#right{ 
float: right; 
} 
#main { 
margin: 0 230px; 
background: red; 
height: 200px; 
}


是不是好简单一种方法呀,大家可以在本地机子上动手测试一下,效果如下所示:
CSS三栏布局探讨——中间固定宽度两边自适应宽度 

第三种方法:负的margin

使用这种方法就稍微复杂了一些了,使用的是负的margin值,而且html标签也增加了,先来看其代码吧

代码如下:

立即学习前端免费学习笔记(深入)”;

<p id="main"> 
<p id="mainContainer">main contentp> 
p> 
<p id="left"> 
<p id="leftContainer" class="inner">left contentp> 
p> 
<p id="right"> 
<p id="rightContainer" class="inner">rightp> 
p>


从上面的Html代码中我们可以明显得看出,在main,left,right三个p内部我都增加了一个p,那么他们起了什么样的作用呢,大家从下在的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值。首先在p#main中我定了一个100%宽度并进行左浮动,并且主内容是放在其内层p#mainContainer中,并在这个主内容层中需要进行一个margin-left和margin-right设置,并且这两个值是很有讲究的,并不是可以随便设置的,这两个值需要等于左右两列的宽度。我们此处是230px。左栏和右栏都使用负的margin值加上左浮动来布局,左栏是左浮动并加了一个“margin-left:-100%”,这是因为p#left前面有一个p#main,并且其宽度为100%,这样一来在左栏定这个margin-left: -100%;刚好使左边栏定位到页面的最左边;而右栏也进行左浮动,但其定义的“margin-left”也是负值,并且等于其自身的宽度230px;最后在p#left,p#right中加上一个p.inner是为了更好的控制边栏与主内容列之间的间距。比如说此例的10px。大家可以看看其效果是不是和第二种方法一样。
CSS三栏布局探讨——中间固定宽度两边自适应宽度 
上面啰嗦完了常见的布局方法,接着进我们一起来看另外一种三列布局中间固定宽度,两边自适应宽度。对于我来说,这是一种很少碰到的布局方法,不知道大家有何体会,那么下面我们一起来看这种布局方法的实现过程,同样先来看html代码:

代码如下:

立即学习前端免费学习笔记(深入)”;

<p id="left"> 
<p class="inner">this is left sidebar contentp> 
p> 
<p id="main"> 
<p class="inner">this is main contentp> 
p> 
<p id="right"> 
<p class="inner">this is right siderbar contentp> 
p>


这种方法也是借助于负的margin来实现的,首先我们在中间列定好固定值,因为此值是不会在改变的,接着对其进行左浮动;那么关键地主是在左右边栏设置地方,这种方法是将其都进行50%的宽度设置,并加上中负的左边距,此负的左边距最理想的值是中间栏宽度的一半加上1px,比如说此例中是"540px/2+1"也就是说他们都有一个"margin-left: -271px",这样一来,左右边栏内容无法正常显示,那是因为对他们进行了负的左边距操作,现在只需要在左右边栏的内层p.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; }

具体效果如下:
CSS三栏布局探讨——中间固定宽度两边自适应宽度 
这种方法如果在ie下会存在布局混乱的bug,你可以将p#right和p#left中的width值稍作修改: 

代码如下:

立即学习前端免费学习笔记(深入)”;

#left, 
#right { 
float: left; 
margin: 0 0 0 -271px; 
width: 50%; 
*width: 49.9%; 
}


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

实现这种效果的方法可能有很多,希望大家有更好的方法能一起分享一起学习。

2012年09月26日更新——CSS3 Flexbox

前面介绍了三种方法,实现L1F2L3布局效果,也就是第一列和第三列自适应宽度,中间一列固定宽度。今天在给大家推荐一种CSS3实现这种布局的方法,采用CSS3的Flexbox,这种方法 不足之处就是只能在部分浏览器中使用,详细的请看下面代码:

HTML结构

代码如下:

立即学习前端免费学习笔记(深入)”;

<p class="grid"> 
<p class="col fluid"> 
... 
p> 
<p class="col fixed"> 
... 
p> 
<p class="col fluid"> 
... 
p> 
p>


CSS代码

代码如下:

立即学习前端免费学习笔记(深入)”;

.grid { display: -webkit-flex; display: -moz-flex; display: -o-flex; display: -ms-flex; display: flex; } .col { padding: 30px; } .fluid { flex: 1; } .fixed { width: 400px; }

效果如下面的demo所示:
CSS三栏布局探讨——中间固定宽度两边自适应宽度

更多CSS三栏布局探讨——中间固定宽度两边自适应宽度相关文章请关注PHP中文网!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

32

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

30

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

33

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

7

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

11

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号