常见的布局方式: float布局、Position定位、table布局、弹性(flex)布局、网格(grid)布局

那么我们就是用以上5种方式完成三栏布局,不过前提是左右宽度(假如左右宽度为300px),整个高度已知(假如高度为100px),中间宽度自适应

1、float布局:

float最初的设计的初衷是为了解决文字环绕的问题 ,即给一个图片设置float属性之后会使文字环绕在图片周围显示。float之所以可以实现文字环绕是源于设置float属性的元素可以脱离文档流,使父元素高度塌陷。

好了知道了float的作用之后我们来实现三栏布局。

首先先  写html模版代码如下:

<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8"> <title>浮动实现三栏布局</title> <style type="text/css"> *{ margin: 0; padding: 0; } </style> </head> <body> <article class="main"> <div class="left">左</div> <div class="right">右</div> <div class="center">中 <h2>浮动布局</h2> </div> </article> </body> </html>

html模版写好,那么我们开始实现CSS样式:

这里我们给左右两栏设置float属性使其脱离文档流左边栏设置 float:left, 右边栏设置float: right ,由于宽度高度已知所以我们可以给其设置指定的宽高 width:300px, height:100px

.left{float: left;width: 300px;height: 100px; background: #631D9F; } .right{ float: right; width: 300px; height: 100px; background: red; }

现在两侧的样式写好了,那么我们来写中间的样式,

.center{margin-left: 300px;margin-right: 300px;background-color: #4990E2;
}

这里为什么要设置margin-left、和margin-right呢? 如果动手写这个代码的小伙伴会发现不设置这两个属性效果在中间元素内容比较少的时候效果是正常的,但是如果如果中间元素的子元素内容特别多的时候会出现如下情况:如下图:

所以这两个属性还是需要添加的。到此位置float实现三栏布局已经OK了,这里特别提醒由于我们使用了float, 所以为了不影响其他元素的显示这里需要清除浮动,清除浮动的方式有很多大家可以自行搜索使用我这里使用伪元素的方式

.main::after{content:'';display: block; clear: both; }

2、Position布局:

首先先写html模版:

<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8"> <title>position</title> <style type="text/css"> *{ margin: 0; padding: 0; } </head> <body> <article class="main"> <div class="left">左</div> <div class="center">中 <h2>绝对定位</h2> </div> <div class="right">右</div> </article> </body> </html>

position是设置元素定位类型的那么我们该用那种定位呢? 这里我们可以简单了解一下属性的类型

position其属性有5种 :

inherit: 继承父元素的position属性值

static: 默认值,没有定位

fixed: 生成绝对定位的元素,相对于浏览器窗口进行定位(不管屏幕内容怎么滑动,其位置不会改变)

relative:生成相对定位,相对于其正常位置进行定位

absolute:生成绝对定位的元素,相当于static定位以外的第一个父元素进行定位。

根据以上内容我们可以看出我们需要选择给 左 中 右 都使用 absolute 绝对定位,由于absolute 是相当于static定位以外的第一个父元素进行定位,所以我们要给其父元素添加 position:relative属性, 这样这三个子元素可以相对于父元素进行绝对定位。

由此我们可以很简单的写出CSS样式:

.left{position: absolute;left: 0;width: 300px; background-color: red; } .center{ position: absolute; left: 300px; right: 300px; background-color: blue; } .right{ position: absolute; right: 0; width: 300px; background-color: #3A2CAC; }

只要理解了position属性的含义这种方式写起来就比较简单

3、table布局:

首先先写html模版: 这里的html模版和 position使用的html一样,这里就不复制代码了。

table是一种常见的布局方式,他可以将整个页面按照表格的方式设置为多行多列,但是由于书写table标签比较麻烦尤其是涉及到table内嵌table的时候,所以CSS给我们提供了display: table的方式可以让让们方便的使用table布局, 设置子元素为列的属性为display:table-cell

了解了table布局的属性那么就可以写出CSS样式:

.main{width: 100%;display: table;
}
.left,.center,.right{ display: table-cell; } .left{ width: 300px; background-color: red; } .center{ background-color: blue; } .right{ width: 300px; background-color: red; }

由于table布局本身已经有自己特有的属性,所以我们只需要设置其dispaly属性就可以达到我们的目的。使用起来还是很方便的。

4、弹性(flex)布局:

首先先写html模版: 这里的html模版和 position使用的html一样,这里就不复制代码了。

flex布局是W3C提出了一种新的方案,可以简便、完整、响应式地实现各种页面布局。

当给元素设置display:flex,则该元素就是一个flex容器,其子元素就是容器成员,称之为flex项目,每个项目默认按照从左到右方式排列,所以我们可以很轻松的写出CSS样式:

.main {display: flex;
}
.left{width: 400px; background-color: red; } .center{ background-color: blue; word-break: break-word; } .right{ background-color: red; width: 400px; }

如果想了解更多的flex布局大家可以查看一下链接:

http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

5、网格(gird)布局:

首先先写html模版: 这里的html模版和 position使用的html一样,这里就不复制代码了。

网格它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。

将属性 display 值设为 grid 或 inline-grid 就创建了一个网格容器,所有容器直接子结点自动成为网格项目。

gird提供了 gird-template-columns、grid-template-rows属性让我们设置行和列的高、宽

根据属性我们可以写出如下CSS样式:

.div{width: 100%;display: grid;grid-template-rows: 100px; grid-template-columns: 300px auto 300px; }

只需要四行CSS代码就可以实现三栏布局,是不是感觉到了gird的强大之处呢

总结:

以上提供了5种实现三栏布局的方式那么他们的优缺点呢?

1、float布局是现在用的比较多的布局很多门户网站目前使用这个布局方式,使用的时候只需要注意一定要清除浮动。

2、Position布局只是根据定位属性去直接设置元素位置,个人感觉不太适合用做页面布局

3、table布局使用起来方便,兼容性也不存在问题,不利于搜索引擎抓取信息

4、flex布局比较强大,但是还是存在IE上兼容性问题,只能支持到IE9以上

5、grid布局很强大,但是兼容性很差。

转载于:https://www.cnblogs.com/webtaotao/p/11031723.html

CSS实现三栏布局(5种)相关推荐

  1. css的经典三栏布局如何实现,css 实现三栏布局的四种方式

    三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 左边 中间 右边 body { padding: ; margin: ; } /* 绝对定位 */ .left, .right { po ...

  2. css实现三栏布局的几种方法及优缺点

    三栏布局,顾名思义就是两边固定,中间自适应. 三栏布局在实际的开发十分常见,比如淘宝网的首页,就是个典型的三栏布局:即左边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应. 我们不妨假定这 ...

  3. CSS实现三栏布局的8种方式

    1.float实现三栏布局 给左盒子设置float:left,给右盒子设置float:right,中间盒子设置margin-left和margin-right.需要注意的是,左右盒子要放在中间盒子之前 ...

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

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

  5. css实现三栏布局(两侧宽度固定,中间自适应)

    <!DOCTYPE html> <html lang="en" dir="ltr"><head><meta chars ...

  6. 三种方法实现CSS三栏布局

    本文由云+社区发表 作者:前端林子 本文会分别介绍三种CSS实现三栏布局的方法,可在浏览器中打开查看效果 1.方法一:自身浮动的方法 实现方法:需要左栏向左浮动,右栏向右浮动,中间设左右margin来 ...

  7. css三栏布局技巧,CSS-三栏布局的常用6种方法

    三栏布局一般指左右两栏固定宽度,中间一栏自适应的布局方法,也是许多网站常用的布局方式.如下图: 该示例在一个html文件中编写,为方便起见,预先写好一个通用的css,左右宽度都为100px: 1.浮动 ...

  8. CSS三栏布局的7种方式代码详解 | 圣杯布局 | 双飞翼布局 | 弹性盒子

    CSS三栏布局代码详解 写在前面:博主最近在转头复习最前面学的CSS,整理一下CSS三栏布局的笔记,正好也捋顺自己的逻辑思路.解析我尽量按照思路详细的写了,代码均可正确运行,留给需要的小伙伴进行参考, ...

  9. html5+css3网页制作:三栏布局宽度自适应,css三栏布局的五种写法,中间自适应,左右宽度固定...

    假设高度已知,请写出三栏布局,其中左右各位300px,中间自适应 1.左右浮动 .left { float: left; width: 300px; background: red; } .right ...

最新文章

  1. 《XML程序设计》要点
  2. AMD推Radeon HD 7790显卡 性价比突出下月开卖
  3. 怎样去理解@ComponentScan注解
  4. 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别
  5. 在家用计算机相亲,和相亲男吃完饭后,他默默打开了计算器
  6. macOS版本大升级,这几项的细节值得你关注
  7. android imageview 获取bitmap缩放大小,android – Imageview缩放方法“centercrop”作为代码...
  8. PPT实现倒计时功能(VBA实现)
  9. 计算机内存不足黑屏怎么办,win10内存不足会黑屏怎么办
  10. 丝滑流畅的手写签名 PC适配版
  11. 串口 单片机 文件_DIY迷你单片机学习板
  12. CSU 1681 Adjoin(树形dp 树的直径)
  13. ZZNUOJ_C语言1083:数值统计(多实例测试)(完整代码)
  14. 为什么游戏流畅需要60帧,而电影流畅只需要24帧?
  15. Manjaro引导项丢失修复
  16. 分辨率不低于300dpi怎么调?如何快速修改图片分辨率?
  17. IDEA提交不显示Git文件呈现红色
  18. 数字金额大写转换Java工具类
  19. Matlab-simulink汽车二自由度模型
  20. mysql报1142错误

热门文章

  1. python爬取拉勾网_python爬虫—爬取拉钩网
  2. java栈和队列实现删除,数据结构学习--Java栈和队列
  3. WindowManager添加一个悬浮的Window
  4. 提升R代码运算效率的11个实用方法——并行、效率
  5. Microsoft+R:Microsoft R Open (MRO)安装和多核运作
  6. CentOS6.5 安装并配置vsftpd
  7. 干货 | 豆子科技首席架构师钟声:Java的纯真年代
  8. git 从远程git服务上拉代码 git服务器非默认端口
  9. BeanFactory not initialized or already closed - call 'refresh' before access
  10. Ubuntu12.04安装配置Nginx Tomcat环境