页面瀑布流布局的实现 javascript+css

先看所谓的瀑布流布局

在不使用瀑布流布局的情况下,当页面要显示不同高度的图片时,会如下面显示

下面的元素总是和最靠近它的元素对齐。

为了使元素能够在我们想要的位置上显示,我们使用绝对定位。

说一下大体思路(也是看了别人的):
一切的不对齐都是从第一行的图片排列开始的,也许不是很准确,那么换一个说法:
要想使图片排列整齐,那么就得从第一行排列开始。
假设第一行x个元素排列中有一个最矮的(假设不假设都一样,假设是为了便于理解),
较高的元素比这个最矮的要多出一块区域来,那么第二行就要有人去把这个多出来的区域填上
当有人填上后,我们发现第一行最矮元素再加上这个填空白元素,比其他元素都更高了,这时我们把他俩看成一个元素
这样还是只有一行x个元素,然后就循环呗!每次找出最矮的来,让下一行的元素填充

代码如下(图片和reset.css要自己准备)

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta charset="gb2312" />
  5 <title>瀑布流练习</title>
  6 <link type="text/css" rel="stylesheet" href="./css/reset.css" />
  7
  8 <style>
  9 ul.wrap{
 10     width:1200px;
 11     margin:0 auto;
 12     position:relative; /* 相对定位 */
 13 }
 14 ul.wrap li{
 15     width:400px;
 16     float:left;
 17     position:absolute; /* 绝对定位 */
 18 }
 19 ul.wrap li img{
 20     /* 计算好长度 */
 21     width:364px;
 22     border:2px solid #bdbdbd;
 23     padding:10px;
 24     margin:4px;
 25 }
 26 </style>
 27
 28 <script type="text/javascript">
 29
 30 window.onload = function(){
 31     pubuliu("ulwrap",3,400);
 32 };
 33
 34 //实现ul下的li瀑布流
 35 //cols 表示一行几列,liWidth 表示一列的宽度
 36 function pubuliu(ulId,cols,liWidth){
 37     var wrap = document.getElementById(ulId);
 38     var lis = wrap.getElementsByTagName("li");
 39
 40     var li_h = [];
 41     for(var i=0; i<lis.length; i++){
 42         if(i < cols){
 43             li_h[i] = lis[i].scrollHeight;
 44             //定位元素
 45             lis[i].style.left = i * liWidth + "px";
 46             lis[i].style.top = "0px";
 47         }else{
 48             //获取数组最小值
 49             var min_liH = Math.min.apply( Math, li_h );
 50             var key = getKeyByValue(li_h,min_liH);
 51             //重定义最小高度
 52             li_h[key] = min_liH + lis[i].scrollHeight;
 53
 54             //定位元素
 55             lis[i].style.left = key * liWidth + "px";
 56             lis[i].style.top = min_liH + "px";
 57         }
 58     }
 59 }
 60
 61 //根据数组中的值获取索引
 62 function getKeyByValue(arr,value){
 63     for(var i=0; i<arr.length; i++){
 64         if(arr[i] == value){
 65             return i;
 66         }
 67     }
 68 }
 69 </script>
 70 </head>
 71
 72 <body>
 73     <ul class="wrap clearfix" id="ulwrap">
 74         <li>
 75             <img src="./images/1.jpg" />
 76         </li>
 77         <li>
 78             <img src="./images/2.jpg" />
 79         </li>
 80         <li>
 81             <img src="./images/3.jpg" />
 82         </li>
 83         <li>
 84             <img src="./images/4.jpg" />
 85         </li>
 86         <li>
 87             <img src="./images/5.jpg" />
 88         </li>
 89         <li>
 90             <img src="./images/6.jpg" />
 91         </li>
 92         <li>
 93             <img src="./images/7.jpg" />
 94         </li>
 95         <li>
 96             <img src="./images/8.jpg" />
 97         </li>
 98         <li>
 99             <img src="./images/9.jpg" />
100         </li>
101         <li>
102             <img src="./images/10.jpg" />
103         </li>
104     </ul>
105 </body>
106 </html>

瀑布流布局分为两部分:css部分和js部分。

css部分负责确定 li 的宽度、一行显示几列和定位方式

js部分负责确定具体的定位坐标

解释一下pubuliu(ulId, cols, liWidth)这个函数。它对 ulId 元素下的子li元素进行瀑布流布局,cols是一行显示几列,liWidth是一列的宽度。

时间: 2024-11-03 21:57:22

页面瀑布流布局的实现 javascript+css的相关文章

前端页面--瀑布流布局的实现

转眼间3个月没有更新了…..最近莫名的迷恋上了前端各种效果的实现了…..最近就记录一下我这几天做毕设时使用的一些效果吧~ 今天记录的是我毕设中着重体现的布局风格--瀑布流布局. 说到瀑布流布局,先上张图片来说明一下什么是瀑布流好了. 这个是我毕设中的一个截图(内容是我暂时从其他网站上爬下来测试的….),那么我们从这张图片中就能看到大致来说瀑布流就是一些等宽不等高的图片来排列展示的,因为每张图片都不一样大,以及我在图片下面展示了各种信息都不一样,所以导致这些展示的框它们的高度都不统一,那么为什么却

用Masonry和jQuery.lazyload插件实现网页瀑布流布局

瀑布流布局 我们常能在网上看到很多瀑布流布局的页面,尤其是很多图片网站,例如百度图片.这种最典型的瀑布流布局,每个元素的宽度是固定的,但图片长度各不相同,于是通过下图这种样子竖着排列了下来,达到了最大的页面空间利用率. 因为对前端开发不了解,一开始为了找到这种布局叫什么名字也是花了我好久时间o(╯□╰)o 瀑布流布局不局限于等宽布局,例如下面这种形式也可以,来自Masonry官网截图. Masonry官网 http://masonry.desandro.com/ 瀑布流布局作为一种响应式布局,网

JavaScript实现瀑布流布局以及页面的自动加载

瀑布式布局适合于小数据块,每个数据块内容相近且没有侧重.通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.所以,我们形象的称此类布局为瀑布流布局. 在此之前,我们用CSS实现此类布局,通常会有以下两种方式: 1.传统多列浮动 各列固定宽度,并且左浮动: 一列中的数据块为一组,列中的每个数据块依次排列即可: 更多数据加载时,需要分别插入不同列上: 虽然说这种布局方式很简单,也不需要明确的知道数据块的高度.但是如果浏览器窗口大小变化时,只能固定X列,很难调整数据块的排列. 2

JavaScript——基本的瀑布流布局及ajax动态新增数据

本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能. 缺点: 1. 程序不是响应式,不能实时调整页面宽度: 2. 程序中当新增ajax模拟数据图片后,是将整个页面的所有图片都重新定位一次. 3. 程序是等所有图片加载完成后再读取图片的尺寸,实际中肯定不能这样做. 4. 实际项目中,应该由后台程序给出图片尺寸值,在js代码中直接使用图片的width属性. 本程序思路: html结构: <body> <div id="

我的第一篇博客 —— 用 js 和 css 简单实现瀑布流布局

一个拖延症晚期患者的自述: 注册了博客快一个月了,终于要迎来我的第一篇博客了哈哈哈!!! 刚注册的时候,满脑子要频繁更新,扩充自己的知识库,一到真正落实,就不得不为懒惰屈服,还好有了学习计划,以后应该会每周一更(不更当我没说).当然了,肯定是希望被更多人看到,帮助到大家,如果没人看的话就当作是自己的积累与记录吧! 还有,我目前工作是前端工程师,还是一名刚入行不久的菜鸟哈哈哈!!!现在主要目标是先把前端知识巩固好,再逐步往全栈领域发展(毕竟装13是我一生的职责). 所以,请各位大佬们多多指教,如果

使用css实现瀑布流布局

css代码 .container{ -webkit-column-width:160px; -moz-column-width:160px; -webkit-column-gap:5px; -moz-column-gap:5px; } /*数据块 砖块*/ .container div{width:160px; margin:4px 0;} css写完了 body中的元素 <div class="container"> <div><img src=&quo

JavaScript实现瀑布流布局

关于瀑布流布局,(http://ued.taobao.org/blog/2011/09/waterfall/)这个博客中提供了几种实现思路,讲得很明白了,最近在学习JavaScript,写了一个使用JavaScript实现的瀑布流,代码托管在Github上:https://github.com/FuYung/Html5Learn/blob/master/HtmlJs/waterfallflow.html 效果如下图:

纯css瀑布流布局

由于公司的项目需要才用到瀑布流布局 因为后台返回的json直接循环出来的,所以不能做左右浮动的那种,所以才用到了瀑布流布局 16年之前的瀑布流布局基本都时基于js或者直接用jq插件的,但是随着技术的进步或更新,想用纯css达到这样的效果也是可以的 话不多说直接上代码 CSS样式是 .waterfall{ -moz-column-count:2; /* Firefox */ -webkit-column-count:2; /* Safari 和 Chrome */ column-count:2;

网页瀑布流布局jQuery实现代码

网页瀑布流布局jQuery实现代码 这篇文章主要为大家详细介绍了网页瀑布流布局jQuery实现方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 什么是瀑布流网页布局? 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 下面来看代码,用纯CSS3来做看效果怎样! HTML 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2