集點送紅利 已發佈 2019-10-22

蛤? 不規則排版 ( vue - masonry )

先來上圖好了…
這是 The F2E 第七關聊天室 edith.hsu 大大設計的,說真的當初在挑設計稿的時候,覺得超好看就直接切下去了。

image

做到這頁我才發現,當我動態新增一個聊天室的時候,「 根據內容多寡 」到底該排哪邊好...


Vue - masonry

這邊介紹一款套件,有關這種瀑布排版的困擾,交給他就 ok 了。
如下圖,masonry 會自己計算,並直接丟去高度最低的那一行!

DEMO NPM

image

另外也有用 jQuery 操作的版本,可以到官網了解看看。


食用步驟

  1. 在終端機打下指令並安裝:

     $ npm install vue-masonry --save
    
     // 另外也有 CDN 版本:
     <script async defer src="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.0.0/masonry.pkgd.min.js"></script>
  2. 在 entry ( main.js ) 檔案中 import 並使用 ( 使用 CDN 則跳過 )

     import {VueMasonryPlugin} from 'vue-masonry';
    
     Vue.use(VueMasonryPlugin)
  3. 範例碼:

     <div v-masonry="containerId" transition-duration="0.3s" item-selector=".item">
         <div v-masonry-tile class="item" v-for="(item, index) in blocks">
            <!-- block item markup -->
         </div>
     </div> 

    這邊該注意得是,父層一定要下 v-masonry 屬性,子層則是 v-masonry-tile 不然他不會理你哦!

屬性

    item-selector=".item" // DOM 元素選擇器,官方建議一定要綁定子層

    transition-duration="0.3s" // 排列速度

    column-width="#test" // 列寬,可以是數字或選擇器,官方建議設定列寬。
    // 如不設定,masonry 將取父層寬度做為第一個元件的寬度。
    // 第一個元件的寬度將會定義所有元件寬度

    origin-left="false" // 元件將由右側開始分發 (默認為左側)

    origin-top="false" // 元件將由底部開始分發 (默認為頂部)

    stamp=".stamp" // 指定標記 (看官方 DEMO 會比較清楚)

    gutter=".gutter-block-selector" // 指定元件的水平間距,可以是數字或選擇器

    fit-width="true" // 設置容器的寬度以適合可用的列數

    horizontal-order="true" // 使元件保持由左 -> 右排序,不會找尋最低的那列插入

    stagger="0.03s" // 當寬度變換造成元件需重新排列時所耗費的時間
    // 設置格式 "0.03s" | 30

最後,來看看聊天室範例吧!

image

image


後記

對於 column-width 這屬性我還不是很懂,只知道設定跟父元素一樣大的話就很完美 xD

如有人知道歡迎一起分享!

參考資料

vue-masonry

jQuery masonry 使用問題

關於筆者

暱稱:集點送紅利

介紹:我喜歡日文,也喜歡 coding

文章列表 文章列表