实现效果: 左右栏定宽,中间栏自适应 (有时候是固定高度)

1 . 绝对定位布局:position + margin

  1. <div class="container">
  2. <div class="left"></div>
  3. <div class="right"></div>
  4. <div class="main"></div>
  5. </div>
  1. body,html{
  2. height: 100%;
  3. padding:;
  4. margin:;
  5. overflow: hidden;
  6. }
  7. /*左右进行绝对定位*/
  8. .left,.right{
  9. position: absolute;
  10. height:100%;
  11. top:;
  12. }
  13. .left{
  14. left:;
  15. width: 100px;
  16. background: red;
  17. }
  18. .right{
  19. right:;
  20. width: 100px;
  21. background: blue;
  22. }
  23. /*中间用margin空出左右元素所占的空间*/
  24. .main{
  25. height:100%;
  26. margin: 0 100px 100px 0; /* 也可让 position的 left和right分别为100px;*/
  27. background: yellow;
  28. }

缺点: 如果中间栏含有最小宽度限制,或是含有宽度的内部元素,当浏览器宽度小到一定程度,会发生层重叠的情况

2 . 浮动布局:  float + margin

方法类似 position, 改成 float: left 和 float: right即可

  1. .left {
  2. float: left;
  3. }
  4.  
  5. .right {
  6. float: right;
  7. }
  8.  
  9. .main {
  10. margin: 0 100px; // 如不设置margin, main部分将会占满整个父容器
  11. }

3 . flex布局

  

  1. .container {
  2. display: flex;
  3. }
  4.  
  5. .main {
  6. flex:;
  7. }

4  .  table 布局

原理: 将父容器当作表格,子容器当作表格的单元格。

  1. .container {
  2. display: table;
  3. }
  4.  
  5. .container > div {
  6. display: table-cell;
  7. }

5 . grid网格布局

  父容器设置为网格,网格的子元素行高rows为100px; 网格子元素列宽分别为 100px auto 100px;

  1. .container {
  2. display: grid;
  3. grid-template-rows: 100px;
  4. grid-template-columns: 100px auto 100px;
  5. }

6. 圣杯布局 (想象成圣杯的主体和两只耳朵)

  圣杯布局是2006年提出的布局模型概念,在国内由淘宝UED工程师改进并传播, 布局要求:

  1 ) 三列布局, 中间宽度自适应,两边定宽

  2 ) 中间栏要在浏览器中优先渲染

  3 ) 允许任意列的高度最高

参考

  1. <div class="container">
  2.   <div class="main">main</div>
  3.   <div class="left">left</div>
  4.   <div class="right">right</div>
  5. </div>
  1. .container {
  2. padding: 0 150px 0 100px;
  3. }
  4. .left, .main, .right {
  5. position: relative;
  6. min-height: 100px;
  7. float: left;
  8. }
  9. .left {
  10. left: -100px;
  11. margin-left: -100%;
  12. background: green;
  13. width: 100px;
  14. }
  15. .right {
  16. right: -150px;
  17. margin-left: -150px;
  18. background-color: red;
  19. width: 100px;
  20. }
  21. .main {
  22. background-color: blue;
  23. width: 100%;
  24. }

思路: 圣杯布局用到了浮动float、负边距、相对定位relative,不添加额外标签

1 . 父容器设置内边距,供两边子容器占位 padding: 0 100px 0 150px;

2 . 所有子容器向左浮动 float: left

3 . 设置左右子容器的负外边距,使所有子容器同一行 .left { margin-left: -100%} .right {margin-left: -150px;} , 此时会有部分重叠

4 . 使用相对定位分别移动左右子容器到父容器的左右内边距留白部分 position: relative; left: -100px;  / position: relative; right: -150px;

7. 双飞翼布局(想象成鸟的身体和两只翅膀)

  1 ) 双飞翼布局是对圣杯布局基础上进行修改 , 将原本的内边距padding 留白改成在自适应栏内部新增DOM节点, 并设置其外边距margin

  2 )   然后再对左右栏的左外边距设置为负值。比圣杯布局少了position相对定位

  3 )  相比圣杯布局, 中间栏内容不会被“遮挡”, 圣杯布局使用中间栏的padding给左右栏占位,双飞翼布局使用中间栏子元素的margin给左右栏占位

  1. <div class="container">
  2.   <div class="main">
  3.   <div class="content">main</div>
  4. </div>
  5.   <div class="left">left</div>
  6.   <div class="right">right</div>
  7. </div>
  1. .left, .main, .right {
  2. float: left;
  3. min-height: 100px;
  4. text-align: center;
  5. }
  6. .left {
  7. margin-left: -100%;
  8. background: green;
  9. width: 100px;
  10. }
  11.  
  12. .right {
  13. margin-left: -150px;
  14. background-color: red;
  15. width: 150px;
  16. }
  17. .main {
  18. background-color: blue;
  19. width: 100%;
  20. }
  21. .content{
  22. margin: 0 150px 0 100px;
  23. }

基本思路已经理清楚,可以在实践中看效果。

CSS实现经典的三栏布局的更多相关文章

  1. html5 css练习,弹性三栏布局

    *{    margin: 0;    padding: 0;} body,html{    width: 100%;    height: 100%;        font: bold 24px ...

  2. CSS布局——三栏布局

    说到三栏布局,很多都会提到圣杯布局和双飞翼布局这两个经典的三栏布局方式.于是,我在网上搜了一些相关资料,阅读并跟着代码敲了一遍,发现在处理三栏布局上,他们采用的都是两边栏固定,中间栏自适应的策略.在处 ...

  3. CSS实现三栏布局(5种)

    常见的布局方式: float布局.Position定位.table布局.弹性(flex)布局.网格(grid)布局 那么我们就是用以上5种方式完成三栏布局,不过前提是左右宽度(假如左右宽度为300px ...

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

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

  5. ccs之经典布局(二)(两栏,三栏布局)

    接上篇ccs之经典布局(一)(水平垂直居中) 四.两列布局 单列宽度固定,另一列宽度是自适应. 1.float+overflow:auto; 固定端用float进行浮动,自适应的用overflow:a ...

  6. CSS布局 - 三栏布局

    CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...

  7. CSS布局:Float布局过程与老生常谈的三栏布局

    原文见博客主站,欢迎大家去评论. 使用CSS布局网页,那是前端的基本功了,什么两栏布局,三栏布局,那也是前端面试的基本题了.一般来说,可以使用CSSposition属性进行布局,或者使用CSSfloa ...

  8. 转:CSS布局:Float布局过程与老生常谈的三栏布局

    使用CSS布局网页,那是前端的基本功了,什么两栏布局,三栏布局,那也是前端面试的基本题了.一般来说,可以使用CSSposition属性进行布局,或者使用CSSfloat属性布局.前者适合布局首页,因为 ...

  9. 记一道css面试题 : 三栏布局两边宽度固定,中间宽度自适应,并且布局随屏幕大小改变。

    前几天面试时有道css题没做出来,回来好好学习一番后把其记录下来. 题目是这样的:左中右三栏布局,左右两栏宽度固定,左右两栏的宽度为200像素,中间栏宽度自适应.当屏幕小于600px时,3栏会分别占用 ...

随机推荐

  1. P图软件瘦脸眼睛放大和手动瘦身功能

    一直以为是OpenCV写的没想到OpenGL能够做的东西比我想象的多. https://blog.csdn.net/zfgrinm/article/details/79291693 https://b ...

  2. [转]Eureka自我保护机制、健康检查的作用、actuator模块监控

    Eureka自我保护机制 接着以上篇文章建立的三个工程为基础(eureka-server,uerreg,myweb),默认Eureka是开启自我保护的.我们来做个测试,我们先启动三个工程,我们访问注册 ...

  3. HTTP 03 HTTP 报文

    客户端的HTTP报文, 叫做请求报文 服务器端的叫做 响应报文. HTTP 报文本身是由多行 (用 CR+LF 作换行符) 数据构成的字符串文本. HTTP 报文大致分为报文首部 和 报文主体 两部分 ...

  4. python sort和sorted区别。

    前者是方法,后者是函数.oop和opp区别的经典体现.好好领会,就能知道什么时候写类什么时候写函数好.

  5. My google script which based on Google Sheet and Form

    My google script which based on Google Sheet and Form // get sheet data function getSpreadsheetData( ...

  6. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  7. 【CF434D】Nanami's Power Plant 最小割

    [CF434D]Nanami's Power Plant 题意:有n个二次函数$y=a_ix^2+b_ix+c_i$($a_i,b_i,c_i$是整数),第i个函数要求x的取值在$[l_i,r_i]$ ...

  8. mysql数据库转成oracle踩过的坑

    1.使用count这种组函数,那么必须配合group by使用,获取的字段要么出现在组函数内要么出现在group by中2.oracle使用union不仅要字段名一致并且数据类型也要一致3.REGEX ...

  9. 让height: 100%生效

    html: <body> <div class="box"></div> </body> css: .box{ position: ...

  10. php数组函数大全

    一.数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换(如 ...