15、Flex布局(2-7是介绍用在父容器中的属性设置,8-12是介绍用在items上的属性介绍)
1.flex布局简介
flex布局(Flexible布局,弹性布局)
开启了Flex布局的元素叫flex container。
flex container里面的直接子元素叫做flex items。
- 开启flex布局方法:设置display属性为flex或inline-flex。它的作用范围为他的直接子元素。
flex:flex container 以块级元素存在
inline-flex:flex container以行内元素存在
案例:无flex布局
代码:
<!--pages/demo06/demo06.wxml-->
<view>
<view >学号:</view>
<input name='name' style="border:1rpx solid gray"></input>
</view>
运行截图:
案例:使用flex布局
代码:
<!--pages/demo06/demo06.wxml-->
<view style='display:flex'>
<view >学号:</view>
<input name='name' style="border:1rpx solid gray"></input>
</view>
`运行截图:
2.flex-direction
flex items默认都是沿着主轴方向从主轴开始到结束的方向排列。
flex-direction决定了主轴的方向,有四个取值。row(默认值),,row-reverse,column,column-reverse。
四种值的主轴样式如下:
案例代码:
<!--pages/demo06/demo06.wxml-->
<view style='display:flex;flex-direction:row-reverse'>
<view >学号:</view>
<input name='name' style="border:1rpx solid gray"></input>
</view>
运行截图:
3.justify-content
justify-content:决定了flex items在主轴上的对齐方式。
取值有:
flex-start(默认值);flex-end,center,
space-between(flex items与主轴开始 结束位置对齐,items间距离相等)
space-around(flex items之间间距离相等,与主轴开始、结束之间的距离也相等)
space-evenly(flex items之间间距离相等,是主轴开始、结束之间的距离的两倍)
案例代码:
<!--pages/demo06/demo06.wxml-->
<view style='display:flex;flex-direction:row-reverse;justify-content:center'>
<view >学号:</view>
<input name='name' style="border:1rpx solid gray"></input>
</view>
运行截图:
4. align-items
align-items决定了flex items 在cross axis交叉轴上的对齐方式。
交叉轴永远是与主轴垂直的那个轴。方向朝下或朝右。
取值:
stretch(默认值):当flex items在cross axis方向的size为auto时,会自动拉伸至填充至flex container。
flex-start
flex-end
center
baseline
案例代码:
<!--pages/demo06/demo06.wxml-->
<view class='st'>
<view >学号:</view>
<input name='name' style="border:1rpx solid gray"></input>
</view>
/* pages/demo06/demo06.wxss */
.st{
border:1rpx solid gray;
width: 600rpx;
height:600rpx;
display:flex;
flex-direction:row;
justify-content:center;
align-items:center;
}
运行截图:
- 详解一下这里说的拉伸(stretch(默认值):当flex items在cross axis方向的size为auto时,会自动拉伸至填充至flex container。)
首先通过 flex-direction:row; 知道主轴为横轴(当然如果没有设定flex-direction值默认也为横轴),如果设定flex items在交叉轴(与主轴垂直)方向size为auto,会自动拉伸至填充至flex container。
<!--pages/demo06/demo06.wxml-->
<view class='st'>
<view class='item' style="background-color:#f00">学号1:</view>
<view class='item' style="background-color:#0f0">学号2:</view>
<view class='item' style="background-color:#00f">学号3:</view>
<view class='item' style="background-color:#ff0">学号4:</view>
</view>
/* pages/demo06/demo06.wxss */
.st{
border:1rpx solid gray;
width: 600rpx;
height:600rpx;
display:flex;
flex-direction:row;
justify-content:center;
}
.item{
height:auto;
}
运行截图:
5. flex-wrap
flex-wrap决定了flex container是单行还是多行。
取值:nowrap(默认),单行,如果内容多了可能会挤压flex items
wrap:多行
warp-reverse:多行(对比wrap,cross start 与cross end相反)
案例代码:flex-wrap为默认值。
<!--pages/demo06/demo06.wxml-->
<view class='st'>
<view class='item' style="background-color:#f00">学号1:</view>
<view class='item' style="background-color:#0f0">学号2:</view>
<view class='item' style="background-color:#00f">学号3:</view>
<view class='item' style="background-color:#ff0">学号4:</view>
<view class='item' style="background-color:#0ff">学号5:</view>
<view class='item' style="background-color:#f0f">学号6:</view>
<view class='item' style="background-color:#df8">学号7:</view>
</view>
/* pages/demo06/demo06.wxss */
.st{
border:1rpx solid gray;
width: 600rpx;
height:600rpx;
display:flex;
flex-direction:row;
justify-content:center;
}
.item{
height:100rpx;
}
运行截图:
案例:flex-wrap值设为多行wrap
6. flex-flow
flex-flow是flex-direction||flex-wrap的简写
7. align-content
align-content决定了多行flex items在cross items 在cross axis上的对齐方式,用法与justify-content类似。
取值:stretch(默认):与align-items的stretch类似(交叉轴方向,items的size为auto会自动拉伸)。
flex-start
flex-end
center
space-bewteen
space-around
案例代码wxml代码与上节相同。
8. order
order决定了flex items的排布顺序,可以设置为任意整数(正整数、负整数,0),值越小越排在前面。默认值是0.
案例代码:
<!--pages/demo06/demo06.wxml-->
<view class='st'>
<view class='item' style="background-color:#f00;order:3">学号1:</view>
<view class='item' style="background-color:#0f0">学号2:</view>
<view class='item' style="background-color:#00f">学号3:</view>
</view>
/* pages/demo06/demo06.wxss */
.st{
border:1rpx solid gray;
width: 600rpx;
height:600rpx;
display:flex;
flex-direction:row;
}
.item{
height:100rpx;
}
运行截图:
9. align-self
flex items可以通过align-self覆盖flex container设置的align-items。
取值:
auto(默认值):遵从flex container的align-items设置。
stretch,flex-start,flex-end,center,baseline,效果跟align-items一样。
案例代码:
<!--pages/demo06/demo06.wxml-->
<view class='st'>
<view class='item' style="background-color:#f00;align-self:flex-start">学号1:</view>
<view class='item' style="background-color:#0f0">学号2:</view>
<view class='item' style="background-color:#00f">学号3:</view>
</view>
/* pages/demo06/demo06.wxss */
.st{
border:1rpx solid gray;
width: 600rpx;
height:600rpx;
display:flex;
flex-direction:row;
align-items: center;
}
.item{
height:100rpx;
}
运行截图:
10. flex-grow
flex-grow决定了flex items如何扩展。可以设置为任意非负数(正小数,正整数,0),默认值为0.。
当flex container在main axis方向上有剩余空间时,flex-grow属性才会有效。
- 如果所有flex items的flex-grow总和sum超过1,每个flex item扩展的size为flex container的剩余size*flex-grow/sum
- 如果所有flex items的flex-grow总和sum不超过1,每个flex item扩展的size为flex container的剩余size*flex-grow
- flex items扩展后的最终size不能超过max-height或者max-width。
案例代码:wxss文件代码与第9节一样
<!--pages/demo06/demo06.wxml-->
<view class='st'>
<view class='item' style="background-color:#f00;flex-grow:1;">学号1:</view>
<view class='item' style="background-color:#0f0;flex-grow:2;">学号2:</view>
<view class='item' style="background-color:#00f;flex-grow:1;">学号3:</view>
</view>
运行截图:
11. flex-shrink
flex-shrink决定了flex items如何收缩。可以设置为任意非负数值(正小数,正整数,0),默认值为1.
当flex items在main axis方向上超过了flex container的size时,flex-shrink属性才会有效。
- 每个item收缩的size为flex items超出flex container的size*收缩比例/所有flex items的收缩比例之和。
- 收缩比例=flex-shrink*flex item的base size
base size 是flex item 放入flex container之前的size - flex items 收缩后的最终size不能小于min-height或者min-width
例:收缩长度计算:
item1: width:100rpx;flex-shrink:1
item2: width:200rpx;flex-shrink:2
item3: width:300rpx;flex-shrink:3
收缩比例:
item1:1001
item2:2002
item3:300*3
item1:100*(1001+2002+3003)
item2:200(1001+2002+3003)
item3:300(1001+2002+300*3)
12. flex-basis
flex-basis用来设置flex item在主轴main axis方向上的base size
取值:
auto(默认值)、content:取决于内容本身大小。
- 决定flex item最终base size的因素,优先级从高到低
max-width、max-height、min-width、min-height
flex-basis
width、height
内容本身
具体内容请看:参考链接视频