微信小程序-Flex 布局是什么

1. 什么是 Flex 布局

Flex 布局是 CSS3 新增的一种弹性布局模型,它的主要作用是为了在不同尺寸和不同设备中,让容器中的子元素能够自动适应并对齐布局。相比传统的盒子模型,在显示方式和排列方式上更加的灵活,可以很好地解决一些传统布局无法解决的一些问题。

2. Flex 布局的基本概念

2.1 重要概念

伸缩容器: 使用 Flex 布局的元素,就是伸缩容器。

伸缩项目: 伸缩容器中的子元素就是伸缩项目。

主轴(main axis):伸缩容器的主要延伸方向就是主轴。

交叉轴(cross axis):伸缩容器的垂直于主轴的方向就是交叉轴。

2.2 布局方向

Flex 布局中包含两个重要属性。

flex-direction: 定义主轴的方向,默认值为 row。

flex-wrap: 定义子元素如何换行,默认值为 nowrap。

/* 水平方向,单行显示,一般情况下不需要设置 */ 

.container {

display: flex;

flex-direction: row;

flex-wrap: nowrap;

}

/* 水平方向,多行显示 */

.container {

display: flex;

flex-direction: row;

flex-wrap: wrap;

}

/* 垂直方向,多行显示 */

.container {

display: flex;

flex-direction: column;

flex-wrap: wrap;

}

/* 垂直方向,单行显示 */

.container {

display: flex;

flex-direction: column;

flex-wrap: nowrap;

}

2.3 对齐方式

Flex 布局中还包含了一些在传统布局中不容易实现的对齐方式,下面介绍这些重要的属性。

justify-content: 定义子元素在主轴上的对齐方式。该属性可接受以下值:

flex-start:默认值,将子元素放置在容器的左端。

flex-end:将子元素放置在容器的右端。

center:将子元素放置在容器的中心。

space-around:子元素会平均分布在容器中,元素周围会存在相同的空间。

space-between:子元素平均分布在容器中,元素之间不存在间隔。

space-evenly:子元素将平均分布在容器中,并且周围间隔相等。

align-items: 定义子元素在交叉轴上的对齐方式。该属性可接受以下值:

stretch:默认值,伸展子元素使其填满该在交叉轴上的剩余空间。

flex-start:将子元素放置在容器的交叉轴起点。

flex-end:将子元素放置在容器的交叉轴结束点。

center:将子元素放置在容器的交叉轴中心位置。

baseline:子元素是按照基线排列。

align-content: 该属性定义了容器中多个行或列在交叉轴上的对齐方式。该属性可接受以下值:

stretch:默认值,各行将会伸展以占据剩余空间。

flex-start:各行将与容器的交叉轴起点对齐。

flex-end:各行将与容器的交叉轴结束点对齐。

center:各行将与容器的交叉轴的中心对齐。

space-between:各行之间平均分布,旁边没有间隔。

space-around:各行之间平均分布,在它们周围存在相同的空间。

3. Flex 布局在小程序中的应用

接下来我们结合小程序应用,来讲解 Flex 布局在小程序中的应用,以解决一些布局问题。

3.1 在小程序中使用 Flex 布局

在小程序中,我们可以通过 view 组件来实现 Flex 布局,下面是一段简单的示例代码:

<view class="container">

<view class="item">A</view>

<view class="item">B</view>

<view class="item">C</view>

</view>

<style>

.container {

display: flex;

justify-content: center;

align-items: center;

}

.item {

width: 100px;

height: 100px;

background-color: #999;

margin: 10px;

border-radius: 5px;

display: flex;

justify-content: center;

align-items: center;

}

</style>

在这段示例代码中,我们首先创建了一个 container 的视图容器,并对该容器应用了 flex 布局,并且将子视图居中对齐。接着我们在该视图容器中添加了三个 item 视图,并为这些 item 视图设置了宽高,并使其在水平方向上居中,最终实现了单行显示的效果。

3.2 动态计算宽度并多行居中显示

在开发中,我们有时需要在一个容器中动态地渲染多个元素,并且要求这些元素在多行居中显示。例如在购物车中需要展示多个商品,由于每个商品的宽度不确定且要求多行居中,传统的布局方式无法满足要求。通过 Flex 布局,可以轻松的实现这一需求。

下面是一段示例代码,通过实现一个商品标签的效果,让我们更好地理解 Flex 布局如何应用于解决布局问题。

<view class="tag">

<view class="tags">

<block wx:for="{{tags}}" wx:key="title" wx:for-item="tag" wx:for-index="index">

<view class="tag-item" style="background-color:{{tag.color}};color:white;">{{tag.title}}</view>

</block>

</view>

</view>

.tag {

display: flex;

flex-wrap: wrap;

padding: 10px;

background-color: #f5f5f5;

border-radius: 5px;

}

.tags {

display: flex;

flex-wrap: wrap;

justify-content: center;

align-items: center;

}

.tag-item {

padding: 5px;

margin: 5px;

font-size: 12px;

line-height: 1;

border-radius: 5px;

}

在这段示例代码中,我们通过一个 tag 容器来实现。首先为 tag 容器应用 Flex 布局,包含两个子元素 tags 和 tag-item。

在 tags 容器中,我们还为其应用了 align-items: center 属性,使其在交叉轴上居中。在 tag-item 中,我们设置了合适的 padding 和 margin,并且为其设置了圆角达到了商品标签的效果。最终实现了多行居中显示的效果。

4. 总结

Flex 布局可以非常方便地对未知尺寸的子元素进行自适应排列,特别适合在移动端和响应式布局中使用。在小程序中,使用 Flex 布局可以方便地解决一些传统布局无法解决的问题。熟悉和掌握 Flex 布局在小程序中的应用,可以极大地提高我们的小程序的开发效率。