稍微了解前端的人都知道,圣杯布局和双飞翼布局是前端面试时必问的问题,因为它既能体现你懂HTML结构又能体现出你对DIV+CSS布局的掌握,毕竟我们学习CSS主要就是为了更好地布局带来最好的用户体验嘛~

事实上,圣杯布局其实和双飞翼布局是一回事。它们实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局。它们实现的效果是一样的,差别在于其实现的思想。

圣杯布局的出现是来自于a list part上的一篇文章In Search of the Holy Grail。比起双飞翼布局,它的起源不是源于对页面的形象表达。在西方,圣杯是表达“渴求之物”的意思。而双飞翼布局则是源于淘宝的UED,可以说是灵感来自于页面渲染。一起来看看这两种布局的区别在哪:

一、双飞翼布局


可以看到,我们在main里面又加了一个内容层。如果知道盒子模型,就知道我们是不能直接给main添加margin属性,因为我们已经设置了width:100%,再设置margin的话就会超过窗口的宽度,所以我们再创造一个内容层,将所有要显示的内容放到main-content中,给main-content设置margin就可以了。

因为不改变父元素所以只需要给main-content设置margin: 0 200px 0 200px;属性就可以了达到效果

通过缩放页面就可以发现,随着页面的宽度的变化,这三栏布局是中间盒子优先渲染,两边的盒子框子固定不变,即使页面宽度变小,也不影响我们的浏览。如果你有了那么一点理解以后,我们来看看圣杯布局的实现:

二、双飞翼布局


第一步:给出HTML结构:

`

Header内容区

``

中间弹性区

``

左边栏

``

右边栏

``

``

Footer内容区

`学习Q-q-u-n: 767-273-102 ,分享学习的方法和需要注意的小细节

写结构的时候要注意,父元素的的三栏务必先写中间盒子。因为中间盒子是要被优先渲染嘛~并且设置其自适应,也就是width:100%。

第二步:给出每个盒子的样式

`header{width: 100%;height: 40px;background-color: darkseagreen;}``.container{ height:200px;overflow:hidden;}``.middle{width: 100%;height: 200px; background-color: deeppink;float:left;}``.left{ width: 200px;height: 200px;background-color: blue;float:left;}``.right{width: 200px;height: 200px;background-color: darkorchid;float:left;}``footer{width: 100%; height: 30px;background-color: darkslategray;}`

第三步:看此时的效果图

大家可以看到,三栏并没有在父元素的一行显示,就是因为中间盒子我们给了百分之百的宽度。所有左右两个盒子才会被挤下来。
那么如何让它们呈现出一行三列的效果呢?那就要让左边的盒子要到中间盒子的最左边,右边的盒子到中间盒子的最右边。换个想法,如果中间盒子不是100%的宽度,那么按照文档流,左边的盒子一定会在中间盒子的后面显示,接着显示右边的盒子。但是现在中间盒子是满屏了的,所以左右两个盒子被挤到下一行显示。我们要做到的是让左右两个盒子都上去。此时,CSS的负边距(negative margin)该上阵了。

第四步:利用负边距布局

1.让左边的盒子上去

需要设置其左边距为负的中间盒子的宽度,也就是.left {margin-left:-100%;}。这样左盒子才可以往最左边移动。

2.让右边的盒子上去

需要设置其左边距为负的自己的宽度,也就是.right {margin-left:-200px;}。这样右盒子才可以在一行的最右边显示出自己。

第五步:看此时的效果图

第六步:让中间自适应的盒子安全显示

首先:利用父级元素设置左右内边距的值,把父级的三个子盒子往中间挤。

代码如下:

.container{ padding: 0 200px;} 这里的200px是左右盒子的宽度。

效果如下:

我们可以看到,左右两边的内边距是有了,但是中间盒子上的内容还是被压着。

其次:给左右两个盒子加一个定位,加了定位之后左右两个盒子就可以设置left和right值。

代码如下:

`.left{ position: relative; left: -200px;}``.right{position: relative;right: -210px;`学习Q-q-u-n: 767-273-102 ,分享学习的方法和需要注意的小细节

现在,圣杯布局终于搞定了,也实现了我们要的效果,左右侧的盒子固定,中间盒子自适应,而且中间盒子的内容完全不受影响。你是不是也懂了呢?

双飞翼布局内容不换行_web前端入门到实战:圣杯布局和双飞翼布局相关推荐

  1. web前端入门到实战:CSS实现平行四边形布局效果

    如何实现下图所示的平行四边形布局效果? 一.skewX的局限 一提到平行四边形,条件反射般的就会想起CSS transform中的skew()/skewX()/skewY()方法,可以让元素斜切,从而 ...

  2. css文字向右对齐_web前端入门到实战:css常用样式对文本的处理演练

    CSS文本属性可定义文本的外观,这是毫无疑问的,其次css可以通过以下属性改变文字的排版,比方说letter-spacing实现字符间距text-indent: 2em;完成首行缩进2字符word-s ...

  3. webapp入门到实战_web前端入门到实战:前端高手在CSS 开发效率的必备片段

    这篇文章会记录我们平时常用到的 CSS 片段,使用这些 CSS 可以帮助我们解决许多实际项目问题中遇到的,墙裂建议点赞收藏再看,方便日后查找 清除浮动 浮动给我们的代码带来的麻烦,想必不需要多说,我们 ...

  4. after不显示_web前端入门到实战:css实现单行、多行文本超出显示省略号

    前言:项目中我们经常遇到这种需求,需要对单行.多行文本超出显示为省略号.这篇文章主要总结了小编解决此问题的方法,有不足之处欢迎大家指正. 单行文本省略 .ellipsis-line {border: ...

  5. css 高度塌陷_web前端入门到实战:CSS 负边距的行为表现

    CSS 中的负边距 margin 是可以设置为负值的,这会帮你实现靠近顶部/左边相邻元素的效果,或者实现靠近底部/右边相邻元素的效果. 先介绍下我们的测试元素:一个简单的包含三个段落的容器元素.注意, ...

  6. display none 隐藏后怎么显示_web前端入门到实战:元素显示隐藏的9种思路

    我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴 ...

  7. html设置样式不继承_web前端入门到实战:css的核心原理分为优先级原则与继承原则两大部分...

    css原理:1.优先原则=>后解析的内容会覆盖之前解析的内容(所谓解析就是读取的css样式)2.继承原则=>嵌套里面的标签拥有外部标签的某些样式,子元素可以继承父元素的属性 1>优先 ...

  8. react 改变css样式_web前端入门到实战:编写CSS代码的8个策略,资深开发工程师总结...

    编写基本的CSS和HTML是我们作为Web开发人员学习的首要事情之一.然而,我遇到的很多应用程序显然没有人花时间真正考虑前端开发的长久性和可维护性.我认为这主要是因为许多开发人员对组织CSS / HT ...

  9. bootstarp span标签文本居中_web前端入门到实战:文本图标对齐的几种解决方案

    常见的对齐问题: 浏览器是基于什么对齐图标和文本的? 为什么明明使用了 flex或vertical-align,图标还是看起来差了 1 像素没对齐? 文字图标布局 开发中遇见图片跟文字放在一行显示是最 ...

最新文章

  1. 将文件名和文件修改时间批量输出至Excel中
  2. LeetCode 277. 搜寻名人(思维题)
  3. 如何招到优秀的程序员(第二版)
  4. 忆芯科技发布新一代国产主控芯片STAR1000P!4月完成量产版本
  5. [leetcode] 5342. 最多可以参加的会议数目
  6. 利用STM32F103精确控制步进电机
  7. 软件设计师中级- 数据结构与算法基础
  8. 物联网系列②——使用ESP8266与STM32进行物联网开发板设计
  9. CEOI2017 D1T3 mousetrap 树形dp+二分答案
  10. 使用APICloud AVM多端框架开发app通讯录功能
  11. bzoj5369 [Pkusc2018]最大前缀和(状压dp)
  12. nodejs和前端基于websocket实现微信群聊与私聊
  13. 企业使用Windows Sysprep工具来封装Win10、Win11操作系统(最新最全)
  14. 设计模式 装饰模式(decorate)
  15. 使用源码部署CITA(Ubuntu18.0.4 | VMware)
  16. 中专计算机专业execl教案,计算机专项目化教案(EXCEL教案
  17. 17 个 JVM 参数
  18. Line 14: Char 22: runtime error: signed integer overflow: 1000000000 * 9 cannot be represented
  19. 百度、腾讯、滴滴,如何看2019智能网联汽车发展 | 2019互联网岳麓峰会
  20. codeforces 718E. Matvey's Birthday

热门文章

  1. element-ui简单使用
  2. 【算法】Hash实现环形链表【LeetCode】
  3. 计算机2级什么时间考,全国计算机2级考试什么时间出成绩单
  4. React之事件处理
  5. BugkuCTF-Reverse题不好用的ce
  6. 上河南星海科技_揭秘丨赣江新区网红打卡点,为你按下科技快进键!
  7. php 面向对象 特性,PHP面向对象三大特点学习
  8. 汇编html文档,欢迎走进HTML的世界汇编.ppt
  9. jenkins组权限_JENKINS针对不同项目组对用户进行权限分配-阿里云开发者社区
  10. python虚拟人脸生成_GitHub - 597111463/seeprettyface-generator-yellow: 这是一个用StyleGAN训练出的黄种人人脸生成器...