flex布局实现上下固定,中间滑动的布局方式

例如这样的一个页面,希望有个头图,有个底部的底栏,中部内容区域可滑动。

简单介绍一下如何实现:

    固定头部和尾部,中间部分可滑动,使用flex布局
    1.设置html,body高度为100%
    2.设置最外层div的布局方式为弹性布局display:flex;
    3.设置最外层div的主轴方向为flex-direction: column;主轴为垂直方向,起点在上沿
        row(默认值):主轴为水平方向,起点在左端。
        row-reverse:主轴为水平方向,起点在右端。
        column:主轴为垂直方向,起点在上沿。
        column-reverse:主轴为垂直方向,起点在下沿。
    4.设置最外层div的高度为100%
    5.正常写头部样式
    6.正常写尾部样式
    7.中间样式为    flex: 1;    overflow: hidden;
      或者overflow:auto;-webkit-overflow-scrolling: touch后者在ios手机中滑动会有问题,建议使用插件

 html部分:

  <div class="main-warp">
    <div class="header">
      <img src="imgurl" class="header-img" alt>
    </div>
    <div class="content">
      <div class="content-scroll">
        <div class="shop-box">
          <img src="imgurl" alt>
        </div>
        <div class="shop-box">
          <img src="imgurl" alt >
        </div>
        <div class="shop-box">
          <img src="imgurl" alt >
        </div>
        <div class="shop-box">
          <img src="imgurl" alt >
        </div>
      </div>
    </div>
    <div class="footer"></div>
  </div>

js部分:

<script>
import BScroll from 'better-scroll'
export default {
  data () {
    return {
      
    }
  },

  components: {
  },
  methods: {

  },

  computed: {

  },

  mounted () {
    this.$nextTick(function () {
      /* eslint-disable no-new */
      let pageBottom = document.querySelector('.content')
      new BScroll(pageBottom, { click: true })
    })
  },
  created () {
  }
}
</script>

样式部分:

<style lang="less"  rel="stylesheet/less" type="text/less">
@r: 100;
// 固定头部和尾部,中间部分可滑动,使用flex布局

// html,
body {
  background: url("//storage.jd.com/1901/04nianhuojie/02lingquanbg_02.png")
    repeat-y;
  background-size: 100%;
  height: 100%;
}
.main-warp {
  max-width: 750px;
  min-height: 100%;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  .header {
    height: 500rem / @r;
    .header-img {
      height: 500rem / @r;
    }
  }
  .content {
    flex: 1;
    width: 100%;
    overflow: hidden;
    // overflow: auto;
    // -webkit-overflow-scrolling: touch;
    .shop-box {
      margin: 50rem / @r 0;
      img {
        width: 106rem / @r;
      }
    }
  }
  .footer {
    background: url("//storage.jd.com/1901/04nianhuojie/fixbtnbg_02.png") repeat;
    background-size: 12rem / @r 11rem / @r;
    height: 82rem / @r;
    width: 100%;
    bottom: 0;
    color: #ffdeb8;
    font-size: 34rem / @r;
    line-height: 82rem / @r;
    text-align: center;
    font-weight: bolder;
    max-width: 750px;
  }
}

</style>

 

说明一下,在移动端,如果直接使用

overflow: auto;

-webkit-overflow-scrolling: touch;

的话 ,在ios上,如果手指滑动超出了盒子的区域,那么很容易再次滑动的时候,导致区域不能滑动的问题,那样子就好像是手指没有点到那个盒子一样,所以这里使用了BScroll插件,使用IScroll也是一样的。

 

 

他的最终效果就是把content的直接子元素加了transition效果。

在此记录该布局方式

注:注意  这种布局方式在ios9.3及其以下版本不兼容,flex布局在需要兼容低版本ios时还是需要慎用的哦

 

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值