前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序实战开发六:使用weui-flex创建一个可自由配置的布局组件。

微信小程序实战开发六:使用weui-flex创建一个可自由配置的布局组件。

作者头像
睿儿网络郝刚
发布2020-09-08 11:09:35
2.1K0
发布2020-09-08 11:09:35
举报

个人认为 weui-flex 在小程序布局方面发挥了重大的作用。为开发人员提供了极其便利的布局环境,尤其对于我们我种代码怪来说,前端布局很多时候是有一些困难的,但有了weui-flex页面布局从此不在是问题 。

先介绍一下flex应用:百度查了一下发现在一篇文章地址(http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html)

这里面介绍了 Flex 布局教程 只要认真研究一下 Flex 的各种属性。相信你也会变成布局高手。

2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为 Flex 布局。只要将它的 display属性设置为 flex / inline-flex / -webkit-flex; /* Safari */ 这样就可以了。

需要注意的是:设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

在小程序开发者工具里面,我们可以看到默认的 weui-flex 它设置的 display 属性。

flex有六个属性设置可以用在容器上

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

值有:flex-direction: row | row-reverse | column | column-reverse;

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

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

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

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

flex-wrap 默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

值有:flex-wrap: nowrap | wrap | wrap-reverse;

nowrap(默认):不换行。

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

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

flex-flow flex-flow 属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。

flex-flow: flex-direction> || flex-wrap;

justify-content 属性定义了项目在主轴上的对齐方式。

值有:justify-content: flex-start | flex-end | center | space-between | space-around;

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

flex-end:右对齐

center:居中

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

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

align-items 属性定义项目在交叉轴上如何对齐。

值有:align-items: flex-start | flex-end | center | baseline | stretch;

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

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

center:交叉轴的中点对齐。

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

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

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

align-content: flex-start | flex-end | center | space-between | space-around | stretch;

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

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

center:与交叉轴的中点对齐。

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

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

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

另外还有六个项目属性 :

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

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

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

flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

flex 属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

align-self: auto | flex-start | flex-end | center | baseline | stretch;

搞明白布局之后,我们就可以开始动手制作,把FLEX做成可动态调用的组件。这样以后使用的时候就方便很多了。

第一步:建立 flex 组件

第二步:配置 组件信息

wxml文件,默认的weui-flex在小程序里面有默认样式不用管,我们把单个列表 flexitem 和 图标 fleximg 文本 flextext这几项设置为自定义的CSS,其它几个参数就是数组 内容。

代码语言:javascript
复制
<view class="weui-flex" >
      <view class="weui-flex__item" wx:for="{{Flexs}}" wx:key="id">
        <view class="{{FlexItem}}"  bindtap="flexLink" data-linktype="{{item.LinkType}}" data-url="{{item.LinkUrl}}">
          <image class="{{FlexImg}}" src="{{item.IconUrl}}"/>
          <view> 
            <text class="{{FlexText}}">{{item.IconText}}</text>
          </view>
        </view>
      </view>
</view>

js文件:options里面的 addGlobalClass 这个很重要,设置了这个为true之后才可以使用外部CSS,这样才能满足我们设想的需求,在调用组件的页面直接调用flex组件,然后通过传值把在CSS文件中设置的几个样式文件名传进去。这样就可以实现在调用页面自由控制展示样式。满足不同布局的需求。

代码语言:javascript
复制
Component({
  options: {
    addGlobalClass: true,
  },
  //上面 addGlobalClass: true 设置了可以使用外部CSS,这样就可以内外配合起来用了。
  /**
   * 组件的属性列表
   */
  properties: {
    FlexItem: String,
    FlexImg: String,
    FlexText: String,
    Flexs: Array
  },

第三步:在页面中引用,引用的时候可以把我们定义的CSS样式名称及数组内容传进去。

<my-flex FlexItem="flexList" FlexImg="flexIcon" FlexText="FlexText" Flexs="{{indexFlex1}}"></my-flex>

传了内容之后效果就完成了。

我们制作了一个 两行 三列的布局,并配合图标及文字完成了一个小导航设置。

总结:flex布局功能很强大,在小程序开发过程中确实可以减少很多开发时长。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 睿儿网络技术公社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档