概念

flexible box:弹性盒装布局
容器控制内部元素的布局定位
CSS3引入的新布局模型
伸缩元素,自由填充,自适应


优势

可在不同方向排列元素
控制元素排序的方向
控制元素的对齐方式
控制元素之间等距
控制单个元素放大与缩放比例,占比,对齐方式


常用术语

  • flex container

flex容器

  • flex item

flex项目(元素)

  • flex direction

布局方向


模型

容器的属性

1、flex-direction

设置flex容器中flex成员项也就是元素的排列方向

  • row

从左向右

  • row-reverse

从右向左

  • column

从上到下

  • column-reverse

从下到上

  1. <template>
  2. <view class="container">
  3. <view class="green txt">A</view>
  4. <view class="red txt">B</view>
  5. <view class="blue txt">C</view>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. }
  13. },
  14. methods: {
  15. }
  16. }
  17. </script>
  18. <style>
  19. @import url("flex-direction.css");
  20. </style>

flex-direction.css

  1. .container{
  2. /* 定义flex容器 */
  3. display: flex;
  4. /* 设置容器内部元素的排列方向
  5. row:从左到右
  6. column:从上到下
  7. */
  8. /* flex-direction:row; */
  9. flex-direction:column;
  10. }
  11. .txt{
  12. font-size: 20px;
  13. width: 150rpx;
  14. height: 150rpx;
  15. }
  16. .green{
  17. background-color: #007AFF;
  18. }
  19. .red{
  20. background-color: #2C405A;
  21. }
  22. .blue{
  23. background-color: #333333;
  24. }
  25. .text

导入外部样式

  1. <template></template>
  2. <script></script>
  3. <style>
  4. @import url("flex-direction.css");
  5. </style>

2、flex-wrap:使容器内的元素换行

nowrap

元素不会换行,永远会累加在最后一个元素之后
由于元素设置了一定的宽度,此时会进行一些相应的缩放,缩放比例每一个元素都是一致的

wrap

当超过一定量之后就会在第二行进行排列

wrap-reverse

逆向换行排序

  1. .container{
  2. /* 定义flex容器 */
  3. display: flex;
  4. /* 设置容器内部元素的排列方向
  5. row:从左到右
  6. column:从上到下
  7. */
  8. flex-direction:row;
  9. flex-wrap: wrap;
  10. }

3、justify-content

设置元素在主轴上的对齐方式
定义了flex容器中flex成员项在主轴方向上如何排列以处理空白部分,默认为flex-start
主轴的方向是根据flex-direction来的

  1. .container{
  2. display: flex;
  3. flex-direction:column;
  4. justify-content: center;
  5. }

flex-start

左对齐

flex-end

右对齐

center

居中对齐

space-between

元素与元素之间保留的间隙等分
两端对齐,空白均匀的填充到flex成员项之间

space-around

元素两边平均等分剩余空白间隙部分,最左或者最右和元素之间是1:2的关系

4、align-items

设置元素在交叉轴上的对齐方式
定义了flex容器中flex成员项在纵轴方向上如何排列以处理空白部分,默认为stretch

  1. .container{
  2. display: flex;
  3. flex-direction:row;
  4. height: 800rpx;
  5. background-color: #007AFF;
  6. align-items: stretch;
  7. }

flex-start

在交叉轴上向起点位置(向上/向左)对齐

flex-end

在交叉轴上向结束位置(向下/向右)对齐

center

居中对齐

baseline

基准线,如果元素里有文字,会把文字作为基础线排成一行

  1. <template>
  2. <view class="container">
  3. <view class="green txt" style="height: 200rpx; font-size: 30px;">
  4. A
  5. </view>
  6. <view class="red txt" style="font-size: 10px;">
  7. B
  8. </view>
  9. <view class="blue txt" style=" height:320rpx; font-size: 50px;">
  10. C
  11. </view>
  12. </view>
  13. </template>
  14. -----------------------------------
  15. .container{
  16. display: flex;
  17. flex-direction:row;
  18. height: 800rpx;
  19. background-color: #007AFF;
  20. align-items: baseline;
  21. }

stretch(默认)

如果没有对元素设置高度,那么在交叉轴上会形成拉伸
此时会把元素高度拉到和外部容器高度一样

5、align-content

设置轴线的对齐方式(轴线当做元素)
除了能把元素作为对齐方式排列
也可以把容器内的轴线做为对齐方式的排列

前提是定义多根轴线,多行
当轴线超过1条的时候,flex容器可以把多条轴线视为元素对待,可以进行对齐

flex-direction为column

flex-start

向左对齐

flex-end

向右对齐

center

居中

strech

当宽度width没有设置的时候,轴线可以被拉伸

space-between

两端对齐,元素之间的空白等比切分

space-around

轴线两边的空白等比切分

容器内元素的属性

1、order

用于设置flex容器内部每个元素的排列顺序,默认值是0
排序规则由小到大

  1. .green{
  2. background-color: green;
  3. order: 3;
  4. }
  5. .red{
  6. background-color: red;
  7. order: 2;
  8. }
  9. .blue{
  10. background-color: blue;
  11. order: 1;
  12. }

2、flex-grow

用于设置元素放大比例,默认值是0,为0则不放大
前提是有空间

  1. .green{
  2. background-color: green;
  3. /* order: 3; */
  4. flex-grow: 1;
  5. }
  6. .red{
  7. background-color: red;
  8. /* order: 2; */
  9. flex-grow: 2;
  10. }
  11. .blue{
  12. background-color: blue;
  13. /* order: 1; */
  14. flex-grow: 1;
  15. }

3、flex-shrink

用于设置元素缩放比例,默认值是0,为0则不缩小
写负值是没有效果的
前提是当前轴线元素撑满了

  1. .green{
  2. background-color: green;
  3. /* order: 3; */
  4. /* flex-grow: 1; */
  5. flex-shrink: 0;
  6. }

4、flex-basis

设置元素固定或自动空间的占比
不需要有前提条件就可以设置元素的空间占比,可以放大,可以缩小

  1. .green{
  2. background-color: green;
  3. /* order: 3; */
  4. /* flex-grow: 1; */
  5. flex-shrink: 0;
  6. flex-basis: 300rpx;
  7. }

5、align-self

重写align-items父属性
重写容器中元素在交叉轴上的对齐方式

默认是auto,表示继承父级元素的align-item属性

  1. .red{
  2. background-color: red;
  3. align-self: flex-start;
  4. }

flex-start

在交叉轴上向起点位置(向上/向左)对齐

flex-end

在交叉轴上向结束位置(向下/向右)对齐

center

居中对齐

baseline

基准线,如果元素里有文字,会把文字作为基础线排成一行

stretch

如果没有对元素设置高度,那么在交叉轴上会形成拉伸
此时会把元素高度拉到和外部容器高度一样