微信小程序开发实战-第二周

第二周

2. flex弹性布局

作图工具https://www.processon.com/

2.1 了解弹性布局

Flex 是 Flexible Box 的缩写,意为"弹性布局",可以轻松的控制元素排列、对齐和顺序的控制。

现在的终端类型非常多,使用弹性盒模型可以让元素在不同尺寸终端控制尺寸。

主轴交叉轴

justify-content主轴的对齐方式

align-items交叉轴的对齐方式

声明定义

容器盒子里面包含着容器元素,使用 display:flexdisplay:inline-flex 声明为弹性盒子。

声明块级弹性盒子

display:flex

声明内联级弹性盒子

display:inline-flex

flex-direction

用于控制盒子元素排列的方向。

描述
row 从左到右水平排列元素(默认值)
row-reverse 从右向左排列元素
column 从上到下垂直排列元素
column-reverse 从下到上垂直排列元素

flex-wrap

flex-wrap 属性规定flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。

选项 说明
nowrap 元素不拆行或不拆列(默认值)
wrap 容器元素在必要的时候拆行或拆列。
wrap-reverse 容器元素在必要的时候拆行或拆列,但是以相反的顺序

行元素换行

水平排列反向换行

垂直元素换行

垂直元素反向换行

flex-flow

flex-flowflex-directionflex-wrap 的组合简写模式。

justify-content

用于控制元素在主轴上的排列方式,再次强调是主轴的排列方式。

选项 说明
flex-start 元素紧靠主轴起点
flex-end 元素紧靠主轴终点
center 元素从弹性容器中心开始
space-between 第一个元素靠起点,最后一个元素靠终点,余下元素平均分配空间
space-around 每个元素两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍
space-evenly 元素间距离平均分配

水平排列元素,并使用 justify-content: flex-end 对齐到主轴终点

使用 space-evenly 平均分配容器元素

align-items

用于控制容器元素在交叉轴上的排列方式。

选项 说明
stretch 元素被拉伸以适应容器(默认值)
center 元素位于容器的中心
flex-start 元素位于容器的交叉轴开头
flex-end 元素位于容器的交叉轴结尾

拉伸适应交叉轴

如果设置了 width | height | min-height | min-width | max-width | max-height ,将影响stretch 的结果,因为 stretch 优先级你于宽高设置。

对齐到交叉轴的顶部

对齐到交叉轴底部

对齐到交叉轴中心

纵向排列时交叉轴排列

align-content

只适用于多行显示的弹性容器,它的作用是当flex容器在交叉轴上有多余的空间时,对元素的对齐处理。

选项 说明
stretch 将空间平均分配给元素
flex-start 元素紧靠主轴起点
flex-end 元素紧靠主轴终点
center 元素从弹性容器中心开始
space-between 第一个元素靠起点,最后一个元素靠终点,余下元素平均分配空间
space-around 每个元素两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍
space-evenly 元素间距离平均分配

水平排列在交叉轴中居中排列

align-self

用于控制单个元素在交叉轴上的排列方式,align-items 用于控制容器中所有元素的排列,而 align-self 用于控制一个弹性元素的交叉轴排列。

选项 说明
stretch 将空间平均分配给元素
flex-start 元素紧靠主轴起点
flex-end 元素紧靠主轴终点
center 元素从弹性容器中心开始

flex-grow

用于将弹性盒子的可用空间,分配给弹性元素。可以使用整数或小数声明。

例如为三个DIV 弹性元素设置了1、3、6 ,即宽度分成10等份,第三个元素所占宽度为(宽度/(1+3+6)) X 6

如果弹性元素设置了宽度,将把(弹性盒子-弹性元素宽度和)后按照 flex-grow 进行分配 。

flex-shrink

flex-grow 相反 flex-shrink 是在弹性盒子装不下元素时定义的缩小值。

例如在600宽的弹性盒子中放了 1000 宽的弹性元素。并为最后两个元素设置了缩放,最后一个元素的缩放比例为 500 -( ( (1000-600) / (100X1+400x3+500X6) ) x 3 ) X 500 = 220.9,计算公式说明如下:

缩小比例 = 不足的空间 / (元素 1 宽度 x 缩小比例) + (元素 2 宽度 x 缩小比例) ...
最终尺寸 = 元素三宽度 - (缩小比例 x  元素 3 的宽度) X 元素宽度

flex-basis

flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。

可以是长度单位,也可以是百分比。flex-basis的优先级高于width、height属性。

优先级

flex-basis 优先级大于 width、height。

flex

flex是flex-grow、flex-shrink 、flex-basis缩写组合。

建议使用 flex 面不要单独使用 flex-grow / flew-shrink / flex-basis 。

下例定义平均分配剩余空间,并不进行尺寸缩小,基础尺寸为200px。

order

用于控制弹性元素的位置,默认为 order:0 数值越小越在前面,可以负数或整数。

下面是通过J动态改变order属性产生移动效果,因为本章节是讲CSS所以JS功能没有完善,只是体验一下order。

3.项目开发阶段

组件开发

新建components目录用于存放所有组件

VsCode中推荐使用wxapp-helperwechat-snippet插件,快速开发

like组件

新建一个组件like 点赞小红心组件

在页面的JSON文件中配置使用的组件

接收一个JSON对象

引用组件

引用v-like组件,使用绝对路径

"usingComponents": {
   "v-like": "/components/like/index"}
使用组件
<v-like />

like目录下新建images,用于存储组件所用的图片

小程序中像素单位pxrpx,

iPhone6下为二倍换算关系

新建app.wxss文件,定义全局样式

  • 组件只能继承部分全局样式
  • 页面可以继承全局样式
  • 组件最好不要留有空隙
组件代码
<view class="container">
  <image src="images/like.png" />
  <text>
    9
  </text>
</view>
.container {
   
    display: inline-flex;
    flex-direction: row;
    padding: 10rpx;
}
.container image {
   
    width: 32rpx;
    height: 28rpx;
}
.container text {
   
    font-size: 24rpx;
    color: #bbbbbb;
    line-height: 24rpx;
    position: relative;
    bottom: 30rpx;
    left: 6rpx;
}
组件事件与事件处理-状态切换

bind:tap="onLike"定义点击

index.js中的methods中定义处理函数

数据来源的三种方式

  1. 直接写在WXML
  2. JS中获取
  3. 从服务器获取
数据绑定

数据定义在data

三元表达式
like?count1:count2

使用三元表达式来实现点赞与不点赞的效果

组件的封装性开放性及粒度

开放数据,开发数据

properties组件的属性列表

like: {
   
    type: Boolean,
        value: false,
            observer: function () {
   

            }
}
// components/like/index.js
Component({
   
  /** * 组件的属性列表 */
  properties: {
   
    like: {
   
      type: Boolean,
      value: false,
      observer: function () {
   
        
      }
    },
    count: {
   
      type: Number
    }
  },

  /** * 组件的初始数据 */
  data: {
   
    // 点赞数据绑定
    count: 99,
    like: false
  },

  /** * 组件的方法列表 */
  methods: {
   
    onLike: function (event) {
   
      let like = this.properties.like
      let count = this.properties.count

      count = like?count-1:count+1 
      this.setData({
   
        count: count,
        like: !like
      })
    }
  }
})
全部评论

相关推荐

勤奋努力的椰子这就开摆:美团骑手在美团工作没毛病
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务