概念
flexible box:弹性盒装布局
容器控制内部元素的布局定位
CSS3引入的新布局模型
伸缩元素,自由填充,自适应
优势
可在不同方向排列元素
控制元素排序的方向
控制元素的对齐方式
控制元素之间等距
控制单个元素放大与缩放比例,占比,对齐方式
常用术语
- flex container
flex容器
- flex item
flex项目(元素)
- flex direction
模型
容器的属性
1、flex-direction
设置flex容器中flex成员项也就是元素的排列方向
- row
从左向右
- row-reverse
从右向左
- column
从上到下
- column-reverse
从下到上
<template>
<view class="container">
<view class="green txt">A</view>
<view class="red txt">B</view>
<view class="blue txt">C</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
@import url("flex-direction.css");
</style>
flex-direction.css
.container{
/* 定义flex容器 */
display: flex;
/* 设置容器内部元素的排列方向
row:从左到右
column:从上到下
*/
/* flex-direction:row; */
flex-direction:column;
}
.txt{
font-size: 20px;
width: 150rpx;
height: 150rpx;
}
.green{
background-color: #007AFF;
}
.red{
background-color: #2C405A;
}
.blue{
background-color: #333333;
}
.text
导入外部样式
<template></template>
<script></script>
<style>
@import url("flex-direction.css");
</style>
2、flex-wrap:使容器内的元素换行
nowrap
元素不会换行,永远会累加在最后一个元素之后
由于元素设置了一定的宽度,此时会进行一些相应的缩放,缩放比例每一个元素都是一致的
wrap
wrap-reverse
逆向换行排序
.container{
/* 定义flex容器 */
display: flex;
/* 设置容器内部元素的排列方向
row:从左到右
column:从上到下
*/
flex-direction:row;
flex-wrap: wrap;
}
3、justify-content
设置元素在主轴上的对齐方式
定义了flex容器中flex成员项在主轴方向上如何排列以处理空白部分,默认为flex-start
主轴的方向是根据flex-direction
来的
.container{
display: flex;
flex-direction:column;
justify-content: center;
}
flex-start
左对齐
flex-end
右对齐
center
居中对齐
space-between
元素与元素之间保留的间隙等分
两端对齐,空白均匀的填充到flex成员项之间
space-around
元素两边平均等分剩余空白间隙部分,最左或者最右和元素之间是1:2的关系
4、align-items
设置元素在交叉轴上的对齐方式
定义了flex容器中flex成员项在纵轴方向上如何排列以处理空白部分,默认为stretch
.container{
display: flex;
flex-direction:row;
height: 800rpx;
background-color: #007AFF;
align-items: stretch;
}
flex-start
在交叉轴上向起点位置(向上/向左)对齐
flex-end
在交叉轴上向结束位置(向下/向右)对齐
center
居中对齐
baseline
基准线,如果元素里有文字,会把文字作为基础线排成一行
<template>
<view class="container">
<view class="green txt" style="height: 200rpx; font-size: 30px;">
A
</view>
<view class="red txt" style="font-size: 10px;">
B
</view>
<view class="blue txt" style=" height:320rpx; font-size: 50px;">
C
</view>
</view>
</template>
-----------------------------------
.container{
display: flex;
flex-direction:row;
height: 800rpx;
background-color: #007AFF;
align-items: baseline;
}
stretch(默认)
如果没有对元素设置高度,那么在交叉轴上会形成拉伸
此时会把元素高度拉到和外部容器高度一样
5、align-content
设置轴线的对齐方式(轴线当做元素)
除了能把元素作为对齐方式排列
也可以把容器内的轴线做为对齐方式的排列
前提是定义多根轴线,多行
当轴线超过1条的时候,flex容器可以把多条轴线视为元素对待,可以进行对齐
flex-direction为column
flex-start
向左对齐
flex-end
向右对齐
center
居中
strech
当宽度width没有设置的时候,轴线可以被拉伸
space-between
两端对齐,元素之间的空白等比切分
space-around
轴线两边的空白等比切分
容器内元素的属性
1、order
用于设置flex容器内部每个元素的排列顺序,默认值是0
排序规则由小到大
.green{
background-color: green;
order: 3;
}
.red{
background-color: red;
order: 2;
}
.blue{
background-color: blue;
order: 1;
}
2、flex-grow
用于设置元素放大比例,默认值是0,为0则不放大
前提是有空间
.green{
background-color: green;
/* order: 3; */
flex-grow: 1;
}
.red{
background-color: red;
/* order: 2; */
flex-grow: 2;
}
.blue{
background-color: blue;
/* order: 1; */
flex-grow: 1;
}
3、flex-shrink
用于设置元素缩放比例,默认值是0,为0则不缩小
写负值是没有效果的
前提是当前轴线元素撑满了
.green{
background-color: green;
/* order: 3; */
/* flex-grow: 1; */
flex-shrink: 0;
}
4、flex-basis
设置元素固定或自动空间的占比
不需要有前提条件就可以设置元素的空间占比,可以放大,可以缩小
.green{
background-color: green;
/* order: 3; */
/* flex-grow: 1; */
flex-shrink: 0;
flex-basis: 300rpx;
}
5、align-self
重写align-items
父属性
重写容器中元素在交叉轴上的对齐方式
默认是auto,表示继承父级元素的align-item属性
.red{
background-color: red;
align-self: flex-start;
}
flex-start
在交叉轴上向起点位置(向上/向左)对齐
flex-end
在交叉轴上向结束位置(向下/向右)对齐
center
居中对齐
baseline
基准线,如果元素里有文字,会把文字作为基础线排成一行
stretch
如果没有对元素设置高度,那么在交叉轴上会形成拉伸
此时会把元素高度拉到和外部容器高度一样