小程序:布局方法Flex简介

来自CloudWiki
跳转至: 导航搜索

如果之前你接触过网页开发中的flexbox布局,基本上你可以略过这节。但有一点需要注意的是,你的小程序要求兼容到iOS8以下版本,需要开启样式自动补全。开启样式自动补全,在“设置”—“项目设置”—勾选“上传代码时样式自动补全”。

Wx4-2.png

图4-2 开发者工具开启样式自动补全

在小程序开发中,我们需要考虑各种尺寸终端设备上的适配。在传统网页开发,我们用的是盒模型,通过display:inline | block | inline-block、 position、float来实现布局,缺乏灵活性且有些适配效果难以实现。比如像下面这种常见的信息列表,要求内容高度不确定下保持垂直居中:

Wx4-3.png

​图4-3 常见的信息列表排版方式

这种情况下,我们更建议用flex布局。

在开始介绍flex之前,为了表述方便,我们约定以下术语:采用flex布局的元素,简称为“容器”,在代码示例中以container表示容器的类名。容器内的元素简称为“项目”,在代码示例中以item表示项目的类名。

Wx4-4.png

图4-4 container容器和item项目


基本概念

flex的概念最早是在2009年被提出,目的是提供一种更灵活的布局模型,使容器能通过改变里面项目的高宽、顺序,来对可用空间实现最佳的填充,方便适配不同大小的内容区域。

在不固定高度信息的例子中,我们只需要在容器中设置以下两个属性即可实现内容不确定下的垂直居中。


.container{

  display: flex;

  flex-direction: column;

  justify-content: center;

}

flex不单是一个属性,它包含了一套新的属性集。属性集包括用于设置容器,和用于设置项目两部分。


设置容器的属性有:


display:flex;

flex-direction:row(默认值) | row-reverse | column |column-reverse

flex-wrap:nowrap(默认值) | wrap | wrap-reverse

justify-content:flex-start(默认值) | flex-end | center |space-between | space-around | space-evenly

align-items:stretch(默认值) | center  | flex-end | baseline | flex-start

align-content:stretch(默认值) | flex-start | center |flex-end | space-between | space-around | space-evenly

设置项目的属性有:


order:0(默认值) | <integer>

flex-shrink:1(默认值) | <number>

flex-grow:0(默认值) | <number>

flex-basis:auto(默认值) | <length>

flex:none | auto | @flex-grow @flex-shrink @flex-basis

align-self:auto(默认值) | flex-start | flex-end |center | baseline| stretch


在开始介绍各个属性之前,我们需要先明确一个坐标轴。默认的情况下,水平方向的是主轴(main axis),垂直方向的是交叉轴(cross axis)。

Wx4-5.png

图4-5 默认情况下的主轴与交叉轴

项目是在主轴上排列,排满后在交叉轴方向换行。需要注意的是,交叉轴垂直于主轴,它的方向取决于主轴方向。

Wx4-6.png

图4-6 项目是在主轴上排列,排满后在交叉轴方向换行

接下来的例子如无特殊声明,我们都以默认情况下的坐标轴为例。