瀑布流 的好处节省空间,形状都雅,更加都雅 。
对触屏 设备 非常 友好,通过向上滑动来浏览 。
用户浏览时,不雅观察和思考不会轻易中断,保留也更随意马虎 。
瀑布流的弊端用户不知道内容的总长度,不能从宏不雅观上掌握内容。
用户不知道现在所处的详细位置,也不知道间隔终点还有多远。
回溯时不易找到先前看到的内容 。
随意马虎造成网页载入包袱 。
易导致用户浏览疲倦,不能有短暂休息。
适宜 瀑布流 的场景

从瀑布流的利弊来看,在何种情形下选择瀑布流是合理的选择。

在内容以图片为主的情形下

瀑布流 比较好。
图像霸占了较大的空间,与理解笔墨比较,大脑理解速率更快,短韶光内能浏览 的内容 更多 ,因此 如果 利用 分页 显示 ,用户 一定会 频繁 翻页 ,影响 沉浸式体验 ,而瀑布流 可以 办理 这一 问题 。

php瀑布流布局这些场景合适前端瀑布流结构 Java

在信息和信息相对独立的情形下

瀑布流是更好的选择。
若信息 相互 关联 ,用户 一定要进行 大量 的回溯 操作 ,以查看 前后 的信息 ,反之,如果 信息 相对 独立 ,则可采取 瀑布流 ,让用户 同时 吸收 来自 不同 地方 的信息。

在用户 目标 不明确 的情形下

在用户 目标 不明确 的情形 下,瀑布流更适宜。
在用户 有特定 须要 的信息 时,分页 查找 定位 更加 方便 ,并且 在用户 目标 不明确 时,瀑布流 可以 增加 用户 的勾留韶光 和意外收成 。

multi-column 多栏布局实现瀑布流

multi-column实现 瀑布流紧张依赖以下几个属性:

column-count: 设置共有几列column-width: 设置每列宽度,列数由 总宽度与 每列宽度打算得出column-gap: 设置列与列之间的间距column-count和 column-width都可以用来定义分栏的数目,而且并没有明确的优先级之分。
优先级的打算取决于详细的场景。
打算办法为:打算 column-count和 column-width转换后详细的列数,哪个小就用哪个。

<div class="masonry"><div class="item"><img src="..."/><span class="title">...</span></div><div class="item"><img src="..."/><span class="title">...</span></div><!-- more items--></div>.masonry{column-count: 3;column-gap: 10px;}.masonry .item{border:1px solid #999;margin-bottom: 10px;}.masonry .item img{width: 100%;}复制代码

由于 multi-column布局中子元素的排列顺序是先 从上往下再 从左至右,以是这种办法仅适用于数据固定不变的情形,对付滚动加载更多等可动态添加数据的情形就并不适用了。

grid 布局实现瀑布流

Grid布局是最强大的 CSS 布局方案。

它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。
以前,只能通过繁芜的 CSS 框架达到的效果,现在浏览器内置了。

瀑布流以下几个属性:display:设置为 grid指明当前容器为 Grid布局grid-template-columns: 定义每一列的列宽grid-template-rows: 定义每一行的行高column-gap:用于设置列间距

<div class="masonry"><div class="item"></div><!-- more items--></div><style>.masonry{display: grid;grid-template-rows: 1fr 1fr 1fr; // 分为3行grid-template-columns: 1fr 1fr 1fr; // 分为3列column-gap:5px; // 列间距5px}</style>复制代码Flexbox 实现瀑布流

<div class="masonry"><!-- 第一列 --><div class="column"><div class="item"></div><!-- more items--></div><!-- 第二列 --><div class="column"><div class="item"></div><!-- more items--></div><!-- 第三列 --><div class="column"><div class="item"></div><!-- more items--></div></div>复制代码

上面代码中div.masonry代表当前瀑布流容器, div.column代表每一列的容器, div.item代表每一列中的每一项。

我们须要将 div.masonry和 div.column都通过 display:flex将其设置为 Flex容器。

不同的是 瀑布流容器主轴方向设置为水平方向 flex-direction:row, 列容器主轴方向设置为垂直方向 flex-direction:column

.masonry {display: flex; // 设置为Flex容器flex-direction: row; // 主轴方向设置为水平方向}.column {display: flex; // 设置为Flex容器flex-direction: column; // 主轴方向设置为垂直方向}

由于当前的html构造分为了 瀑布流容器和 列容器,并且常见的需求图片均是 从左至右再 从上到下来进行排列,以是须要通过 Javascript来区分每一列的详细数据:

假设分为三列,伪代码如下:

let data1 = [], //第一列data2 = [], //第二列data3 = [], //第三列i = 0;while (i < data.length) {data1.push(data[i++]);if (i < data.length) {data2.push(data[i++]);}if (i < data.length) {data3.push(data[i++]);}}return {//第一列data1,//第二列data2,//第三列data3};

感谢您的阅读,如果对您有帮助,欢迎关注"CRMEB"头条号。
码云上有我们开源的商城项目,知识付费项目,均是基于PHP+vue开拓,学习研究欢迎利用,关注我们保持联系!