1 多列浮动
各列固定宽度,并且左浮动;
一列中的数据块为一组,列中的每个数据块依次排列即可;
更多数据加载时,需要分别插入到不同的列上;
优点:
布局简单,应该说没啥特别的难点;
不用明确知道数据块高度,当数据块中有图片时,就不需要指定图片高度。
缺点:
列数固定,扩展不易,当浏览器窗口大小变化时,只能固定的x列,如果要添加一列,很难调整数据块的排列;
滚动加载更多数据时,还要指定插入到第几列中,还是不方便。
2 CSS3
指定容器的列个数,列间距,列中间边框,列宽度来实现
1 #container { 2 -webkit-column-count: 5; 3 /*-webkit-column-gap: 10px; 4 -webkit-column-rule: 5px solid #333; 5 -webkit-column-width: 210px;*/ 6 7 -moz-column-count: 5; 8 /*-moz-column-gap: 20px; 9 -moz-column-rule: 5px solid #333; 10 -moz-column-width: 210px;*/ 11 12 column-count: 5; 13 /*column-gap: 10px; 14 column-rule: 5px solid #333; 15 column-width: 210px;*/ 16 }
column-count 为列数; column-gap 为每列间隔距离; column-rule 为间隔边线大小; column-width 为每列宽度; 当只设置 column-width 时,浏览器窗口小于一列宽度时,列中内容自动隐藏; 当只设置 column-count 时,平均计算每列宽度,列内内容超出则隐藏; 都设了 column-count 和column-width,浏览器会根据 count 计算宽度和 width 比较,取大的那个值作为每列宽度,然后当窗口缩小时,width 的值为每列最小宽度。
优点:
直接 CSS 定义,最方便了;
扩展方便,直接往容器里添加内容即可。
缺点:
3) 绝对定位。示例:KISSY.Waterfall
优点:
方便添加数据内容,窗口变化,列数/数据块都会自动调整;
缺点:
需要实现知道数据块高度,如果其中包含图片,需要知道图片高度;
JS 动态计算数据块位置,当窗口缩放频繁,可能会狂耗性能。
KISSY 的 Waterfall 组件主要包含两个部分,一个是对现有数据块进行排列计算各自所在的位置; 二是下拉滚动时,触发加载数据操作,并把数据添加到目标容器中。
1) 数据块排列算法:
2) 异步加载数据
前面讲的是如何对容器中已有元素进行排列,但很多情况下,还需要不断加载新数据块,为此专门设计了一个独立的模块 KISSY.Waterfall.Loader,其实这个功能就更简单了,仅包含两个步骤:
关于瀑布流的算法(转淘宝ued),布布扣,bubuko.com
原文:http://www.cnblogs.com/guoyongfeng/p/3906535.html