Flex 布局
概念
- flexible box:弹性盒状布局
- 容器控制内部元素的布局定位
- CSS3 引入的新布局模型
- 伸缩元素,自由填充,自适应
优势
- 可在不同方向排列元素
- 控制元素排序的方向
- 控制元素的对齐方式
- 控制元素之间等距
- 控制单个元素放大与缩放比例、占比、对齐方式
常用术语
- flex containter : flex 容器
- flex item : flex 项目(元素)
- flex direction : 布局方向(主轴方向)
模型

容器的属性
flex-direction : 设置元素的排列方向(设置主轴)
- row(从左向右)
- row-reverse(从右向左)
- column(从上到下)
- column-reverse(从下到上)
flex-wrap : 使容器内的元素换行
- nowrap(不换行,会缩放)
- wrap(若超过则会到第二行进行排列,不会缩放)
- wrap-reverse(逆向换行,同样不会缩放)
flex-flow : flex-direction 和 flex-wrap 属性的简写,且默认值为 row nowrap
flex-flow:<'flex-direction'>||<'flex-wrap'>
justify-content : 设置元素在主轴上的对齐方式
- flex-start(左对齐)
- flex-end(右对齐)
- center(居中对齐)
- space-between(两端对齐,空白均匀填充到 flex 成员之间)
- space-around(元素两边平均等分剩余空白部分,空白间隙拼接)
- space-evenly(项目均匀分布,空白间隙相等)
align-items : 设置元素在交叉轴上的对齐方式
- flex-start(项目按照交叉轴起点对齐)
- flex-end(项目按照交叉轴终点线对齐)
- center(交叉轴方向项目中间对齐)
- baseline(交叉轴方向按第一行文字基线对齐)
- stretch(交叉轴方向,拉伸显示,拉伸显示)
align-content : 定义了在交叉轴方向的对齐方式以及额外空间分配,类似于主轴上的 justify-content 作用
- stretch(拉伸显示)
- flex-start(从启点线开始顺序排列)
- flex-end(相对终点线顺序排列)
- center(居中排列)
- space-between(项目均匀分布,第一项在启点线,最后一项在终点线)
- space-around(项目均匀分布,每一个项目两侧有相同的留白空间,相邻项目之间的距离是两个项目之间的留白和)
order : 默认情况下,flex 项目是按照在代码中出现的先后顺序排列的,但是 order 属性可以控制项目在容器中的先后顺序
- order:integer;
- (默认为 0,值按从小到大顺序排列,可以为负值)
flex-grow : 定义项目的放大比例,其值是一个单位的正整数,表示放大的比例。默认为 0,如果存在额外空间,不放大,负值无效。如果所有项目的 flex-grow 属性都是 1,则他们等分剩余的空间。如果一个项目的 flex-grow 属性为 2,其他项目都是 1,那么前者所拥有的剩余空间比其他的多一倍
- flex-grow:number;(默认为 0)
flex-shrink : 定义了项目的缩小比例,默认为 1,如果空间不足,该项目将缩小。0 表示不缩小,负值无效
- flex-shrink:number;(默认为 1)
flex-basis : 定义项目在分配额外空间之前的默认尺寸,属性值可以是长度或者关键字 auto,默认值为 auto,即项目本来大小
- flex-basis:length|auto;(默认值为 auto)
flex : 属性 flex-grow,flex-shrink 和 flex-basis 的简写,默认值为 0 1 auto,后两个是可选属性
.item { flex: none | [< "flex-grow" >< "flex-shrink" >||< "flex-basis" >];}/*一般推荐使用这种简写方式,而不是分别定义每一种属性*/align-self : 定义项目的对齐方式,可以覆盖 align-items 属性,默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,就与 stretch 相同
- auto
- flex-start
- flex-end
- center
- baseline
- stretch
flex-direction 的栗子
<template> <!-- 定义flex轴线 --> <view class="container"> <view class="green txt"> A </view> <view class="red txt"> B </view> <view class="blue txt"> C </view> </view></template><style> .container{ /* 定义flex容器 */ display: flex; /* 设置容器内部元素的排列方向 */ flex-direction: row; /* flex-direction: row-reverse; */ /* flex-direction: column; */ /* flex-direction: column-reverse; */ } .txt{ font-size: 20px; width: 150upx; height: 150upx; } .green{ background-color: #008000; } .red{ background-color: #ff0000; } .blue{ background-color: #007AFF; }</style>flex-direction: row 效果图:

更改样式:
<style > .container { /* 定义flex容器 */ display: flex; /* 设置容器内部元素的排列方向 */ /* flex-direction: row; */ flex-direction: row-reverse; /* flex-direction: column; */ /* flex-direction: column-reverse; */}... </style >;flex-direction: row-reverse 效果图
更改样式:
<style > .container { /* 定义flex容器 */ display: flex; /* 设置容器内部元素的排列方向 */ /* flex-direction: row; */ /*flex-direction: row-reverse;*/ flex-direction: column; /* flex-direction: column-reverse; */}... </style >;flex-direction: column 效果图
更改样式:
<style > .container { /* 定义flex容器 */ display: flex; /* 设置容器内部元素的排列方向 */ /* flex-direction: row; */ /*flex-direction: row-reverse;*/ /* flex-direction: column; */ flex-direction: column-reverse;}... </style >;flex-direction: column-reverse 效果图
