Logo

《Vue插件》瀑布流插件vue-masonry的使用与踩坑记录

Pastore Antonio
Pastore Antonio 2024年04月08日
753 阅读 0 评论 约 5321 字 阅读约 11 分钟

这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~

前言

之前其实有分享过一篇纯CSS实现瀑布流的方法: https://oliver.blog.csdn.net/article/details/126450691,但纯CSS实现的方案都不是比较好的方案,总归有一些各式各样的局限性,因此,有了本文,记录分享一下vue中比较好用的一个瀑布流插件——vue-masonry,GitHub上将近600个star,个人推荐~
注意:以下vue-masonry相关分享与踩坑解决的问题版本为0.16.0

官网

官网地址:https://masonry.desandro.com/,但文本的主要的信息来源来自于GitHub的README,地址如下:https://github.com/shershen08/vue-masonry#readme
有兴趣的小伙伴可以自行浏览~当然插件本身可以适用于很多平台,Vue仅仅是其中之一;

安装与使用

由于是集成在Vue中的,绝大多数Vue都是基于Vue-Cli搭建的项目,script标签这种…应该很少见吧,因此就不过多涉及了,以vue-cli为主,

// 安装
npm install vue-masonry -S

注意的是,vue-masonry没有对应的@types/vue-masonry
在这里插入图片描述

这也就代表vue-masonry 没有对应的类型描述,当然,也不需要,即使你的项目是Vue3+TypeScript也不需要安装类型描述文件,以Vue3+Ts的项目为例,当安装完成后,直接在main.ts文件中引入即可,引入代码如下:

import { VueMasonryPlugin } from 'vue-masonry';

app.use(VueMasonryPlugin);

常规,简单的引入,即可正常使用;

基本使用

vue-masonry的使用核心在于自定义指令:v-masonryv-masonry-tile这个是整个瀑布流插件的使用核心

<div v-masonry>
    <div v-masonry-tile v-for="(item, index) in blocks">
       <!-- block item markup -->
    </div>
</div>
  • v-masonry: 绑定在父级容器上;
  • v-masonry-tile: 绑定在子级容器上;

示例

直接看个例子吧

<div v-masonry class="container">
    <div
        v-masonry-tile
        v-for="(item, index) in demoList"
        :class="`demo-${item}`"
        :key="index"
    >
        <div></div>
    </div>
</div>

效果图如下:
在这里插入图片描述

参数

item-selector

接收一个字符串作为参数,官方原文解释:list element DOM item selector,作用是选择哪些列作为瀑布流的列,比如:

<div v-masonry item-selector=".demo-2" class="container">
    <div
        v-masonry-tile
        v-for="(item, index) in demoList"
        :class="`demo-${item}`"
        :key="index"
    >
        <div></div>
    </div>
</div>

<script lang="ts" setup>
import { Ref, ref } from "vue";

const demoList: Ref<number[]> = ref([1, 2, 1, 3, 4]);
</script>

示例中item-selector的值是”.demo-2″,代表只有类名中包含.demo2的DOM,都会被拉入瀑布流的布局,如果不包含,那么依旧会按原来的规则进行布局;

transition-duration

接收一个字符串作为参数,官方原文解释:duration of transitions,作用是设定动画改变的持续时间,比如:

<div v-masonry transition-duration="0.2s" class="container">
    <div
        v-masonry-tile
        v-for="(item, index) in demoList"
        :class="`demo-${item}`"
        :key="index"
    >
        <div></div>
    </div>
</div>

这个属性是动画持续时间,比如,当父级容器的宽度尺寸发生变化了,理所当然的里面的瀑布流布局也会随之发生变化,所有基于瀑布流的DOM将要重新排布,这个排布的过程是动画化的,这个动画持续时间即这里设定的时间~

column-width

接收一个字符串作为参数,官方原文解释:element selector for column width. Can be a selector string or a number,简单的说就是设定一个基准列宽,大致用法如下:

<div v-masonry column-width=".demo-1" class="container">
    <div
        v-masonry-tile
        v-for="(item, index) in demoList"
        :class="`demo-${item}`"
        :key="index"
    >
        <div></div>
    </div>
</div>

默认情况下vue-masonry会以第一个元素的宽度作为默认排序,也就是说如果第一个元素的非最小单位的基准元素,那么整个瀑布流的布局都会乱,因此需要通过column-width修改;
举个例子吧,看一段代码

<div v-masonry class="container">
    <div v-masonry-tile class="demo-2"></div>
  	<div v-masonry-tile class="demo-1"></div>
 		<div v-masonry-tile class="demo-1"></div>
</div>

整个瀑布流布局的列宽会以demo-2的列宽为标准,因此,即使demo-1的宽度比demo-2的小
在这里插入图片描述

因此,这种情况下,我们就需要使用column-width指定基准列宽,将column-width的值设定为demo-1

<div v-masonry column-width=".demo-1" class="container">
    <div v-masonry-tile class="demo-2"></div>
  	<div v-masonry-tile class="demo-1"></div>
 		<div v-masonry-tile class="demo-1"></div>
</div>

结果如下:
在这里插入图片描述

origin-left

官方原文解释:set to group elements to the right instead of left by default,设置X轴的排序方式,默认从左往右排序,设定后可从右向左排序

<template>
    <div v-masonry origin-left="false" class="container">
        <div
            v-masonry-tile
            v-for="(item, index) in demoList"
            :class="`demo-${item}`"
            :key="index"
        >
            <div></div>
        </div>
    </div>
</template>

效果图如下:
在这里插入图片描述

origin-top

官方原文解释:set to group elements to the bottom instead of top by default,设置Y轴的排序方式,默认从上往下排序,设定后可从下向上排序

<template>
    <div v-masonry origin-top="false" class="container">
        <div
            v-masonry-tile
            v-for="(item, index) in demoList"
            :class="`demo-${item}`"
            :key="index"
        >
            <div></div>
        </div>
    </div>
</template>

效果图如下:
在这里插入图片描述

gutter

官方原文解释:specifies [horizontal space between item elements]. Can be a selector string or a number. (https://masonry.desandro.com/options.html#gutter). Set gutter to an Element or Selector String to use the outer width of the element,简单的说,就是用来设置列宽,

具体效果可以看原文中的这个链接,说明的已经非常详细了:https://masonry.desandro.com/options.html#gutter,当然由于这是在Vue中使用,因此还是要通过属性的方式注入,比如

<template>
    <div v-masonry gutter="10" class="container">
        <div
            v-masonry-tile
            v-for="(item, index) in demoList"
            :class="`demo-${item}`"
            :key="index"
        >
            <div></div>
        </div>
    </div>
</template>

小结

还有一些属性,感觉不是太重要,因此有兴趣的小伙伴可以自行尝试,问题不大,接着,对比下来不难发现,纯CSS用法还是非常捡漏的,如果真的是实用与项目中,除非是极其简单的应用,可以考虑用纯CSS实现,否则还是建议使用一些功能已经相对完善的第三方插件来帮助我们实现功能~

查看完整代码
文章目录

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它

附件下载

共 6 个文件
在这里插入图片描述
PNG 35.0 KB
在这里插入图片描述
PNG 6.8 KB
在这里插入图片描述
PNG 7.6 KB
在这里插入图片描述
PNG 6.8 KB
在这里插入图片描述
PNG 6.9 KB
在这里插入图片描述
PNG 6.8 KB
本文为原创文章,请注意保留出处!

**最近一直在画静态页面,有个图片列表,布局很紧凑,图片宽度一样,高度不一样,但是效果图上都是紧...【瀑布流插件】vue-masonry

热门文章

C# DataTable 某一列求和 列为数字类型doubletotal=Convert.ToDouble(datatable.Com...C#DataTable某一列求和 作者:Pastore Antonio
1676 浏览量
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 这一篇是从0开始搭建SQLServerAlwaysOn的第三篇,这一篇才真正开始搭建Alway...从0开始搭建SQLServerAlwaysOn第三篇(配置AlwaysOn) 作者:Pastore Antonio
1631 浏览量
SharePoint REST API – 概述 博客地址:http://blog.csdn.net/FoxDaveSharePointRES...SharePointRESTAPI–概述 作者:Pastore Antonio
1619 浏览量
IIS反向代理 贴张图吧,反向代理的工作流程。没接触之前,觉得反向代理是一个很高级的东西。其实也只是新建一个空...IIS反向代理 作者:Pastore Antonio
1607 浏览量
C#数组和集合 1.一维数组:一维数组很简单,值得说明的就是读取数组的方法,foreach方法是很简单的。一维数组的...C#数组和集合 作者:Pastore Antonio
1603 浏览量
修复moss本机访问SharePoint 401.1 HTTP错误 环境概述在本次问题分析中,我们首先需要明确系统的运行环境。了解环境配置不仅能帮助我们定位问题,也为...修复moss本机访问SharePoint401.1HTTP错误 2026-02-15 · Xzavier Aaron
C#文件下载的几种方式 简介文件下载功能在现代软件开发中占据了重要地位,无论是为用户提供资源、分发文档,还是实现数据传输,...C#文件下载的几种方式 2026-02-15 · Xzavier Aaron
Adding Docker Repository to CentOS 在CentOS系统上添加Docker官方仓库是安装和管理Docker的第一步。以下是详细...AddingDockerRepositorytoCentOS 2026-02-14 · Xzavier Aaron
Flowise 前端框架配置指南 用户需求问题:有没有适合配置Flowise的前端框架?目标:寻找类似OpenWebUI...Flowise前端框架配置指南 2026-02-14 · Xzavier Aaron
aspnet-wwwroot-error-solution ASP.NETCore启动报错:DirectoryNotFoundExceptionwwwroo...aspnet-wwwroot-error-solution 2025-12-28 · Pastore Antonio
WordPress服务器无法处理图片的解决方法 问题描述在使用WordPress进行图片上传时,部分用户可能会遇到服务器无法处理图片的问题。这种情...WordPress服务器无法处理图片的解决方法 2026-02-15 · Xzavier Aaron
OpenClaw 入门指南:从原理到实战 引言本文旨在为读者提供一份关于OpenClaw的深入指南,涵盖其核心原理和实际应用。这篇文章的...OpenClaw入门指南:从原理到实战 2026-02-15 · Xzavier Aaron
SharePoint2010升级到SharePoint2013操作手册 第一章前言在技术领域中,随着软件系统的迭代升级,企业往往面临如何将现有的系统迁移到新版本的问题。...SharePoint2010升级到SharePoint2013操作手册 2026-02-15 · Xzavier Aaron
解决了安全问题,Clawdbot就会成为AI PC起飞的点火按钮 Clawdbot的实际功能及吸引力Clawdbot(后更名为Moltbot、OpenClaw)作...解决了安全问题,Clawdbot就会成为AIPC起飞的点火按钮 2026-02-15 · Xzavier Aaron
Sql Server 部署SSIS包完成远程数据传输 简介与背景在现代数据管理中,如何高效地完成远程数据的更新任务一直是一个重要的挑战。本文的背景起源于...SqlServer部署SSIS包完成远程数据传输 2026-02-14 · Xzavier Aaron
在现有Seafile 上追加 Azure Blob 磁盘 已有运行中的Seafile(Docker)现有数据保持不变新增几个AzureBlob作为...在现有Seafile上追加AzureBlob磁盘 2025-11-21 · Pastore Antonio
.NET CORE 传统方式调用SharePoint 直接贴代码:usingMicrosoft.SharePoint.Client;usingPnP....NETCORE传统方式调用SharePoint 2025-09-25 · Pastore Antonio
Azure 申请SharePoint 应用 登录后台如下:进入Azure:选择之后进入创建应用:进入之后输入名字按照如下图示点击注册:创...Azure申请SharePoint应用 2025-09-25 · Pastore Antonio
VS中MVC解决方案复制后修改调试端口 我之前是直接去解决方案属性中修改:然后恭喜你,你会喜提报错。正确方式,打开项目属性:这里重置切...VS中MVC解决方案复制后修改调试端口 2025-03-17 · Pastore Antonio
如何在C#WinForms应用程序中显示当前版本信息 在开发C#WinForms应用程序时,向用户展示当前版本信息是一个常见的需求。这不仅可以帮助用户了解...如何在C#WinForms应用程序中显示当前版本信息 2025-03-10 · Pastore Antonio
2022年4月30日 削苹果削了手,太懒不想收藏资料的时候复制粘贴所以开发了一个快速发布的组件。花了2天……浏览量:1...2022年4月30日 2022-04-30 · Pastore Antonio
2021年12月27日 头疼/胸闷/肋条疼/脚脖子疼……没钱……明天要给员工发工资了。浏览量:1,830 2021-12-27 · Pastore Antonio
2021年12月22日 今天天气:多云转晴早上太多雾,但怕迟到还是一路超速……赶到了目的地,在车库绕了四层没一个车位,绕晕...2021年12月22日 2021-12-22 · Pastore Antonio
修复moss本机访问SharePoint 401.1 HTTP错误 环境概述在本次问题分析中,我们首先需要明确系统的运行环境。了解环境配置不仅能帮助我们定位问题,也为...修复moss本机访问SharePoint401.1HTTP错误 2026-02-15 · Xzavier Aaron
C#文件下载的几种方式 简介文件下载功能在现代软件开发中占据了重要地位,无论是为用户提供资源、分发文档,还是实现数据传输,...C#文件下载的几种方式 2026-02-15 · Xzavier Aaron
aspnet-wwwroot-error-solution ASP.NETCore启动报错:DirectoryNotFoundExceptionwwwroo...aspnet-wwwroot-error-solution 2025-12-28 · Pastore Antonio
SharePoint Server 出现 ERR_HTTP2_PROTOCOL_ERROR 如果SharePointServer在http的情况下能够访问,但是在https下不能访问报错如...SharePointServer出现ERR_HTTP2_PROTOCOL_ERROR 2025-10-21 · Pastore Antonio
.NET CORE 快速文本搜索器 简单的搜索引擎:usingSystem;usingSystem.Collections.Gen....NETCORE快速文本搜索器 2025-09-25 · Pastore Antonio
修复moss本机访问SharePoint 401.1 HTTP错误 环境概述在本次问题分析中,我们首先需要明确系统的运行环境。了解环境配置不仅能帮助我们定位问题,也为...修复moss本机访问SharePoint401.1HTTP错误 2026-02-15 · Xzavier Aaron
.NET CORE 传统方式调用SharePoint 直接贴代码:usingMicrosoft.SharePoint.Client;usingPnP....NETCORE传统方式调用SharePoint 2025-09-25 · Pastore Antonio
Azure 申请SharePoint 应用 登录后台如下:进入Azure:选择之后进入创建应用:进入之后输入名字按照如下图示点击注册:创...Azure申请SharePoint应用 2025-09-25 · Pastore Antonio
.NET CORE 使用应用方案操作SharePoint Online 世纪互联版 我来为你创建一个.NETCore应用程序,用于向世纪互联SharePointOnline....NETCORE使用应用方案操作SharePointOnline世纪互联版 2025-09-25 · Pastore Antonio
Microsoft Excel 365 的 DCOMCNFG 中缺少 Microsoft Excel 应用程序 试试这个方法:这个方法不是解决你看不看得到,而是配置你看不到也能使用了。原操作方案:Micro...MicrosoftExcel365的DCOMCNFG中缺少MicrosoftExcel应用程序 2025-06-11 · Pastore Antonio
为你的wordpress主题添加支持文章格式 如果你的主题不支持文章格式,首先你需要在functions.php中添加如下类似代码让你的主题支持该...为你的wordpress主题添加支持文章格式 2024-04-17 · Pastore Antonio
wordpress新增文章类型 要在WordPress中添加自定义文章类型,您可以按照以下步骤进行:使用函数创建自定义文章类型:...wordpress新增文章类型 2024-04-17 · Pastore Antonio
去除WordPress登录页面的翻译组件 在主题function.php中添加如下内容:add_filter(‘login_d...去除WordPress登录页面的翻译组件 2023-08-30 · Pastore Antonio
Linux 下Wordpress博客搭建 WordPress#下载安装文件cd/usr/local/nginx/html/blogw...Linux下WordPress博客搭建 2021-12-11 · Pastore Antonio
从零开始在linux下搭建wordpress博客 一,准备linux环境本地虚拟机可以忽略第一部分微博以及微信的公共平台现在正火的一塌糊涂。既...从零开始在linux下搭建wordpress博客 2021-12-11 · Pastore Antonio
centos 常见问题 1:DNS配置域名无法在Linux下解析是一个比较普遍的问题,造成这个问题有很多原因,比如:服务器...centos常见问题 2023-11-08 · Pastore Antonio
linux中查找包含指定内容的文件 文件名+内容根据时间查找日志查询指定时间段内的日志查找关键字只显示包含内容的文件名文件名+...linux中查找包含指定内容的文件 2021-12-11 · Pastore Antonio
Linux 下Wordpress博客搭建 WordPress#下载安装文件cd/usr/local/nginx/html/blogw...Linux下WordPress博客搭建 2021-12-11 · Pastore Antonio
从零开始在linux下搭建wordpress博客 一,准备linux环境本地虚拟机可以忽略第一部分微博以及微信的公共平台现在正火的一塌糊涂。既...从零开始在linux下搭建wordpress博客 2021-12-11 · Pastore Antonio
linux 安装php8 准备工作  创建空文件夹>mkdir/opt/php//创建目录>cd/...linux安装php8 2021-12-11 · Pastore Antonio

最新发布

修复moss本机访问SharePoint 401.1 HTTP错误 环境概述在本次问题分析中,我们首先需要明确系统的运行环境。了解环境配置不仅能帮助我们定位问题,也为...修复moss本机访问SharePoint401.1HTTP错误 技术 2026-02-15
WordPress服务器无法处理图片的解决方法 问题描述在使用WordPress进行图片上传时,部分用户可能会遇到服务器无法处理图片的问题。这种情...WordPress服务器无法处理图片的解决方法 转载 2026-02-15
C#文件下载的几种方式 简介文件下载功能在现代软件开发中占据了重要地位,无论是为用户提供资源、分发文档,还是实现数据传输,...C#文件下载的几种方式 技术 2026-02-15
OpenClaw 入门指南:从原理到实战 引言本文旨在为读者提供一份关于OpenClaw的深入指南,涵盖其核心原理和实际应用。这篇文章的...OpenClaw入门指南:从原理到实战 转载 2026-02-15
SharePoint2010升级到SharePoint2013操作手册 第一章前言在技术领域中,随着软件系统的迭代升级,企业往往面临如何将现有的系统迁移到新版本的问题。...SharePoint2010升级到SharePoint2013操作手册 转载 2026-02-15
修复moss本机访问SharePoint 401.1 HTTP错误 环境概述在本次问题分析中,我们首先需要明确系统的运行环境。了解环境配置不仅能帮助我们定位问题,也为...修复moss本机访问SharePoint401.1HTTP错误 #C# 2026-02-15
C#文件下载的几种方式 简介文件下载功能在现代软件开发中占据了重要地位,无论是为用户提供资源、分发文档,还是实现数据传输,...C#文件下载的几种方式 #C# 2026-02-15
aspnet-wwwroot-error-solution ASP.NETCore启动报错:DirectoryNotFoundExceptionwwwroo...aspnet-wwwroot-error-solution #C# 2025-12-28
SharePoint Server 出现 ERR_HTTP2_PROTOCOL_ERROR 如果SharePointServer在http的情况下能够访问,但是在https下不能访问报错如...SharePointServer出现ERR_HTTP2_PROTOCOL_ERROR #C# 2025-10-21
.NET CORE 快速文本搜索器 简单的搜索引擎:usingSystem;usingSystem.Collections.Gen....NETCORE快速文本搜索器 #C# 2025-09-25