方法一:绝对定位(absolute + margin

原理:给左右两边的元素设置absolute,这样左右两边的元素脱离标准文档流的控制,中间的元素自然会上来,然后给中间的元素设置margin留出左右两边元素的位置,也就是说margin-left = “左边元素的宽度”  margin-right = "右边元素的宽度"

优点:三个div的顺序是任意的

缺点:要对样式进行初始化,否则元素间会出现空隙,因为使用了absolute,如果页面还有其他内容处理时要小心!

注:随着浏览器窗口缩小,会发生压缩,左右元素重叠

代码:

<style>
*{
padding: 0;
margin: 0;
}
.left,.right{
width: 200px;
height: 200px;
position: absolute;
}
.left{
background-color: green;
left: 0;
}
.right{
background-color: blue;
right: 0;
}
.center{
height: 200px;
margin-left: 200px;
margin-right: 200px;
background-color: red;
}
</style>
<body>
<div class="left">left</div>
<div class="right">right</div>
<div class="center">center</div>
</body>

效果:

方法二:自身浮动(float)

原理:给左右元素分别设置左浮动和右浮动,这样左右元素就脱离了标准文档流的控制, 但中间的元素还在标准文档流中,之后给中间的元素设置margin,设置方法同方法一

优点:受外界因素影响小

缺点:三个div的顺序有固定性,因为中间的元素任然在文档流中,所以要放在最后面,左右元素顺序不固定,这也是与绝对定位不同的地方

注:随着浏览器窗口缩小,右边元素会被挤到下一行

代码:

 <style>
.left,.right{
width: 200px;
height: 200px;
}
.left{
background-color: green;
float: left;
}
.right{
background-color: blue;
float: right;
}
.center{
height: 200px;
margin-left: 200px;
margin-right: 200px;
background-color: red;
}
</style>
<body>
<div class="left">left</div>
<div class="right">right</div>
<div class="center">center</div>
</body>

效果:

方法三:圣杯布局(BFC+负margin)

原理:使用margin负值法,使用圣杯布局首先需要将中间元素用div包住,设置float使其形成一个BFC,并且要设置宽度,整个宽度和左边元素的margin负值要相互配合,也就是margin-left = "-中间元素外层div宽度" ,右边元素的margin负值要和它自己的宽度配合,也就是margin-left = “-右边元素宽度”

优点:三栏有相互关联性,有抗性

缺点:三个元素的顺序也是固定的,中间元素要放置在最前面,左右元素顺序不固定,并且左元素的margin-left = "中间元素外层div宽度"

注:随着浏览器窗口缩小,会发生压缩,左右元素重叠,继续缩小之后右边元素会又会被挤到下一行,但是同方法二有不同

代码:

<style>
.wrap{
width: 100%;
float: left;
}
.left,.right{
width: 200px;
height: 200px;
}
.left{
background-color: green;
float: left;
margin-left: -100%;
}
.right{
background-color: blue;
float: left;
margin-left: -200px;
}
.center{
height: 200px;
background-color: red;
}
</style>
<body>
<div class="wrap">
<div class="center">center</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
</body>

效果:

方法四:flex布局

原理:将左中右三个元素用div包裹起来,给外层div设置display:flex,之后给中间元素设置flex:1

优点:解决了之前方式带来的问题,例如浮动

缺点:三个元素的顺序也是固定的,中间元素要放在中间,不能兼容IE8及以下浏览器。

注:随着浏览器窗口的缩小,会发生压缩,但是不会重叠和换行

代码:

<style>
.wrap{
width: 100%;
display: flex;
}
.left,.right{
width: 200px;
height: 200px;
}
.left{
background-color: green;
}
.right{
background-color: blue;
}
.center{
flex: 1;
height: 200px;
background-color: red;
}
</style>
<div class="wrap">
<div class="left">left</div>
<div class="center">center</div>
<div class="right">right</div>
</div>

效果:

注:其实还有网格布局和表格布局

css实现三栏自适应布局(两边固定,中间自适应)以及优缺点的更多相关文章

  1. CSS自适应布局(左右固定 中间自适应或者右侧固定 左侧自适应)

    经常在工作中或者在面试中会碰到这样的问题,比如我想要个布局 右侧固定宽度 左侧自适应 或者 三列布局 左右固定 中间自适应的问题. 下面我们分别来学习下,当然我也是总结下而已,有如以下方法: 一: 右 ...

  2. css布局两边固定中间自适应的四种方法

    第一种:左右侧采用浮动 中间采用margin-left 和 margin-right 方法. 代码如下: <div style="width:100%; margin:0 auto;& ...

  3. css实现三栏水平布局双飞翼与圣杯布局

    作为布局的入门级选手,网上也查看了很多信息和资源 双飞翼的html结构 <div class="container"> <div class="main ...

  4. 【CSS】三栏/两栏宽高自适应布局大全

    页面布局 注意方案多样性.各自原理.各自优缺点.如果不定高呢.兼容性如何 三栏自适应布局,左右两侧300px,中间宽度自适应 (1) 给出5种方案 方案一: float (左右浮动,中间不用给宽,设置 ...

  5. flex左右布局 左边固定 右侧自适应

    flex左右布局 左边固定 右侧自适应 想要保证自适应内容不超出容器怎么办. 通过为自适应的一侧设置width: 0;或者overflow: hidden;解决. 首先实现标题的布局,也很简单: &l ...

  6. flex实现三栏等分布局

    前言 在实际开发中,我们经常会想要实现的一种布局方式就是三栏等分布局,那么我们如何来解决这个问题呢? 解决 方法一:flex 外层容器也就是ul设置display:flex,对项目也就是li设置fle ...

  7. 使用CSS实现三栏自适应布局(两边宽度固定,中间自适应)

    来源:http://blog.csdn.net/cinderella_hou/article/details/52156333 所谓三列自适应布局指的是两边定宽,中间block宽度自适应.这道题在今年 ...

  8. 前端经典面试题之CSS实现三栏布局,左右宽度固定,中间宽度自适应

    前端常问的面试题,题目:假设高度一定,请写出三栏布局,左右宽度300px,中间自适应. 看到这里我希望你能停下来思考几分钟, 1分钟~2分钟~3分钟~4分钟~5分钟! 好了,那么你想出了几种答案呢? ...

  9. css 实现三栏布局的四种方式

    三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 <div class="left">左边</div> <div class=" ...

随机推荐

  1. 【Window Power Shell】介绍与使用

    Windows PowerShell 是专为系统管理员设计的新 Windows 命令行脚本环境,主要实现系统和应用程序管理自动化. 1.发展历史 在2002年,微软开始研究一个新的产品叫做”Monad ...

  2. (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...

  3. SQLite的原子提交--单文件场景

    3. 单文件提交 我们首先概要说明SQLite在单个数据库文件上为了执行事务的原子提交而采取的步骤.在后面的部分将讨论如何设计文件格式以保护其在断电故障中损坏,以及原子提交在多个数据库上的执行. 3. ...

  4. maven-resources-plugin插件关于占位符不生效问题

    插件版本: <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0. ...

  5. 电脑如何用HDMI连接电视

    因为现在的液晶电视基本上都有VGA接口,所以你可以很容易地用VGA线实现电脑连接电视上,但是该文有一个地方没有提到,那就是分辨率的问 题,现在的液晶电视的主流面板已经是全高清面板(1920X1080) ...

  6. selenium之frame

    https://blog.csdn.net/huilan_same/article/details/52200586

  7. Python:Day51 web框架

    from wsgiref.simple_server import make_server def application(environ, start_response): start_respon ...

  8. 【CTF杂项】常见文件文件头文件尾格式总结及各类文件头

    文件头文件尾总结 JPEG (jpg), 文件头:FFD8FF 文件尾:FF D9PNG (png), 文件头:89504E47 文件尾:AE 42 60 82GIF (gif), 文件头:47494 ...

  9. springboot获取applicationcontext

    使用springboot之前,我们通过ClassPathXmlApplicationContext加载spring xml配置文件来获取applicationcontext,使用springboot后 ...

  10. Visual Studio 2012 与此版本的 Windows 不兼容。有关详细信息,请联系 Microsoft

    参考网址:Visual Studio 2012 与此版本的 Windows 不兼容 解决 下载更新包安装:http://www.microsoft.com/zh-CN/download/details ...