前端的页面布局知识是初中级前端工程师必须掌握的内容,在面试的时候无论大厂小厂都有很大概率被提问到,作为与页面最紧密的前端开发者,前端布局知识是必不可少的一环。

前言

这里所要介绍的布局知识主要是在解决三列布局模式而出现的几种布局解法,其中包含了经典的圣杯布局,双飞翼布局,绝对定位的布局方式,还包含2009年W3C所提出的Flex布局方式和以CSS3所带来的calc计算函数来解决三列布局的方式。

本文会通过实例的方式讲解,带你了解为什么没有一种一劳永逸的方法解决三列布局的问题,看看分别在使用这些方式时分别都遇到了哪些的问题,通过分析解决,让你明白这几种方式的各自的优缺点与适用场景。

一、三列布局是什么

指共有三列,但是左右两列是宽度固定,中间一列宽度根据屏幕宽度自适应的布局方式,这是一种比较常见的布局方式,很多网站首页均采用这种方式布局,比如像下面比较熟悉的菜鸟教程官网。

二、三列布局解决方法

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我并在后台私信我:前端,即可免费获取。

1. 圣杯布局

圣杯布局,一个经典的三列布局解决方法,至于为什么 叫这个名字,我理解是布局完成后像个圣杯,接下来一步一步实现一下圣杯布局。

① 完成基础效果

②. 将左侧栏,右侧栏移到与内容栏同样高度,这里先利用float浮动元素。

注意浮动完成之后,footer元素被盖在内容块下面了。

③. 利用margin-left的负值将左侧栏,右侧栏和内容栏移到同一高度。将左侧栏margin-left赋值为-100%;然后将右侧栏margin-left赋值为负的自身宽度。

注意:这里的左右侧栏都是附在内容栏上的,内容栏被压在下面。

④. 将底部footer区域利用clear属性清除content内的浮动元素透出来。

⑤. 将内容栏被左右压在底下的部分,通过content添加padding属性透出来。

.content { padding: 0 200px;}

这个时候真整个 content的内容都被padding缩放了,怎么办呢?

⑥. 左右侧边栏利用position: relative,移出内容区域。

整个布局就完成了,你可以左右拉伸屏幕,内容区域为自动缩放,符合咱们 开始时的需求。

圣杯布局的问题:当缩放到一定程度,会发现整个页面结构将会变乱。

当然利用min-width可以解决这个问题,因为min-width是后续css3中所出现的内容,在当时min-width还没有的情况下,圣杯布局就存在这个问题。然而这个问题可以解决吗?接下来进入双飞翼布局。

2. 圣杯双飞翼布局

双飞翼布局是圣杯布局演化而来的,且是旨在要解决圣杯布局所遇到的问题,即缩小到一定程度后页面布局依旧正常,因为代码和圣杯基本一致,只是结构略有差异,这里不一步一步拆解。

从上面的DOM结构来看,双飞翼布局与圣杯布局最大的不同点便是在此,双飞翼布局中,将中间栏放在一个div内部包裹起来了,多了一层DOM结构。

下面看看样式。

从上面双飞翼的布局来看,css中没有了position定位布局的内容了,感觉简明而清晰了。

双飞翼布局的问题:相比于圣杯布局多了一层DOM结构,导致页面渲染性能下降。

3. 绝对定位布局

如果作为一个初学者,让我解决这个问题,我一定会选择绝对定位布局,因为绝对定位布局是最简单最容易理解的一种三列布局解决方式。

思路非常简单,列为以下几步。

①. 将内容区域给margin值,居中且留出左右侧边栏的宽度。

②. 将外层content添加position:relative属性。

③. 将左右侧边栏设置绝对定位属性,position: absoluate,进行布局在与内容栏同高的位置。

④. 分别设置left:0与right:0 属性,保持内容块与左右侧栏有顺序且不重合排列。

css相关内容也非常容易理解,基本都是常用的定位相关内容。

上面的布局代码虽然非常容易理解,但是它却有一个致命的问题。

定位布局的问题:因为左右侧的高度是绝对定位脱离文档流的,此时footer区域只会在内容区块下,而不是由内容块和左右侧栏三块区域的高度而决定,所以在某些场景下是不能满足需求的,如呈现出下面的效果。

4. Flex布局

flex布局是2009年W3C所提出的一种新的布局方式,在目前是非常好用且常见的布局方式,我感觉能解决页面上百分之90的布局问题,但是因为出来的比较晚,会有部分浏览器兼容性的问题。

代码完全是简约而又大方,而且没有上面三种布局所产生的问题,真是三列布局必备良品。

flex布局的问题:唯一能说的问题就是兼容性问题了。

flex布局解决三栏布局无疑绝对是最方便的,如果现在我遇到三列布局的问题,毋庸置疑我会选择flex布局来解决,尽管有一些低版本浏览器的兼容性,9012年的今天请放心使用。

5. CSS3的calc函数

思路非常容易理解,就是中间三块区域加float浮动起来,从左到右依次按顺序排列,因为左右两侧宽度已知,而中间块宽度需要自适应,所以只要在屏幕宽度变化的时候,通过css3的方法实时计算出中间内容块自适应的宽度即可,非常符合人们的思维习惯。

calc是css3支持的css计算函数,它能动态的计算出一个值,打破传统css概念,让你的css也能做计算。

使用用法:calc(表达式)

calc() 的使用注意点:
运算符前后都需要保留一个空格,例如:width: calc(100% - 400px);
任何长度值都可以使用calc()函数进行计算;
calc()函数支持 "+", "-", "*", "/" 运算;
calc()函数使用标准的数学运算优先级规则;

css3计算属性布局的问题:也是兼容性问题了,从下面可以看出来很多浏览器还是不支持的。

三、总结

上面就是经典的三列布局相关的知识,虽然圣杯布局和双飞翼布局在现在很少被用到,但是作为一个前端开发者,还是要了解这些经典的布局相关知识,从而在面试出现的时候能够从容应对。

实际上,在9012年的今天,其实在目前开发中百分之九十的布局都是可以通过flex布局来解决的,只要你没有IE低版本的用户需求,掌握Flex布局是非常重要的。

最后所介绍的css3计算属性解决三列布局是一种比较贴近数学思想的角度出发,从计算的方式来解决自适应下的宽度变化,但是兼容性还是较差,所以作为实际解决方案还是不妥,就当是了解CSS3新世界的敲门砖吧。


如上内容如有错误或者认识偏差,如有问题,希望大家留言指正,以免误人,若有什么问题请留言,会尽力回答之。

原文链接https://mp.weixin.qq.com/s/bPfdwdF1SR9Pt03zNhNebw
作者:TingRongGao

flex 左右布局_面试必考点:前端布局知识相关推荐

  1. 拉勾网《32个Java面试必考点》学习笔记之二------操作系统与网络知识

    本文为拉勾网<32个Java面试必考点>学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频<32个Java面试必考点>.若本文侵犯了相关所有者的权益,请联系:txz ...

  2. 拉勾网《32个Java面试必考点》学习笔记之一------Java职业发展路径

    本文为拉勾网<32个Java面试必考点>学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频<32个Java面试必考点>.若本文侵犯了相关所有者的权益,请联系:txz ...

  3. 拉勾网《32个Java面试必考点》学习笔记之十二------架构演进与容器技术

    本文为拉勾网<32个Java面试必考点>学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频<32个Java面试必考点>.若本文侵犯了相关所有者的权益,请联系:txz ...

  4. 拉勾网《32个Java面试必考点》学习笔记之十一------消息队列与数据库

    本文为拉勾网<32个Java面试必考点>学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频<32个Java面试必考点>.若本文侵犯了相关所有者的权益,请联系:txz ...

  5. python初中必背语法_初中必背英语语法知识汇总

    原标题:初中必背英语语法知识汇总 语法是中考英语考试必考点.语法知识掌握得好,将大大加快英语学习的进程.本文归纳了词法和八种基本时态,希望对广大初中学子有所帮助. 词法 名词 (1)名词的可数与不可数 ...

  6. 数字 IC 笔试面试必考点(3)数字 IC 前端设计 + 后端实现

    前言         该资源是博主花了十多天自己整理的,IC 前端设计流程在文中给出,IC 后端设计流程除了在文中给出之外还附加了总共六十页的 PDF 详细流程文档,简直是满满的爱啊,完整展示了 IC ...

  7. 前端面试必考点,ES6你不得不会!

    这里是Z哥的个人公众号 每周五11:45 按时送达 当然了,也会时不时加个餐- 最近两年,程序员的就业行情大家应该也都深感受到了,这碗饭吃起来没前两年香了. 之前行情好的时候,整个行业都很沸腾.包括新 ...

  8. css label 居中布局_详解 CSS 居中布局技巧

    水平居中元素:通用方法,元素的宽高未知 方式一:CSS3 transform .parent { position: relative; } .child { position: absolute; ...

  9. flex 左右布局_移动端开发常用布局:前端弹性布局总结

    各位已经入坑的前端小伙伴,前面咱们已经给大家分享了移动端开发时候流式布局的应用场景及注意事项,今天再次给大家分享一个布局叫弹性布局,接下来咱们从如下几个方面,全方位的给大家介绍弹性布局的使用. 一:什 ...

最新文章

  1. MongoDB配置文件
  2. 【骨架屏】【vue】如何在webpack+vue+vue-cli下搭建多模块/单模块多路由骨架屏
  3. 【Android 应用开发】BluetoothSocket详解
  4. weex 富文本_Weex richtext 富文本某个字加重显示
  5. 区块链BaaS云服务(38)点存DCpool分布式存储
  6. java 消息推送_hanbo-push分布式消息推送、IM服务
  7. 搭建项目前端页面环境
  8. Psych101(part6)--Day6
  9. 机器学习第九篇:详解Adaboost算法
  10. python处理大数据越来越慢_请问使用JdbcTemplate读取大数据很慢如何优化?(十几万数据)...
  11. js页面重定向跳转代码总结(待续)
  12. Hadoop群集设置
  13. [Java反序列化]AspectJWeaver反序列化
  14. megafiers3.14下载
  15. 京瓷Kyocera TASKalfa 3051ci 一体机驱动
  16. 干货:我的web3研究框架分享
  17. 5G移动通信技术基本介绍(附92页PDF下载)
  18. 计算机C盘什么引用了,电脑老是显示c盘引用了一个不可用的位置 怎么处理
  19. 【微信小程序使用canvas绘制二维码】
  20. 怎么快速了解一个新的项目

热门文章

  1. 【洛谷 P3304】[SDOI2013]直径(树的直径)
  2. 最全面的关于LINUX与UNIX下的dd命令详解
  3. 11g新特性-自动sql调优(Automatic SQL Tuning)
  4. 与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成...
  5. twitter storm源码走读之2 -- tuple消息发送场景分析
  6. ubuntu下nagios监控远程主机
  7. WCDMA的短消息业务协议分析
  8. 利用用户级线程提高多线程应用的性能
  9. 【推荐】(SqlServer)不公开存储过程sp_Msforeachtable与sp_Msforeachdb详解
  10. 实战 | 尝鲜 Svelte 前端框架,开发读书笔记