微信小程序-flex布局

微信小程序api文档地址

1.微信小程序中flex布局的使用:

wxml页面布局代码:

<!-- flex容器的使用 
  flex 元素属性详解
      1.flex-grow 当有多余空间时,元素的放大比例 类似android中的权重
      2.flex-shrink 当空间不足时,元素的缩小比例 
      3.flex-basis元素在主轴上占据的空间 
      4.flex 是grow、shrink、basis的简写 
      5.order定义元素的排列顺序(默认值为0)
      6.align-self定义元素自身的对齐方式
      
  flex 容器属性详解
      1.flex-direction决定元素的排列方向 
      2.flex-wrap决定元素如何换行(排列不下时) 
      3.flex-flow flex-direction 和 flex-wrap 的简写 
      4.justify-content元素在主轴上的对齐方式 
      5.align-items元素在交叉轴的对齐方式
-->

<view class="container">
    <!-- order定义元素的排列顺序(默认值为0) -->
    <view class='item' style='order:3'>
      1
    </view>

    <view class='item' style='order:2'>
      2
    </view>

    <!-- 添加多个样式 -->
    <view class='item i3' style='order:1'>
      3
    </view>

    <view class='item'>
      4
    </view>

    <view class='item' style='order:-1'>
      5
    </view>

    <view class='item'>
      6
    </view>

</view>

wxss样式代码:

/* 编写一个样式 */
.container{
  /* 相对父容器的百分比 */
  height: 100%;
  width: 100%;
  /* position:控件定位的方式 
        fixed:代表不受其他控件的位置控件,想到哪就到哪
        static : 这个默认值 ,即按照写代码顺序的位置一个个的排列 */
  position: fixed;
  background-color: #eeeeee;
  display: flex;
  /* 设置排列方向  横向或者纵向*/
  flex-direction: row;
  /* flex-direction: column; */

  /* nowrap:排列不下时不换行
     wrap 排列不下时 换行
     wrap-reverse 翻转,跟wrap相反的排列*/
  flex-wrap: wrap;

  /* justify-content:在主轴的对其方式
        center:居中对齐(item是挨着的)
        flex-end:右边对齐(item是挨着的)
        flex-start:左边对齐(item是挨着的)
        space-around:item平分在主轴上占用的空间
        space-between:间隙平分剩余空间*/
  justify-content: flex-start;

  /* align-items:在交叉轴上的对齐方式,比如上面指的是横轴,这里指的就是纵轴
        flex-start: 顶部对齐
        flex-end: 底部对齐
        stretch: 当item的高度没写时,item会占据整个父容器
        baseline: 文本的基准线对齐*/
  align-items: flex-start;

}

.item{
  /* rpx是微信独有的像素单位,与px不同的是 rpx会根据手机不同的分辨率自动改变大小,意思就是rpx的值是一个动态的 */
  width: 100rpx;
  height: 100rpx;
  background-color: #6699ff;
  /* 1像素的红色边框 */
  border: 10px solid #ff0000;

  /* flex-grow: 当有多余空间时,元素的放大比例  */
  flex-grow:1;
  /* flex-shrink 当空间不足时,元素的缩小比例  */
  flex-shrink: 1;

  /* flex: 0 1 200rpx;是对下面三个的简写
      flex-grow:0;
      flex-shrink: 1; 
      flex-basis:200rpx;*/
  /* flex: 0 1 200rpx; */

  /* 自身的对齐方式(相对父容器)
      flex-start
      flex-end
      center */
  align-self: flex-start;
}

.i3{
  display: flex;
  align-items: flex-end;
  /* 元素在主轴上占据的空间 */
  flex-basis:200rpx;
}

根据上面的样式可以自由搭配写出很多种布局效果。

例子:

 html

<view class="container">
  <!-- 第一部分 -->
  <view class='userInfo'>
    <image src="http://img0.imgtn.bdimg.com/it/u=2389233764,618229678&fm=26&gp=0.jpg" style='height:100rpx;width:100rpx'></image>
    <text class='content'>用户名</text>
  </view>

  <!-- 第二部分 -->
  <view style="margin-top: 10px;margin-bottom: 10px;">
    <text class='title'>这是标题</text>
  </view>

  <!-- 第三部分 -->
  <view class='bottom'>
    <text class='content'>10条评论</text>  <text class='content'>节点</text>
  </view>

</view>

 css代码

/**index.wxss**/
.container {
  display: flex;
  flex-direction: column;
  border: 2px solid #ff0000;
}

.title{
  font-size: 25px;
  color: #ff0000;
  justify-content: center;
  display: flex;
}

.userInfo{
  display: flex;
  align-items: center;
}

.content{
  font-size: 18px;
  color: #000000;
  border: 2px solid #ffff00;
}

.bottom {
  display: flex;
  justify-content: space-between;
}

效果图:

 

 

2.相对定位与绝对定位-position的使用:

position: 设置定位方式
  fixed:代表不受其他控件的位置控件,想到哪就到哪(填满自己的空间)
  static : 这个默认值 ,即按照写代码顺序的位置一个个的排列
  relative 相对定位 (占用自身的位置) 相对自身进行定位,参照物是自己
  absolute 绝对定位 (不会占用自身的位置),以离他最近的已经定位的父级元素为参考,父容器的定位方式可以是absolute、relative、fixed

 

测试例子:

wxml布局文件如下:

<view class="container">

    <view class='item'>
      1
    </view>

    <!-- 注意这里使用的样式2 -->
    <view class='item2'>
      2
    </view>

    <view class='item'>
      3
    </view>

    <view class='item'>
      4
    </view>

</view>

wxss样式代码如下:

/* 编写一个样式 */
.container{
  height: 100%;
  width: 100%;
  position: fixed;
  background-color: #eeeeee;
  display: flex;
  /* 设置排列方向  横向或者纵向*/
  flex-direction: column;

}

.item{
  width: 200rpx;
  height: 200rpx;
  background-color: #6699ff;
  /* 1像素的白色边框 */
  border: 5px solid #ffffff;
}

.item2{
  width: 200rpx;
  height: 200rpx;
  background-color: #ffff00;
  border: 5px solid #ff0000;
}

效果图:

在上面的基础上改变item2的样式,设置相对定位,如下:

.item2{
  width: 200rpx;
  height: 200rpx;
  background-color: #ffff00;
  border: 5px solid #ff0000;

  /* position: 设置定位方式
        relative 相对定位 */
  position: relative;
  left: 50rpx; /*相对自己左边偏移50个像素*/
  top:50rpx; /*相对自己上面偏移50个像素*/
}

效果图:

如果改成绝对定位,如下:

.item2{
  width: 200rpx;
  height: 200rpx;
  background-color: #ffff00;
  border: 5px solid #ff0000;

  /* position: 设置定位方式
        relative 相对定位 (占用自身的位置)
        absolute 绝对定位 (不会占用自身的位置)*/
  position: absolute;
  left: 50rpx; /*相对自己左边偏移50个像素*/
  top:50rpx; /*相对自己上面偏移50个像素*/
}

效果图:

将父级元素设置成绝对定位,样式代码如下:

/* 编写一个样式 */
.container{
  height: 100%;
  width: 100%;

  /* 设置绝对定位,如果没有已经定位了的父级元素就会以屏幕来定位 */
  position: absolute;
  top: 100rpx;
  left: 100rpx;

  background-color: #eeeeee;
  display: flex;
  /* 设置排列方向  横向或者纵向*/
  flex-direction: column;

}

.item{
  width: 200rpx;
  height: 200rpx;
  background-color: #6699ff;
  /* 1像素的白色边框 */
  border: 5px solid #ffffff;
}

.item2{
  width: 200rpx;
  height: 200rpx;
  background-color: #ffff00;
  border: 5px solid #ff0000;

  /* position: 设置定位方式
        relative 相对定位 (占用自身的位置)
        absolute 绝对定位 (不会占用自身的位置),以离他最近的已经定位的父级元素为参考*/
  position: absolute;
  left: 50rpx; /*相对自己左边偏移50个像素*/
  top:50rpx; /*相对自己上面偏移50个像素*/
}

效果图:

如果取消父级元素的绝对定位代码,如下:

/* 编写一个样式 */
.container{
  height: 100%;
  width: 100%;

  /* 改成不使用绝对定位,所以级元素就没有了参考 */
  margin-left: 100rpx;
  margin-top: 100rpx;

  background-color: #eeeeee;
  display: flex;
  /* 设置排列方向  横向或者纵向*/
  flex-direction: column;

}

.item{
  width: 200rpx;
  height: 200rpx;
  background-color: #6699ff;
  /* 1像素的白色边框 */
  border: 5px solid #ffffff;
}

.item2{
  width: 200rpx;
  height: 200rpx;
  background-color: #ffff00;
  border: 5px solid #ff0000;

  /* position: 设置定位方式
        relative 相对定位 (占用自身的位置)
        absolute 绝对定位 (不会占用自身的位置),以离他最近的已经定位的父级元素为参考*/
  position: absolute;
  left: 50rpx; /*相对自己左边偏移50个像素*/
  top:50rpx; /*相对自己上面偏移50个像素*/
}

效果图:

设置父级布局为相对定位,子级的绝对定位就可以用父级当参考了:

/* 编写一个样式 */
.container{
  height: 100%;
  width: 100%;

  margin-left: 100rpx;
  margin-top: 100rpx;

  position: relative;/* 设置定位方式为relative 或者是 fixed,这样子级元素的绝对定位就有效了 */

  background-color: #eeeeee;
  display: flex;
  /* 设置排列方向  横向或者纵向*/
  flex-direction: column;

}

.item{
  width: 200rpx;
  height: 200rpx;
  background-color: #6699ff;
  /* 1像素的白色边框 */
  border: 5px solid #ffffff;
}

.item2{
  width: 200rpx;
  height: 200rpx;
  background-color: #ffff00;
  border: 5px solid #ff0000;

  /* position: 设置定位方式
        relative 相对定位 (占用自身的位置) 相对自身进行定位,参照物是自己
        absolute 绝对定位 (不会占用自身的位置),以离他最近的已经定位的父级元素为参考*/
  position: absolute;
  left: 50rpx; /*相对自己左边偏移50个像素*/
  top:50rpx; /*相对自己上面偏移50个像素*/
}

效果图:

 

posted @ 2018-12-04 14:20  ts-android  阅读(651)  评论(0编辑  收藏  举报