CSS3 flex布局应用介绍

本文介绍如何使用Flex布局实现自适应三列等高布局,包括设置基本的HTML结构、利用Flex属性实现内容自适应及垂直居中等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:张歆琳

转载地址:http://www.jianshu.com/p/06661284d14a

 
 

上一篇介绍了flex弹性盒子的语法,本篇用flex来实际布局一下。例如我们以前会用inline-block或float配合%百分比来实现自适应的三列等高布局。但margin / padding计算起来比较复杂,加加减减维护起来很麻烦。用flex弹性盒模型就简单多了。

首先弄出原始的HTML结构,左右侧边栏定宽220px

* { margin: 0; padding: 0; }
#header, #footer { width: 100%; }
#left, #right { width: 220px; }

<div id="header">header</div>
<div id="page">
    <div id="main">main</div>
    <div id="left">left</div>
    <div id="right">right</div>
</div>
<div id="footer">footer</div>

现在将内容容器(#page)设成flex弹性盒模型:#page { display: flex; }


中间main就是个普通的div,因此宽度好像没有自适应,很简单设#main { flex: auto; }即可。因为两个侧边栏没有设flex,因此剩余的宽度将被main独享


main的位置不对,调整位置非常简单,设置#main { … order: 1; }即可。当然别忘了同步给right设#right { … order: 2; }。left不设默认为0。


你可能会疑惑,直接在DOM按left->main->right顺序排列不就行了,为何排列成main->left->right?确实调整DOM顺序也能达到同样效果,但将main越置前,对SEO搜索越友好。这其实并无标准答案,如果你觉得left的内容同样重要,那left->main->right的DOM顺序也是没问题的。

现在只剩最后一步,将footer置底并拉升page部分。先将html和body的height设成100%,为全屏做准备。由于body里包含了header,page,footer,因此为body设置flex弹性盒模型,同时设置flex-direction: column;让3个子元素垂直排列body { … display: flex; flex-direction: column; }

最后将page拉伸就简单了,思路和上面main一样,只要给page设置flex:auto;,因为header和footer没有设flex,因此剩余的高度将被page独享。


* { margin: 0; padding: 0; }
html, body { height: 100%; }
body {
    display: flex;
    flex-direction: column;
}
#header, #footer { width: 100%; }
#page {
    display: flex;
    flex:auto;
}
#left, #right { width: 220px; }
#right { order: 2; }
#main {
    flex: auto;
    order: 1;
}

总结一下自适应三列等高布局的思路,body应用垂直的flex模型,让页头,页面,页脚垂直排列,其中只有页面部分有flex:auto;将自适应高度。页面部分应用flex模型,内容,左侧栏,右侧栏将水平排列,其中只有内容部分有flex:auto;将自适应宽度。如果为了SEO优化,在DOM中将内容部分放在左右侧边栏上面的话,通过order调整顺序。

更多布局的例子,可以看看Solved by Flexbox

用flex弹性盒子可以轻松实现等比例布局:


.Grid { display: flex; }
.Grid-cell { flex: 1; }

<div class="Grid">
  <div class="Grid-cell">…</div>
  <div class="Grid-cell">…</div>
  <div class="Grid-cell">…</div>
</div>

也可以实现部分固定比例,剩余部分自适应布局:


评论区布局:


代码页面上都有,极其简单,可以自行参考。

总结

flex用于布局真的非常方便,原先用inline-block,float写的一堆既丑且难维护的代码,用flex可以很优雅地实现,什么垂直居中都是浮云。唯一需要的只是时间,等那些旧式浏览器都死透了,弹性盒子的春天就来了。



作者:张歆琳
链接:http://www.jianshu.com/p/06661284d14a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值