自适应的网格布局-砌墙效果

原创文章 作者:月光光 2011年11月26日 16:04helloweba.com 标签:jQuery 

我们使用新浪微博的时候,在“微博精选”页面里可以看到大量的微博信息。该页面信息主要是以图片配文字说明,页面使用了自适应网格布局即砌墙效果,图片加载技术,以及滚动加载内容技术。本文先介绍砌墙效果。

其实我们做页面布局就相当于砌墙师傅在完成一堵墙的施工。我们在设计页面的时候,假如有很多相同的DIV,装载不同的内容,这些DIV都使用float:left,如果不限制这些DIV的高度,页面布局可能会出现砌墙架空的现象。点击这里查看效果,而经过布局优化后的页面布局效果大不一样,请看DEMO。

本文使用David DeSandro写的一个页面布局插件Masonry,该插件基于jQuery库,提供很多参数和方法,可以根据不同的需求定制不同的效果。

XHMTL

首先是要引入jQuery库和Masonry插件。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.masonry.min.js"></script>

我们仿照新浪微博构建一个html页面,DIV#container放置多个相同的DIV.photo。

<div id="container">
      <div class="photo">
         <a href="#"><img src="images/02.jpg" alt="" /></a>
         <p><a href="#">菓小菓</a>:随时都要卖,还要又又美味</p>
      </div>
      .....N个photo...
</div>

CSS

#container{width:780px; margin:10px auto}
.photo{float:left; width:205px; margin:10px; padding:10px; border:1px solid #d3d3d3;
 background:#f7f7f7;-moz-border-radius:4px;-khtml-border-radius: 4px;-webkit-border-radius: 4px; 
 border-radius:4px;}
.photo img{width:205px}
.photo p{line-height:20px; margin:4px auto}

jQuery

$(function(){
  $('#container').masonry({
    itemSelector : '.photo',
    columnWidth : 247
  });
});

调用masonry插件,配置参数itemSelector对应的是class为photo的div,columnWidth为247,columnWidth的值是由.photo的宽度+padding*2+margin*2+border*2得到的。更多参数配置请访问masonry插件网站:http://masonry.desandro.com/docs/options.html

本文只介绍砌墙布局,接下来我会抽时间结合本文把图片加载技术和滚屏加载技术相关文章发布在helloweb.com博客里,敬请关注。

声明:本文为原创文章,helloweba.net和作者拥有版权,如需转载,请注明来源于helloweba.net并保留原文链接:https://www.helloweba.net/javascript/150.html

6条评论

  • 360底部左侧几个重叠了

  • chrome,firefox出现图片叠在一起了

  • 哥的博客很犀利啊!对我的帮助很大!

  • 为什么示例中mainpage div的高度不能够根据container div自适应呢?现在的例子中masonry的container容器会溢出mainpage div的边界。

  • 傲游3出现图片重叠在一起。

  • 不是IE浏览器的效果不好