需求:
两边栏固定宽度,中间宽度自适应,一般左边栏为导航,右边栏为广告,中间栏为主要内容的展示,div块上中间栏放在第一位,重要的东西放在文档流前面可以优先渲染。

圣杯布局和双飞翼布局的共同特点都是利用float+margin的负值来实现并列的结构。首先中间栏width 100%后,左右栏被挤在第二行,左栏margin-left设置为-100%后(实际即为中间栏的宽度),这样左栏就跟中间栏并列,且左栏和中间栏的左边缘对其,同理右栏margin-left(因为float是向左的)设置为右栏自己宽度的负值,这样就升上去,且右边缘和中间栏的右边栏重合。

现在的问题就是左右栏占用了main的空间。圣杯布局和双飞翼的布局的处理差异也就在这里:

1.圣杯布局

圣杯布局的处理方式为父容器container设置padding-left和padding-right为左右栏的宽度,此时左右栏会表现往里面缩一些,因为padding只是调节内部元素的位置并不会显示width的content(盒子模型),对外部元素没影响。此时就需要用相对定位调节左右栏left和right为父容器pading左右值的负值,这样就移开了左右栏对中间栏的占据,且中间栏的内容全部显示在width的content中。

代码:

<!-- 圣杯布局 -->
<!DOCTYPE html>
<html><head><style>.left {background: #E79F6D;width: 150px;float: left;}.main {background: #D6D6D6;width: 100%;float: left;}.right {background: #77BBDD;width: 190px;float: left;}.left {margin-left: -100%;}.right{margin-left:-190px;}/* 设置padding后,margin是不占用其他元素的padding的,padding只是用来调节内部元素与本身的距离,margin调节才是本身与周围之间的距离 */.con {padding-left: 150px;padding-right: 190px;}.left {position: relative;left: -150px;}.right {position: relative;right: -190px;}</style>
</head><body><div class="con"><div class="main">Main</div><div class="left">Left</div><div class="right">Right</div></div>
</body></html>

2. 双飞翼布局

双飞翼并列的方式与圣杯布局相同,但是摈弃了相对定位的方式。而是给中间栏加了一个父容器,父容器设置float,子容器设置margin-left和margin-right抵消左右栏布局的宽度,避免content显示部分被左右栏覆盖到自己宽度。(注意不是float左右因为margin移动了,而是是中间栏的content的内容width一部分宽度分给了margin,自己缩小了,float是脱离的文档流的,无视block,但是受影响到文字,参考文字环绕)。

代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">.main-wrapper {float: left;width: 100%;}.main {height: 300px;/* 多10px间距 */margin-left: 210px;margin-right: 190px;background-color: rgba(255, 0, 0, .5);}.sub {float: left;width: 200px;height: 300px;margin-left: -100%;background-color: rgba(0, 255, 0, .5);}.extra {float: left;width: 180px;height: 300px;margin-left: -180px;background-color: rgba(0, 0, 255, .5);}</style>
</head>
<body><div class="main-wrapper"><div class="main"></div></div><div class="sub"></div><div class="extra"></div></body>
</html>

先进而简单的flex布局

1.order指定顺序,默认为0,越小越靠前

2.flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大

3.flex-basic:属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><style>.container {display: flex;min-height: 300px;}.left {order: -1;flex-basis: 300px;background-color: green;}.right {flex-basis: 150px;background-color: red;}.main {flex-grow: 1;background-color: blue;}</style><title>Document</title>
</head>
<body><div class="container"><div class="main"></div><div class="left"></div><div class="right"></div></div></body>
</html>

转载于:https://www.cnblogs.com/zhangmingzhao/p/9332174.html

经典的三栏布局:圣杯布局,双飞翼布局,flex布局相关推荐

  1. 浅谈面试中常考的两种经典布局——圣杯与双飞翼

    圣杯和双飞翼布局介绍 最近正好碰到了写这种布局,一直没有总结过正好借这次机会总结一波,同时加强一下自己的理解. 博客链接:http://www.xluos.com/index.ph... 圣杯布局和双 ...

  2. 浅谈面试中常考的两种经典布局——圣杯与双飞翼 1

    2019独角兽企业重金招聘Python工程师标准>>> 圣杯和双飞翼布局介绍 最近正好碰到了写这种布局,一直没有总结过正好借这次机会总结一波,同时加强一下自己的理解. 圣杯布局和双飞 ...

  3. html5 flex布局纵向,html最新的flex布局

    每当我们去进行前端页面布局时都会用到float.position.margin等一些属性,这些属性用起来略显麻烦,并且浏览器去进行渲染时会大大消耗性能 所以今天我们来谈谈最新的 flex布局,也叫弹性 ...

  4. 响应式布局:CSS3弹性盒flex布局模型

    tip:有问题或者需要大厂内推的+我脉脉哦:丛培森 ٩( 'ω' )و 页面布局一直都是web应用样式设计的重点 我们传统的布局方式都是基于盒模型的 利用display.position.float来 ...

  5. css布局-浮动、定位、flex布局

    1.CSS布局 - 什么是网页的布局方式? ​ 网页的布局方式其实就是指浏览器是如何对网页中的元素进行排版的 - 标准流(文档流/普通流)排版方式 ​ 标准流(文档流/普通流) ​ -标准流(文档流/ ...

  6. css3 flex布局九宫格,css3最全flex布局结构整理

    一切都始于这样一个问题:怎样通过 CSS 简单而优雅的实现水平.垂直同时居中.记得刚开始学习 CSS 的时候,看到 float 属性不由得感觉眼前一亮,顺理成章的联想到 Word 文档排版中用到的的左 ...

  7. HTML布局篇之双飞翼(圣杯)布局

    最近在写页面的时候,总是为布局头疼,倒不是不能布出来,就是感觉不系统,没有成一个体系的感觉.所以决定自己写博文,梳理一下思路. 常用的布局方式大致可以分为三种: 浮动布局 Float 负边距(双飞翼) ...

  8. css和css的圣杯布局,CSS布局--圣杯布局和双飞翼布局以及使用Flex实现圣杯布局

    前言 我曾一度觉得总写css的前端很low,有了这种思想以后我便远离网页布局,H5的工作更不想接,沉迷于页面逻辑和封装组件.直到最近我面试,面试官说我css3理解的不熟,我起初很不屑,但后来静下来反省 ...

  9. CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局——也聊聊双飞翼

    文章转自:http://www.cnblogs.com/honoka/p/5161836.html 今天聊聊一个经典的布局实例: 实现一个三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽 ...

最新文章

  1. 虚拟机克隆_了解Java中的可克隆接口
  2. 编程语言的发展趋势及未来方向(7):总结
  3. ElasticSearch安装过程中遇到的一些问题
  4. 每日一题(47)—— 置1与清0
  5. 【AI视野·今日CV 计算机视觉论文速览 第201期】Wed, 19 May 2021
  6. 第 15 章 垃圾回收相关算法
  7. 《游戏设计艺术(第2版)》——所有透镜合集
  8. eclipse安装jdt
  9. python123m与n的数学运算_【Python数学面试题】面试问题:Python“… - 看准网
  10. 聊聊新加坡的工作和生活
  11. MAC地址到IPV6地址的转换
  12. Workbook类提供的方法
  13. D类音频功放(CS8120例)
  14. oracle 查询unlock,oracle account lock/unlock
  15. llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
  16. 基于Python的小游戏
  17. C++中的常函数与常对象
  18. GfK数据:尽管销量下滑 全球智能手机的营收仍在增长
  19. 连载 大学生求职七大昏招(五)说谎 4
  20. 车道线检测+车道线跟踪+车道线识别

热门文章

  1. Java中避免if-else-if:策略模式
  2. word2013标题编号变成黑框
  3. shell脚本把昨天的txt打成tar包
  4. 5/7 SELECT语句:过滤(LIKE使用通配符)
  5. 爬虫 - 豆瓣网《小王子》热评
  6. 链表反转的两种实现方法
  7. decode函数的使用
  8. Django进阶Model篇—数据库操作(ORM)
  9. GitHub上README.md教程(copy)
  10. ECMAScript 6的一些新特性