2019独角兽企业重金招聘Python工程师标准>>>

圣杯和双飞翼布局介绍

最近正好碰到了写这种布局,一直没有总结过正好借这次机会总结一波,同时加强一下自己的理解。

圣杯布局和双飞翼布局作为经典的三栏式布局是面试中的常客。两种布局达到效果上基本相同,都是两边两栏宽度固定,中间栏宽度自适应。在HTML结构上中间栏在最前面保证了最先渲染中间提升性能(因为这两种布局都比较老,我认为在现代浏览器中这点儿性能优化效果并不是很大),并且兼容性良好。两种布局的实现方法前半部分相同,后半部分的实现各有利弊,下面会简单介绍两者的区别。

Demo和代码

  • 圣杯布局Demo、代码
  • 双飞翼布局Demo、代码

两种布局的实现

首先,既然是三栏式布局我们需要三个div

<header>圣杯布局</header>
<div class="bd"><div class="main text">main</div><div class="left text">left</div><div class="right text">right</div>
</div>
<footer>footer</footer>

给main设置width : 100%让它始终占满窗口,这样才有自适应的效果。

然后我们给它加上点儿样式区分,效果如下:

为了形成在一行三栏布局,给三个方块都加上浮动float : left(注意清除浮动,因为浮动会导致父元素高度塌陷)

接着我们要把三个方块拉到一行,这里要利用负margin的技巧。

  • left 要放到 main 的左边,设置 margin-left :  -100%,因为margin的百分比是相对与父元素的,所以需要整整一行的宽度才能补偿这个margin的值,所以 left 就能到main的左边。
  • 接着让 right 到 main 的右边,只需要设置 margin-left 的值为负的 right 的宽,比如margin-left : -200px;,正好使 main 重叠 right 的宽度,因为设置了浮动所以 right 就会到 main 的右边了。

下面我们来看一下效果:

看样子好像我们已经成功达到了效果?不要急给两个方块变透明,再给中间加点儿内容看看。

我们发现当内容变多之后,因为三个方块都是设置的浮动,脱离的文档流,两边固定宽度的两栏会挡住我们的内容。

所以要想两边不遮挡内容,就需要中间栏给两边的位置腾出来。我们可以想到padding和margin都可以用来腾出位置,这两个属性就是圣杯布局和双飞翼布局的区别,不过双飞翼布局还需要稍微改造一下HTML的结构,这个等一下再说。

1.圣杯布局——使用padding属性

  • 第一步:为三个元素的父元素加上padding属性,腾开位置
  • 第二步:由于腾开位置后会产生空白,所以使用position: relative;属性来移动左右两栏,这样就不会遮挡了。

不过这样布局有一个问题就是:有一个最小宽度,当页面小于最小宽度时布局就会乱掉。所以最好给body设置一个min-width。这个min-width肯定不能是试出来的,怎么计算呢?就是left-width * 2 + right-width,至于为什么,简单的说就是:“由于设置了相对定位,所以当left原来的位置和right的位置产生重叠时,由于浮动的原因一行放不下就会换行”。所以布局就被打乱了。使用双飞翼布局就可以避免这个问题。

2.双飞翼布局——使用margin属性

首先我们要对HTML结构稍微改变一下:

<header>双飞翼布局</header><div class="bd"><div class="main text"><div class="main-content">main</div></div><div class="left text">left</div><div class="right text">right</div></div>
<footer>footer</footer>

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

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

 两种布局的区别

圣杯布局是中间栏为两边腾开位置。

双飞翼布局则是中间栏不变,将内容部分为两边腾开位置

参考

https://www.cnblogs.com/lovemomo/p/4885866.html

https://www.zhihu.com/question/21504052

转载于:https://my.oschina.net/Mohan710/blog/1861702

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

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

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

  2. 浅谈面试中常提到的乐观锁与悲观锁

    首先来看一下什么是锁? 在并发环境下,会出现多个线程对同一个资源进行争抢的情况,假设A线程对资源正在进行修改,此时B线程此时又对资源进行了修改,这就可能会导致数据不一致的问题.为了解决这个问题,很多编 ...

  3. mopso算法代码程序_JAVA程序员的必杀技,面试中常考的8个经典算法题,过程精妙,代码精炼...

    总有一些题,超越了岁月,即便是经过了新框架的层层迭代,它依然散发着令人回味无穷的味道.下面的几个笔试题目,是JAVA面试中经常遇见的,大家一定要牢记于心,可别复习到了到时候又说不出来.我就吃过这种亏, ...

  4. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现

    网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...

  5. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  6. 单一修改高程值lisp_浅谈AutoCAD中修改高程的四种方法

    浅谈 AutoCAD 中修改高程的四种方法 摘 要: 在使用 AutoCAD 进行数字化成图工作中,经常遇到线划的标高不为零,及高程点的值与实地不符,需要对其进行修改等情况,结合实 际工作经验,简单介 ...

  7. 反射 字段_详解面试中常考的 Java 反射机制

    反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...

  8. 【2023校招刷题】笔试及面试中常考知识点、手撕代码总结

    文章目录 一.笔试/面试常考知识点 二.面试常考手撕代码 2.1.基本电路设计 2.2.复杂电路设计 2.3.跨时钟域设计 一.笔试/面试常考知识点 奇.偶.小数分频 [Verilog基础]分频器实现 ...

  9. 浅谈面试中的乐观锁与悲观锁

    乐观锁与悲观锁 一.什么是乐观锁(Optimistic Locking)? 二.什么是悲观锁(Pessimistic Lock)? 悲观锁主要分为共享锁和排他锁 注意 三.并发控制 一.什么是乐观锁( ...

最新文章

  1. 怎么判断网络回路_PLC控制回路故障的判断和检修方法与技巧!
  2. mysql导出数据库对象命令_mysql数据库导出数据(命令)
  3. oracle to_char 数值,oracle to_char格式数值
  4. win7电脑删除文件特别慢怎么办
  5. 物联网其实只是一个话题
  6. 貌似必须背下的一组数据。 C语言中的优先级顺序
  7. 【3D相册】零基础完成3D相册并配上背景音乐
  8. 代码大全 服装尺寸图html,最全服装尺码对照表
  9. 图床PICGo工具报错问题
  10. 如何查看mysql的ip地址_如何查mysql的ip地址
  11. HDU 4513 吉哥系列故事――完美队形II(Manacher)
  12. Outline for Mac(Mac记事本软件)
  13. mysql 导出指定分隔符_mysql 导出行数据到txt文件,指定字符分割
  14. 2014突破性科学技术:超隐私智能手机
  15. unity gizmo绘制圆形帮助调试
  16. Hadoop的体系结构
  17. oracle中间人投毒漏洞,Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)的完美解决方法...
  18. java调用qt生成的dll_在Qt中调用vs2008生成的dll以及lib的方法
  19. mysql删除重复的数据保留一条
  20. 查看计算机上隐藏用户,Win732位旗舰版系统下如何查看与删除隐藏账户【图】

热门文章

  1. mysql 5.7.14-winx64_mysql-5.7.14-winx64 解压版本安装
  2. 海南关于推荐扬尘监控系统的通知_实时监管!定州对44家混凝土搅拌企业实施远程视频监控...
  3. Node.js 借助art-template进行后端渲染并呈现页面到前端
  4. 浅谈Proxmark3 Easy Gui 4.0 5.0 5.1加强版
  5. 阿里官宣AI框架大牛贾扬清加盟,任职技术VP
  6. CCF业务总部和学术交流中心落户苏州相城
  7. 游戏需求,猎豹启发!揭秘华为Mate 20 X石墨烯膜散热方案出台始末
  8. 离职盗取代码、倒卖获利800万,北京西二旗程序员被逮捕
  9. Google猜画小歌升级:现在可以跟好友对战了
  10. Rancher 2.0集群与工作负载告警