h5 css 瀑布流圖片展示

在H5的圖片佈局中,我們經常遇到容器盒子一致但圖片大小不一的情況,如果僅僅展示一列的話,則可以通過調整圖片寬度100%來佈局,但是如果有二列呢,我們使用css3的column-count屬性分列

demo查看:https://my.weblf.cn/alone_page/pages/falls_img.html

全部代碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1,user-scalable=no,target-densitydpi=400" >
  <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
  <meta http-equiv="Pragma" content="no-cache" />
  <meta http-equiv="Expires" content="0" />
  <title>vue的瀑布流圖片展示</title>
  <link rel="stylesheet" href="../statics/css/reset.css" id='reset'>
  <link rel="stylesheet/less" type="text/css" href="../statics/css/falls_img.less?ver=1">
  <script type="text/javascript" src="../statics/js/public.js?ver=2" id='public'></script>
  <script type="text/javascript" src="../statics/js/less2.5.3.min.js" id='less'></script>
  <script type="text/javascript" src="../statics/js/vue2.6.11.js"></script>
  <!-- mint-ui -->
  <link rel="stylesheet" href="https://unpkg.com/mint-ui/lib/style.css">
  <script src="https://unpkg.com/mint-ui/lib/index.js"></script>
</head>
<body>
  <div id="app" v-cloak :style="{'padding-top':isWeiXin?'0rem':'3rem'}">
    <!-- 頭部 -->
    <div class="now_page_head" ref="now_page_head" v-if="!isWeiXin">
      vue的瀑布流圖片展示
      <img src="../statics/images/back.png" class="back"/>
    </div>
    <!-- 頁面的主要內容 -->
    <section class="content">
      <div class="olist">
        <div class="img_box_outer">
          <div class="img_box" @click="get_ele($event)" />
          <img src="../statics/images/falls_img1.jpg">
          </div>
        </div>
        <div class="img_box_outer">
          <div class="img_box" @click="get_ele($event)" />
          <img src="../statics/images/falls_img3.jpg">
          </div>
        </div>
        <div class="img_box_outer">
          <div class="img_box" @click="get_ele($event)" />
          <img src="../statics/images/falls_img2.jpg">
          </div>
        </div>
        <div class="img_box_outer">
          <div class="img_box" @click="get_ele($event)" />
          <img src="../statics/images/falls_img4.jpeg">
          </div>
        </div>
        <div class="img_box_outer">
          <div class="img_box" @click="get_ele($event)" />
          <img src="../statics/images/falls_img5.png">
          </div>
        </div>
        <div class="img_box_outer">
          <div class="img_box" @click="get_ele($event)" />
          <img src="../statics/images/falls_img6.jpg">
          </div>
        </div>
      </div>
    </section>

    <!-- 圖片預覽 -->
    <transition name="fade">
      <div class="img_prew" v-if="is_show_img_prew" @click="is_show_img_prew=false">
        <img :src="img_prew_src" class="img_prew_img" />
      </div>
    </transition>

    <!-- 頁面結束 -->
  </div>
</body>

<script>
  var vm = new Vue({
    el: '#app',
    data: {
      showSpinner: false,
      isWeiXin: window.TS_WEB.isWeiXin,
      isApps: window.TS_WEB.isApp,
      img_prew_src:'', //圖片預覽地址
      is_show_img_prew:false
    },
    components: {},
    computed: {},
    methods: {
      get_ele(event){
        let el = event.target
        let el_name=event.target.nodeName.toLowerCase()
        if(el_name=='img'){
          let el_src=el.src
          this.img_prew_src=el_src
          this.is_show_img_prew=true
        }
      },
    },
    created() {
      document.title='vue的瀑布流圖片展示'
    }
  })
</script>
<style>
</style>
</html>

css:

#app {
  width: 100%;
  height: 100%;
  overflow: hidden;
  background: rgba(245, 245, 245, 1);
  position: relative;
  box-sizing: border-box;
  overflow: hidden;
  padding-top: 3rem;
  height: 100%;
  padding-bottom: 0;
  //頭部
  .now_page_head {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 3rem;
    text-align: center;
    font-size: 1.27rem;
    line-height: 3rem;
    z-index: 11;
    transition: all 0.5s ease;
    background: #fff;
    .back {
      height: 1rem;
      position: absolute;
      left: 1rem;
      top: 1rem;
    }
    .seting {
      height: 1.2rem;
      position: absolute;
      right: 1rem;
      top: 0.9rem;
    }
    .share {
      position: absolute;
      right: 1rem;
      top: 0rem;
      line-height: 3rem;
      font-size: 1rem;
    }
  }
  // 圖片預覽
  .img_prew{
    position: fixed;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    z-index: 10;
    background: rgba(0, 0, 0, 0.8);
    .img_prew_img{
      width: 100%;
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
    }
  }
  // 內容區
  .content {
    background: #ededed;
    height: 100%;
    padding-bottom: 0;
    width: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    .olist{
      padding-bottom: 2rem;
      -moz-column-count: 2; /* Firefox */
      -webkit-column-count: 2; /* Safari �� Chrome */
      column-count: 2;      /* 將 div 元素中的文本分爲2列,並規定列間1rem像素的間隔。 */
      -moz-column-gap: 1rem;
      -webkit-column-gap: 1rem;
      column-gap: 1rem;
    }
    .img_box_outer{
      -webkit-column-break-inside:avoid;
      margin: 0 0 1rem 0;
      -moz-page-break-inside: avoid;
      -webkit-column-break-inside: avoid;
      break-inside: avoid;   /*break-inside: avoid; 避免元素內部斷行併產生新列*/
      position: relative;
      border-radius:0.5rem;
      overflow: hidden;
      .img_box{
        width: 100%;
        img{
          width: 100%;
          border-radius: 0.5rem;
        }
      }
    }
  }
}

 結果預覽:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章