like a mountain that is in our path,wo cannot complain that it is there,we simply have to climb it
最近,在搭建个人博客时,其中的Demo展示页面想用瀑布流形式展现,发现现有的js插件大多基于JQ的,而我稍微有点小强迫,不想基于JQ,于是就着手自己封装了一个。顺带就研究了下css3方式实现瀑布流,于是总结了下,写了几个示例demo,就有了本文。
一般瀑布流的实现常见有三种方式
首先固定屏幕中展示的列数,每一列中间的数据作为一组单独计算,插入数据时分别插入不同列中 优点:
缺点:
利用css3中特有属性,在高级浏览器中实现瀑布流效果 优点:
缺点:
利用js,动态计算元素的插入位置,利用绝对布局absolute进行定位,根据屏幕的不同可以动态调整 优点:
缺点:
就实用性而言,传统的瀑布流比较适合业务场景较为单一的情况,比如手机中固定两列的情况,css3瀑布流布局由于有时候会造成一些不理想的局面,所以更多的被用在了面试题等上面,最后那张绝对布局的瀑布流方式是被应用的最为广泛的
本文主要探讨css3瀑布流和绝对定位瀑布流的实现
这种实现方式是最为简单的,仅仅是基于css3的新属性(column-width或column-count),
css3中增加了一个新的属性:column,来实现等高的列的布局效果。该属性有column-width宽度,column-count数量等,并且能根据窗口自适应。
css实现瀑布流分为两种效果,普通横向瀑布流与固定列数的瀑布流
这种瀑布流方式常常用于和js绝对布局方式比较,但是虽然从显示上来说,效果差不多,但是从用户体验的角度讲,这个不符合平常的习惯,以下是两种方式的效果图对比
.container{
/*宽*/
-webkit-column-width:200px;
-moz-column-width:200px;
-o-colum-width:200px;
/*间距*/
-webkit-column-gap:1px;
-moz-column-gap:1px;
-o-column-gap:1px;
}
这种布局用到比较少,但是某些面试题会经常提到,效果如下
.container{
/*固定列*/
/*-moz-column-count:2;
-webkit-column-count:2;
column-count:2;*/
/*间距*/
-webkit-column-gap:1px;
-moz-column-gap:1px;
-o-column-gap:1px;
}
想看示例页面可以戳一戳 css3瀑布流效果 源码可以查看 https://github.com/dailc/jseffect-demo/blob/master/waterfallflow/demo_waterfall_flow_css3.html
这种实现方式是最为经典的,也是运营的最多的,网上也有很多的原生或jq插件,本文这里也用原生js重新封装了一个类库,方便调用,效果如图
瀑布流的实现思路其实很简单,如下:
由于代码较为占用篇幅,这里就不再赘述,基本根据实现思路都能实现出来,也可以查看下面提供的源码链接
想看示例页面可以戳一戳 js瀑布流效果
源码可以查看 https://github.com/dailc/jseffect-demo/blob/master/waterfallflow/demo_waterfall_flow_js.html
原文在我个人博客上面