7种方式实现3栏布局

  • 要求:左右定宽,中间自适应

浮动

  • 思路

    • 结构上主体区放在最后面保证与浮动元素同行,侧边栏各自左右浮动,主体区触发BFC后不受浮动元素影响。
<section class="layout float"><style>.layout.float{overflow: auto;}.layout.float aside{float: left;width: 200px;height: 100px;background-color: RGBA(0, 195, 217, .5);}.layout.float aside.right{float: right;}.layout.float main{height: 110px;background-color: #ccc;overflow: auto;}</style><article><aside class="left"></aside><aside class="right"></aside><main>float achieving 3 column layout<xmp>notice:float makes words wrap around img, activing BFC in <main>tag or using .clearfix</xmp></main></article>
</section>
复制代码

绝对定位

  • 思路

    • 侧边栏各自定位左右,主体区margin留出等宽距离(或者主体区一起绝对定位,左右定位等宽距离)。
<section class="layout absolute"><style>.layout.absolute>article{position: relative;}.layout.absolute>article>*{position: absolute;top: 0;height: 100px;}.layout.absolute aside.left{left: 0;width: 200px;background-color: RGBA(0, 195, 217, .5);}.layout.absolute aside.right{right: 0;width: 200px;background-color: RGBA(0, 195, 217, .5);}.layout.absolute main{left: 200px;right: 200px;background-color: #ccc;}</style><article><aside class="left"></aside><aside class="right"></aside><main>absolute achieving 3 column layout<p>cons:1.all absolute, parent element loses height</p></main></article>
</section>
复制代码

table

  • 思路

    • 包含块display: table设置一行宽度,内部元素display: table-cell,左右侧边栏设置宽度,主体区宽度自适应。
<section class="layout table"><style>.layout.table{margin-top: 130px;}.layout.table>article{display: table;width: 100%;}.layout.table>article>*{display: table-cell;}.layout.table .left,.layout.table .right{width: 200px;height: 100px;background-color: RGBA(0, 195, 217, .5);}.layout.table main{background-color: #ccc;}</style><article><aside class="left"></aside><main>table achieving 3 column layout<xmp>notice:1.table layout height and width</xmp></main><aside class="right"></aside></article>
</section>
复制代码

flex

  • 思路

    • flexbox实现太简单了,只要注意给主体区flex-grow: 1就能自适应了。
<section class="layout flex"><style>.layout.flex>article{display: flex;}.layout.flex aside{width: 200px;height: 100px;background-color: RGBA(0, 195, 217, 1.00);}.layout.flex main{flex: 1;background-color: #ccc;}</style><article><aside class="left"></aside><main>flex achieving 3 column layout</main><aside class="right"></aside></article>
</section>
复制代码

grid

  • 思路

    • 特意补了下grid布局,在掌握flex的情况下很容易就上手了。
<section class="layout grid"><style>.layout.grid>article{display: grid;grid-template: 100px / 200px 1fr 200px;}.layout.grid aside{background-color: RGBA(0, 195, 217, 1.00);}.layout.grid main{background-color: #345;}</style><article><aside class="left"></aside><main>grid achieving 3 colum layout</main><aside class="right"></aside></article>
</section>
复制代码

圣杯布局

  • 思路

    • 圣杯和双飞翼布局是经典的三栏布局,集结了前人的智慧。两者结构上都是把主体区放在侧边栏的前面以保证当时的网速能够先加载主体区的内容呈现给用户。
    • 圣杯布局是让侧边栏绝对定位,主要是右侧要left: 100%;margin-left: -width作定位,然后主体区margin留出等宽距离。
<section class="layout grail"><style>.layout.grail>article{position: relative;}.layout.grail main{margin: 0 200px;height: 100px;background-color: #ccc;}.layout.grail aside{position: absolute;top: 0;left: 0;width: 200px;height: 100px;background-color: RGBA(255, 113, 0, .5);}.layout.grail aside:last-child{left: 100%;transform: translateX(-100%);/* margin-left: -200px; */}</style><article><main>grail achieving 3 column layout</main><aside></aside><aside></aside></article>
</section>
复制代码

双飞翼

  • 思路

    • 主体区要包一层盒子以便作调整让出左右侧边栏的空间。作布局的三元素左浮动,作主体区包裹元素width: 100%,然后左右侧边栏分别用负margin技巧调整自同行左右。
    • 注意,对比圣杯的绝对定位,此时右边栏浮动后无法使用transform来调整位置。绝对定位的元素之间可以相互覆盖,而浮动元素会一直漂到其外边缘挨到容器边缘或另外的浮动元素。因为主体区包含块占满,呃呃呃...卡壳,涉及到浮动元素在transform与负margin的渲染机制差异,无力研究,无法解释…好吧,只能记住这个现象了
<section class="layout coupleWings"><style>.layout.coupleWings aside{float: left;width: 200px;height: 100px;background-color: RGBA(255, 241, 169, .5);}.layout.coupleWings>article>aside:first-of-type{margin-left: -100%;}.layout.coupleWings>article>aside:last-of-type{margin-left: -200px;}.layout.coupleWings .main{float: left;width: 100%;}.layout.coupleWings main{margin: 0 200px;height: 110px;background-color: #ccc;}</style><article class="clearfix"><div class="main"><main>coupleWings achieving 3 column layout</main></div><aside></aside><aside></aside></article>
</section>
复制代码

preview

总结

  • 实现同样的布局flex与grid布局只要简单几行代码和清晰的HTML结构,通过caniuse可知:flex适用95.71%的浏览器,grid也高达87.25%。
  • 虽然现在前端的技术革新迅猛,但体验和思考整个前端技术发展的过程,何尝不是一种收获。
  • 新技术的目的肯定是着眼某个点有所突破,解决了某方面的问题,是思想在技术上的实现。
  • 警醒自己要带着什么样的态度看待现在的前端——拥抱新技术,了解思维革新的地方,然后在有需要的时候迅速上手(当然前提还是不断学习,打扎实自己的基础)。

7种方式实现3栏布局相关推荐

  1. html三栏布局的方式,12种方式实现三栏布局/圣杯布局

    三栏布局/圣杯布局是常见的布局方式,面试也经常问. 圣杯布局说的是左右的宽度固定,中间宽度自适应的布局.实现方式有很多,之前只是知道两三种.现在来总结一下. 总的来说,分为css3之前和css3之后的 ...

  2. CSS八种方式实现等高布局

    下面要介绍的方法都是让我们的布局如何实现多列的等高视觉效果,正如下图所示:     一.假等高列     这种方法是我们实现等高列最早使用的一种方法,就是使用背景图片,在列的父元素上使用这个背景图进行 ...

  3. css的经典三栏布局如何实现,css 实现三栏布局的四种方式

    三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 左边 中间 右边 body { padding: ; margin: ; } /* 绝对定位 */ .left, .right { po ...

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

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

  5. 圣杯布局-三种实现方式,css经典布局

    圣杯布局:经典三栏布局,左右两边宽度固定,中间自适应 圣杯布局在前端构建页面是最常见的一种布局方式,也是前端面试中最常被问到的一问题,下面通过三种方式去实现圣杯布局!附代码!可以一对比一下哪种方式最便 ...

  6. 两种方式实现圣杯布局

    圣杯布局又被称为双飞布局,比较简单,今天我给大家分享一下,如何用两种方式来实现双飞布局.那什么是双飞布局呢,其实就是两侧宽度固定,中间宽度自适应的三栏布局. 1.第一种相对来说比较容易想到,就是利用定 ...

  7. 三种方法实现CSS三栏布局

    本文由云+社区发表 作者:前端林子 本文会分别介绍三种CSS实现三栏布局的方法,可在浏览器中打开查看效果 1.方法一:自身浮动的方法 实现方法:需要左栏向左浮动,右栏向右浮动,中间设左右margin来 ...

  8. 平分布局 html,实现CSS平分布局的4种方式

    实现CSS等分布局的4种方式 前面的话 等分布局是指子元素平均分配父元素宽度的布局方式,本文将介绍实现等分布局的4种方式 思路一: float 缺点:结构和样式存在耦合性,IE7-浏览器下对宽度百分比 ...

  9. HTML水平垂直居中的四种方式

    第一种方式是使用margin进行移动 水平居中 margin:0 auto; <!DOCTYPE html> <html lang="en"> <he ...

  10. CSS实现多栏布局的几种方式

    css实现多栏布局的几种方式 假如把下面的三个div显示在同一行 <div id="parent"><div id="box1">1&l ...

最新文章

  1. 倒计时1天 | 张钹院士领衔,AI开发者大会20大论坛全攻略!
  2. 一文理解拉格朗日对偶和KKT条件
  3. python和vba操作excel_python调用excel中VBA代码
  4. HDU 3001 Travelling
  5. Js基础知识梳理系列
  6. 大数据分析 es hive_使用Hive和iReport进行大数据分析
  7. pdfjs viewer 开发小结
  8. Educational Codeforces Round 15 套题
  9. 头文件 ctype.h 以及函数 isalpha() tolower()
  10. Unsupported major.minor version 51.0
  11. Echarts.js+jquery.js+china.js实现中国疫情地图
  12. 如何保存ISE综合后的RTL schematic为pdf
  13. sql语句多条件查询语句拼接
  14. border-color属性设置单边边框和综合四边边框颜色
  15. oracle enlisttransaction,WAS运行时抛出的两种异常,经过google找到解决方案,记录以备案...
  16. 连续时间周期信号傅里叶级数
  17. 队列的定义及其基本操作
  18. 前端——将png图片做成icon
  19. 第三百篇博客:写给自己的总结
  20. 智能座舱又迎来一个新的「蓝海」赛道!谁在领跑?

热门文章

  1. html让一行文字在两行,css单行两行文本自适应问题
  2. python mooc-课程资源 | Python语言系列专题MOOC
  3. python exception最简单的应用(基本可以满足大部分需求)(异常、raise的使用)
  4. 电子邮件地址中服务器怎么看,你如何检查电子邮件服务器(gmail)中的某个地址,并基于该地址运行一些东西?...
  5. c程序 wrapper_如何使 Python 程序能让他提速 30%?
  6. Sublime Text3:解决win10输入法输入框不跟随问题
  7. linux 中写一个脚本 定时删除缓存任务,并创建相关文件,Linux使用shell脚本定时删除历史日志文件...
  8. arduino cc3000 php,【arduino】新手求助, 想问一下关於CC3000设置的问题
  9. OpenCV学习(7.13)
  10. busybox的使用