目录
1. 首先,使用浮动布局来实现一下
2. 其实,也可以试试利用 BFC
3. 接下来就尝试一下大名鼎鼎的双飞翼布局吧
4. 跟上潮流,试试 flex
首页 web前端 html教程 CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局--也聊聊双飞翼_html/css_WEB-ITnose

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

Jun 24, 2016 am 11:28 AM

今天聊聊一个经典的布局实例:

实现一个三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化

可能很多朋友已经笑了,这玩意儿通过双飞翼布局就能轻松实现。不过,还请容我在双飞翼之外,循序渐进地介绍一下我们可以如何实现一个三列布局。

1. 首先,使用浮动布局来实现一下

See the Pen float-three-columns by xal821792703 ( @honoka ) on CodePen .

  1. 左侧元素与右侧元素优先渲染,分别向左和向右浮动
  2. 中间元素在文档流的最后渲染,并将 width 设为 100%,则会自动插入到左右两列元素的中间,随后设置 margin 左右边距分别为左右两列的宽度,将中间元素调整到正确的位置。

这是一种比较便利的实现方式,无需额外的元素辅助定位,同时兼容性也比较优秀。但有一个缺点就是该布局方式只能实现左右两列宽度固定,中间自适应这一种三列布局,灵活性不强。

2. 其实,也可以试试利用 BFC

See the Pen bfc-three-columns by xal821792703 ( @honoka ) on CodePen .

昨天的《 CSS 布局实例系列(二)如何通过 CSS 实现一个左边固定宽度、右边自适应的两列布局 》已经谈到了利用 BFC 原理实现多列布局的方法。BFC 元素不会与浮动元素叠加,自然也可以利用 BFC 原理完成这个实例。

  1. 同样的左右两列元素优先渲染,并分别左右浮动。
  2. 接下来将中间元素设置 overflow: hidden; 成为 BFC 元素块,不与两侧浮动元素叠加,则自然能够插入自己的位置啦。

3. 接下来就尝试一下大名鼎鼎的双飞翼布局吧

See the Pen grid-three-columns by xal821792703 ( @honoka ) on CodePen .

双飞翼是由淘宝玉伯等前端大牛提出的一种多列布局方法,主要利用了浮动、负边距、相对定位三个布局属性,使三列布局就像小鸟一样,拥有中间的身体和两侧的翅膀。

接下来就简单介绍一下双飞翼的实现过程:

  1. 假设我们现在需要一个如实例说明一样的三列布局,写出如下 div 结构:
    <div class="grid">    <div id="div-middle-02"><span>div-middle</span></div>    <div id="div-left-02"><span>div-left</span></div>    <div id="div-right-02"><span>div-right</span></div></div>
    登录后复制
  2. 首先我们将中间元素放在文档流最前面优先渲染,然后使其向左浮动,并设置 width 为 100%:
    #div-middle-02 {    float: left;    background-color: #fff9ca;    width: 100%;    height: 50px;}
    登录后复制

    中间元素直接占满全列,形成小鸟的身体。

  3. 接下来我们开始为小鸟加上双翼,将左右两列元素均设为左浮动,然后通过调整负边距将其定位在各自的位置上:
    #div-middle-02 {    float: left;    background-color: #fff9ca;    width: 100%;    height: 50px;}#div-left-02 {    float: left;    background-color: red;    width: 150px;    margin-left: -100%;    height: 50px;}#div-right-02 {    float: left;    background-color: yellow;    width: 200px;    margin-left: -200px;    height: 50px;}
    登录后复制

    看起来,双翼安装成功啦。

  4. 这样三列布局就大功告成了?No,no,no,仔细看看上面的效果图,可以发现 div-middle 的字块消失了。这是因为通过负边距调整浮动元素位置时,会产生层叠的效果,上面的布局其实只是左右两列元素分别定位在自己的位置上并覆盖中间元素的那部分而已,中间元素的定位并未成功。中间元素要怎样定位在自己的位置上呢?小鸟的身体不是还缺少骨架嘛,那么我们在小鸟体内加上骨架吧:

    <div id="div-middle-02">        <div id="middle-wrap-02"><span>div-middle</span></div></div>
    登录后复制

    在中间元素中再增加一层包裹,通过这层骨架我们就可以方便地控制小鸟身体的位置啦,方法就是调整骨架的左右边距,使其分别等于左右两列的宽度:

    #div-middle-02 {    float: left;    background-color: #fff9ca;    width: 100%;    height: 50px;}#middle-wrap-02 {    margin: 0 200px 0 150px;}#div-left-02 {    float: left;    background-color: red;    width: 150px;    margin-left: -100%;    height: 50px;}#div-right-02 {    float: left;    background-color: yellow;    width: 200px;    margin-left: -200px;    height: 50px;}
    登录后复制

    好啦,一个左右定宽,中间自适应的三列布局以双飞翼的方式成功完成。

  5. 总结整个过程,就是先放好身体,再加上翅膀,然后让身体包裹一层骨架,通过骨架将身体定位到正确的位置。这就是双飞翼布局的完全体吗?当然不是,接下来我们要请出大杀器相对布局啦,就像小鸟可以通过各种不同的姿势飞翔一般,通过 position: relative; 双飞翼可以实现任意的三列或双列布局。本实例加上相对定位,便成为了这样的完全体:
    #div-middle-02 {    float: left;    background-color: #fff9ca;    width: 100%;    height: 50px;}#middle-wrap-02 {    margin: 0 200px 0 150px;}#div-left-02 {    float: left;    position: relative;    background-color: red;    width: 150px;    margin-left: -100%;    height: 50px;}#div-right-02 {    float: left;    position: relative;    background-color: yellow;    width: 200px;    margin-left: -200px;    height: 50px;}
    登录后复制
  6. 双飞翼能够兼容到 IE6,其可以实现的各种布局在此便不作展开了,有兴趣可以参考玉伯分享的 DEMO

4. 跟上潮流,试试 flex

See the Pen flex-three-columns by xal821792703 ( @honoka ) on CodePen .

看完了强大的双飞翼布局,是不是已经心急火燎地想亲手试试啦。别急,客官,再听我唠唠 CSS3 的新布局 flex 呗。先让我说明一下上面的 DEMO 中是怎样实现本次实例的:

  1. 设计一个弹性容器包裹需定位的三个元素,然后将该弹性容器的排列属性设为水平排列(flex-flow: row)
  2. 现在三个元素已经是三列布局了,再将三列元素分别设定一下宽度就行了,左右元素设定为定宽,自适应的中间元素设定为 100%。
    .flex {    display: flex;    flex-flow: row;}#div-left-03 {    background-color: red;    width: 150px;    height: 50px;}#div-middle-03 {    background-color: #fff9ca;    width: 100%;    height: 50px;}#div-right-03 {    background-color: yellow;    width: 200px;    height: 50px;}
    登录后复制

    效果如下图:

  3. 搞定收工!大哥你瞪着我是怎么回事儿?~ 什么?效果不对?我的代码怎么可能不对?!~ 哎呦,别打我,我马上检查(哭)好吧,宽度不对,左右两侧的宽度均不符合设定的定值。什么情况呢?原来在 flex 布局中不能将被定位的元素宽度或高度设定为 100%,这样会影响其他定值大小的元素。那么该如何设置中间元素的宽度呢,flex: 1; 即可,可以试一下 DEMO 中去掉注释与不去掉的区别。
  4. 最后简单介绍一下 flex:flex 是 CSS3 的一种弹性容器布局,通过 flex,几行简单的 CSS 语句便可以实现各种布局(对!我就是 flex NC粉~被拍飞~)。那么 flex 有什么缺点呢?对,就是兼容性!
  5. 所以在使用 flex 的时候还请注意是否兼容当前浏览器,是否需要 -webkit- 标签。flex 的具体语法和各类实例因为篇(lan)幅(de)过(xie)多的原因,也不做过多介绍了,可以参考阮一峰老师的博文:

Flex 布局教程:语法篇

Flex 布局教程:实例篇

最后感谢大家的阅读,欢迎前往我的 repo 查看源代码整理,有任何问题也请尽情向我吐槽。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

HTML容易为初学者学习吗? HTML容易为初学者学习吗? Apr 07, 2025 am 12:11 AM

HTML适合初学者学习,因为它简单易学且能快速看到成果。1)HTML的学习曲线平缓,易于上手。2)只需掌握基本标签即可开始创建网页。3)灵活性高,可与CSS和JavaScript结合使用。4)丰富的学习资源和现代工具支持学习过程。

HTML,CSS和JavaScript的角色:核心职责 HTML,CSS和JavaScript的角色:核心职责 Apr 08, 2025 pm 07:05 PM

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

HTML中起始标签的示例是什么? HTML中起始标签的示例是什么? Apr 06, 2025 am 12:04 AM

AnexampleOfAstartingTaginHtmlis,beginSaparagraph.startingTagSareEssentialInhtmlastheyInitiateEllements,defiteTheeTheErtypes,andarecrucialforsstructuringwebpages wepages webpages andConstructingthedom。

了解HTML,CSS和JavaScript:初学者指南 了解HTML,CSS和JavaScript:初学者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

网页批注如何实现Y轴位置的自适应布局? 网页批注如何实现Y轴位置的自适应布局? Apr 04, 2025 pm 11:30 PM

网页批注功能的Y轴位置自适应算法本文将探讨如何实现类似Word文档的批注功能,特别是如何处理批注之间的间�...

Gitee Pages静态网站部署失败:单个文件404错误如何排查和解决? Gitee Pages静态网站部署失败:单个文件404错误如何排查和解决? Apr 04, 2025 pm 11:54 PM

GiteePages静态网站部署失败:404错误排查与解决在使用Gitee...

HTML,CSS和JavaScript:Web开发人员的基本工具 HTML,CSS和JavaScript:Web开发人员的基本工具 Apr 09, 2025 am 12:12 AM

HTML、CSS和JavaScript是Web开发的三大支柱。1.HTML定义网页结构,使用标签如、等。2.CSS控制网页样式,使用选择器和属性如color、font-size等。3.JavaScript实现动态效果和交互,通过事件监听和DOM操作。

如何用CSS3和JavaScript实现图片点击后周围图片散开并放大效果? 如何用CSS3和JavaScript实现图片点击后周围图片散开并放大效果? Apr 05, 2025 am 06:15 AM

实现图片点击后周围图片散开并放大效果许多网页设计中,需要实现一种交互效果:点击某张图片,使其周围的...

See all articles