Flex布局(转自阮一峰老师)
转载自:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
Flex布局语法
任何一个容器都可以指定为 Flex 布局。
1 2 3 | .box{ display : flex; } |
行内元素也可以使用 Flex 布局。
1 2 3 | .box{ display : inline-flex; } |
Webkit 内核的浏览器,必须加上-webkit
前缀。
1 2 3 | .box{ display : inline-flex; } |
注意,设为 Flex 布局以后,子元素的float
、clear
和vertical-align
属性将失效。
以下6个属性设置在容器上
flex-direction(水平排列还是竖直)
1 2 3 | .box { flex- direction : row | row-reverse | column | column-reverse; } |
flex-wrap(换行方式)
1 2 3 | .box{ flex-wrap: nowrap | wrap | wrap-reverse; } |
flex-flow(以上两个属性的简写)
1 2 3 | .box { flex-flow: <flex-direction> || <flex-wrap>; } |
justify-content(水平对齐方式)
1 2 3 | .box { justify- content : flex-start | flex-end | center | space-between | space-around; } |
align-items(竖直对齐方式)
1 2 3 | .box { align-items: flex-start | flex-end | center | baseline | stretch; } |
align-content(多根轴线的对齐方式)
1 2 3 | .box { align- content : flex-start | flex-end | center | space-between | space-around | stretch; } |
以下6个属性设置在项目上
order(项目排列顺序,数值越小越前)
1 2 3 | .item { order: <integer>; } |
flex-grow(屏幕有剩余空间时的放大比例)
1 2 3 | .item { flex-grow: <number>; /* default 0 */ } |
flex-shrink(屏幕压缩时的缩小比例)
1 2 3 | .item { flex-shrink: <number>; /* default 1 */ } |
flex-basis(无缩放时原始尺寸)
1 2 3 | .item { flex-basis: <length> | auto ; /* default auto */ } |
flex(该属性是以上三个属性的简写)
1 2 3 | .item { flex: none | [ < 'flex-grow' > < 'flex-shrink' >? || < 'flex-basis' > ] } |
该属性有两个快捷值:auto
(1 1 auto
) 和 none (0 0 auto
)
align-self(设置项目自身的对齐方式,覆盖容器定义的对齐方式)
1 2 3 | .item { align-self: auto | flex-start | flex-end | center | baseline | stretch; } |
Flex 布局实例 (此部分见下面链接原文,如果以上都理解,以下都能实现)
转载自:http://www.ruanyifeng.com/blog/2015/07/flex-examples.html
一、骰子的布局
二、网格布局
三、圣杯布局
<body class="HolyGrail"> <header>...</header> // header <div class="HolyGrail-body"> //body 分为 左,中,右 <main class="HolyGrail-content">...</main> <nav class="HolyGrail-nav">...</nav> <aside class="HolyGrail-ads">...</aside> </div> <footer>...</footer> </body>
.HolyGrail { display: flex; min-height: 100vh; flex-direction: column; } header, footer { flex: 1; } .HolyGrail-body { display: flex; flex: 1; } .HolyGrail-content { //中间自动缩放 flex: 1; } .HolyGrail-nav, .HolyGrail-ads { //两边固定比例 /* 两个边栏的宽度设为12em */ flex: 0 0 12em; } .HolyGrail-nav { /* 导航放到最左边 */ order: -1; //因为默认flex-direction: row }
如果是小屏幕,躯干的三栏自动变为垂直叠加。
@media (max-width: 768px) { .HolyGrail-body { flex-direction: column; flex: 1; } .HolyGrail-nav, .HolyGrail-ads, .HolyGrail-content { flex: auto; } }
四、输入框的布局
我们常常需要在输入框的前方添加提示,后方添加按钮。
<div class="InputAddOn"> <span class="InputAddOn-item">...</span> <input class="InputAddOn-field"> <button class="InputAddOn-item">...</button> </div>
.InputAddOn { display: flex; } .InputAddOn-field { flex: 1; }
五、悬挂式布局
有时,主栏的左侧或右侧,需要添加一个图片栏。
<div class="Media">
<img class="Media-figure" src="" alt="">
<p class="Media-body">...</p>
</div>
.Media { display: flex; align-items: flex-start; } .Media-figure { margin-right: 1em; } .Media-body { flex: 1; }
六、固定的底栏
有时,页面内容太少,无法占满一屏的高度,底栏就会抬高到页面的中间。这时可以采用Flex布局,让底栏总是出现在页面的底部。
<body class="Site"> <header>...</header> <main class="Site-content">...</main> <footer>...</footer> </body>
.Site { display: flex; min-height: 100vh; flex-direction: column; } .Site-content { flex: 1; }
七、流式布局
每行的项目数固定,会自动分行。
.parent { width: 200px; height: 150px; background-color: black; display: flex; flex-flow: row wrap; align-content: flex-start; } .child { box-sizing: border-box; //应用IE盒模型,将border和padding纳入width计算范围。 background-color: white; flex: 0 0 25%; //这样25%包括下面设置的1px边框,一行刚好四个元素 height: 50px; border: 1px solid red; }
完毕
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法