目录
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)

热门话题

Java教程
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
了解HTML,CSS和JavaScript:初学者指南 了解HTML,CSS和JavaScript:初学者指南 Apr 12, 2025 am 12:02 AM

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

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操作。

HTML:结构,CSS:样式,JavaScript:行为 HTML:结构,CSS:样式,JavaScript:行为 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML:建立网页的结构 HTML:建立网页的结构 Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

HTML的角色:构建Web内容 HTML的角色:构建Web内容 Apr 11, 2025 am 12:12 AM

HTML的作用是通过标签和属性定义网页的结构和内容。1.HTML通过到、等标签组织内容,使其易于阅读和理解。2.使用语义化标签如、等增强可访问性和SEO。3.优化HTML代码可以提高网页加载速度和用户体验。

See all articles