Flex布局
Flex 布局
由于公司需要使用 uniapp 开发小程序,所以需要接触一下移动端布局相关的问题。而 flex 布局对于移动端应用布局有很强的支持,因此学习后做一些总结。
Flex 优势
- 简单易学: 相比于传统的 css 布局,更加简洁,不需要大量的使用 float 和 position 属性
- 适应性强: Flex 布局可以很好的适应各种设备屏幕大小, 轻松创建响应式布局,而不需要涉及到 JS
- 灵活性高: Flex 提供了很多的选项,能轻松控制元素的对齐方式
- 可读性好: Flex 提供了一组高度可读性的方式来排列和对齐元素
Flex 基本概念
- 给父元素添加 display: flex 属性,就可以将其转换为 Flex 布局。Flex 布局的父元素称为 Flex 容器,子元素称为 Flex item。
- Flex 容器 的
floatclearvertical-align都是无效的 主轴(main axis)和交叉轴(cross axis)- Flex 容器存在两个轴
- 默认
水平方向为主轴,垂直方向为交叉轴
1 | |
Flex container 属性
| 属性 | 说明 |
|---|---|
| flex-direction | 决定主轴的方向 |
| flex-wrap | 决定是否换行 |
| flex-flow | flex-direction 和 flex-wrap 的简写 |
| justify-content | 决定元素在主轴上的对齐方式 |
| align-items | 决定元素在交叉轴上的对齐方式 |
| align-content | 决定多根轴线的对齐方式 |
flex-direction
- 决定主轴的方向
- 可选值
flex-wrap
- 决定主轴满了以后, 是否需要换行
nowrap(默认): 不换行wrap: 换行,第一行在上方wrap-reverse: 换行,第一行在下方
flex-flow
- flex-direction 和 flex-wrap 的简写
1 | |
justify-content
- 决定元素在主轴上的对齐方式
- 可选值
flex-start(默认): 左对齐flex-end: 右对齐center: 居中space-between: 两端对齐,元素之间的间隔都相等space-around: 每个元素两侧的间隔相等。所以,元素之间的间隔比元素与边框的间隔大一倍
align-items
- 决定元素在交叉轴上的对齐方式
- 可选值
flex-start: 交叉轴的起点对齐flex-end: 交叉轴的终点对齐center: 交叉轴的中点对齐baseline: 项目的第一行文字的基线对齐stretch(默认值): 如果项目未设置高度或设为 auto,将占满整个容器的高度
align-content
- 决定多根轴线的对齐方式, 如果只有一条轴,则不起作用
- 可选值
flex-start: 和交叉轴的起点对齐flex-end: 和交叉轴的终点对齐center: 和交叉轴的中点对齐space-between: 和交叉轴两端对齐,轴线之间的间隔平均分布space-around: 每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍stretch(默认值): 轴线占满整个交叉轴
Flex item 属性
| 属性 | 说明 |
|---|---|
| order | 决定元素的排列顺序 |
| flex-grow | 决定元素的放大比例 |
| flex-shrink | 决定元素的缩小比例 |
| flex-basis | 决定元素的初始大小 |
| flex | flex-grow, flex-shrink 和 flex-basis 的简写 |
| align-self | 决定元素在交叉轴上的对齐方式 |
order
- 决定元素的排列顺序
- 默认值为 0,数值越小,排列越靠前
flex-grow
- 决定元素的放大比例
- 默认值为 0,(即使轴存在剩余的空间,也不进行放大处理)
flex-shrink
- 决定元素的缩小比例
- 默认值为 1
- (默认都为 1 表示当空间不足时,等比例缩小)
- 如果一个元素的 flex-shrink 属性为 0,其他元素都为 1, 则为 0 元素不缩小
flex-basis
- 决定元素的初始大小
- 默认值为
auto, 即元素的本来大小
flex
- flex-grow, flex-shrink 和 flex-basis 的简写
- 相应的默认值为:
0 1 auto
align-self
- 决定元素在交叉轴上的对齐方式, 可以覆盖 align-items 的值
- 默认为
auto, 表示使用父元素的 align-items 属性
Flex 布局练习
居中展示
垂直居中且水平居中, 就是两个轴都居中
代码
html
1 | |
css
1 | |
百分比布局
类似于 Bootstrap 的网格系统,可以使用百分比来布局
代码
html
1 | |
css
1 | |
参考
Flex布局
https://blog.mjhxyz.top/posts/29914/











