微信小程序开发教程(8)- 小程序flex布局详解
深山老妖浏览:2312024-11-28 16:35:57本文累计收益:0我也要赚钱
一、flex布局

Flex布局则是一种新的布局方案,通过为修改父div的display属性,让父元素成为一个flex容器,从而可以自由的操作容器中子元素(项目)的排列方式。

1.容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
2.项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
二、Flex布局声明

Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
任何一个容器都可以指定为 Flex 布局。

.box{
  display: flex;
}

行内元素也可以使用 Flex 布局。

.box{
  display: inline-flex;
}
三、Flex的容器属性

Flex布局的容器属性主要有:flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content。

1、flex-direction属性

flex-direction属性决定主轴的方向(即项目的排列方向)

row(默认值):主轴为水平方向,起点在左端。

<!--pages/contact/contact.wxml-->
<view class="flex-container">
  <view class="flex-item">1</view>
  <view class="flex-item">2</view>
  <view class="flex-item">3</view>
  <view class="flex-item">4</view>
</view>

.flex-container{
  display: flex;
  flex-direction: row;
}
.flex-item{
  width: 100rpx;
  height: 100rpx;
  line-height: 100rpx;
  background-color: #98e1ff;
  border: 1px solid #1d9ace;
  text-align: center;
}

row-reverse:主轴为水平方向,起点在右端。

column:主轴为垂直方向,起点在上沿。

column-reverse:主轴为垂直方向,起点在下沿。

2、flex-wrap属性

flex-wrap属性用于控制项目是否换行。

nowrap(默认):不换行。

<view class="flex-container">
  <view class="flex-item">1</view>
  <view class="flex-item">2</view>
  <view class="flex-item">3</view>
  <view class="flex-item">4</view>
  <view class="flex-item">5</view>
  <view class="flex-item">6</view>
  <view class="flex-item">7</view>
</view>

.flex-container{
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
}
.flex-item{
  width: 200rpx;
  height: 200rpx;
  line-height: 100rpx;
  background-color: #98e1ff;
  border: 1px solid #1d9ace;
  text-align: center;
}

wrap:换行,第一行在上方。

wrap-reverse:换行,第一行在下方。

3、flex-flow属性

flex-flow属性是flex-deriction与flex-wrap属性的简写集合,默认属性为row nowrap,即横向排列,且不换行,如果需要控制项目排列与换行,推荐使用此属性,而非单独写两个。

<view class="flex-container">
  <view class="flex-item">1</view>
  <view class="flex-item">2</view>
  <view class="flex-item">3</view>
  <view class="flex-item">4</view>
  <view class="flex-item">5</view>
  <view class="flex-item">6</view>
  <view class="flex-item">7</view>
</view>

.flex-container{
  display: flex;
  flex-flow: row wrap;
}
.flex-item{
  width: 200rpx;
  height: 200rpx;
  line-height: 100rpx;
  background-color: #98e1ff;
  border: 1px solid #1d9ace;
  text-align: center;
}
4、justify-content属性

justify-content属性用于控制项目在横轴的对齐方式,默认flex-start即左对齐,center 为居中,对应的- - flex-end为右对齐。

flex-start(默认值):左对齐

<view class="flex-container">
  <view class="flex-item">1</view>
  <view class="flex-item">2</view>
  <view class="flex-item">3</view>
  <view class="flex-item">4</view>
</view>

.flex-container{
  display: flex;
  flex-flow: row wrap;
  justify-content: flex-start;
}
.flex-item{
  width: 100rpx;
  height: 100rpx;
  line-height: 100rpx;
  background-color: #98e1ff;
  border: 1px solid #1d9ace;
  text-align: center;
}

center: 居中

space-between:两端对齐,项目之间的间隔都相等。

space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

5、align-items属性

flex-start:交叉轴的起点对齐。

<view class="flex-container">
  <view class="flex-item">1</view>
  <view class="flex-item height1">2</view>
  <view class="flex-item">3</view>
  <view class="flex-item height2">4</view>
</view>

/* pages/contact/contact.wxss */
.flex-container{
  display: flex;
  flex-flow: row wrap;
  justify-content: space-around;
  align-items: flex-start;
}
.flex-item{
  width: 100rpx;
  height: 100rpx;
  line-height: 100rpx;
  background-color: #98e1ff;
  border: 1px solid #1d9ace;
  text-align: center;
}
.height1{
  height: 140rpx;
  line-height: 140rpx;
}
.height2{
  height: 180rpx;
  line-height: 180rpx;
}

flex-end:交叉轴的终点对齐。

center:交叉轴的中点对齐。

baseline: 项目的第一行文字的基线对齐。

stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

6. align-content属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

flex-start:与交叉轴的起点对齐。

<view class="flex-container">
  <view class="flex-item">1</view>
  <view class="flex-item">2</view>
  <view class="flex-item">3</view>
  <view class="flex-item">4</view>
  <view class="flex-item">5</view>
  <view class="flex-item">6</view>
  <view class="flex-item">7</view>
  <view class="flex-item">8</view>
</view>

.flex-container{
  height: 400rpx;
  display: flex;
  flex-flow: row wrap;
  align-items: stretch;
  border: 2px solid #bd0f26;
  align-content:flex-start;
}
.flex-item{
  width: 160rpx;
  height: 150rpx;
  line-height: 150rpx;
  background-color: #98e1ff;
  border: 1px solid #1d9ace;
  text-align: center;
}

flex-end:与交叉轴的终点对齐。

space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

stretch(默认值):轴线占满整个交叉轴。

7.Flex的项目属性

order:属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

<view class="flex-container">
  <view class="flex-item">1</view>
  <view class="flex-item item02">2</view>
  <view class="flex-item">3</view>
  <view class="flex-item item04">4</view>
  <view class="flex-item">5</view>
  <view class="flex-item">6</view>
  <view class="flex-item">7</view>
  <view class="flex-item">8</view>
</view>

.flex-container{
  height: 400rpx;
  display: flex;
  flex-flow: row wrap;
  align-items: stretch;
  border: 2px solid #bd0f26;
  align-content:flex-start;
}
.flex-item{
  width: 160rpx;
  height: 150rpx;
  line-height: 150rpx;
  background-color: #98e1ff;
  border: 1px solid #1d9ace;
  text-align: center;
}
.item02{
  order: 2;
}
.item04{
  order: 1;
}

flex-grow:
属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。
如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

.item02{
  flex-grow:1
}
.item04{
  flex-grow:2
}

flex-shrink:
属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。
如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
负值对该属性无效。


 

评论列表
发表评论
+ 关注