首页 > 网页教程 > CSS > 瀑布流布局:用CSS+DIV等宽格子堆砌瀑布流效果

瀑布流布局:用CSS+DIV等宽格子堆砌瀑布流效果

时间:2012-03-21    来源:源码爱好者

用CSS布局等宽的Div格子堆砌在一起的效果,自动适应,网人有人把它叫做“瀑布流”的布局,因为整体看上去第一个Div块就像流水的瀑布一样,紧挨着堆砌在一起,是学习CSS定位的好范例。

<!doctype html>
  <html>
  <head>
  <meta charset="UTF-8"/>
  <title>新手教程:CSS+DIV等宽格子堆砌瀑布流效果_酷站代码丨www.5icool.org</title>
  <style>
  *{padding:0;margin:0;}
  #wrap{position:relative;zoom:1;margin:0px auto;}
  #wrap li{width:250px;float:left;list-style:none;}
  .boxCont{position:relative;margin:15px;border:1px solid #ccc;background:#eee;
  background: -webkit-gradient(linear, 0% 20%, 0% 92%, from(#fff), to(#f3f3f3), color-stop(.1,#fff));
  background: -webkit-linear-gradient(0 0 270deg, #f3f3f3, #f3f3f3 10%, #fff);
  background: -moz-linear-gradient(0 0 270deg, #f3f3f3, #f3f3f3 10%, #fff);
  background: -o-linear-gradient(0 0 270deg, #f3f3f3, #f3f3f3 10%, #fff);
  -webkit-border-radius: 60px / 5px;
  -moz-border-radius: 60px / 5px;
  border-radius:60px / 5px;
  -webkit-box-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1) inset;
  -moz-box-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1) inset;
  box-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1) inset;
  }
  .boxCont:before{
  content:'';
  width: 50px;
  height: 50px;
  top:0; right:0;
  position:absolute;
  display: inline-block;
  z-index:-1;
  -webkit-box-shadow: 10px -10px 8px rgba(0, 0, 0, 0.2);
  -moz-box-shadow: 10px -10px 8px rgba(0, 0, 0, 0.2);
  box-shadow: 10px -10px 8px rgba(0, 0, 0, 0.2);
  -webkit-transform: rotate(2deg) translate(-14px,20px) skew(-20deg);
  -moz-transform: rotate(2deg) translate(-14px,20px) skew(-20deg);
  -o-transform: rotate(2deg) translate(-14px,20px) skew(-20deg);
  transform: rotate(2deg) translate(-14px,20px) skew(-20deg);
  }
  .boxCont:after{
  content: '';
  width: 100px;
  height: 100px;
  top:0; left:0;
  position:absolute;
  z-index:-1;
  display: inline-block;
  -webkit-box-shadow: -10px -10px 10px rgba(0, 0, 0, 0.2);
  -moz-box-shadow: -10px -10px 10px rgba(0, 0, 0, 0.2);
  box-shadow: -10px -10px 10px rgba(0, 0, 0, 0.2);
  -webkit-transform: rotate(2deg) translate(20px,25px) skew(20deg);
  -moz-transform: rotate(2deg) translate(20px,25px) skew(20deg);
  -o-transform: rotate(2deg) translate(20px,25px) skew(20deg);
  transform: rotate(2deg) translate(20px,25px) skew(20deg);
  }
  </style>
  </head>
  <body>
  <ul id="wrap"></ul>
  </body>
  <script type="text/javascript">
  var $id = function(o){ return document.getElementById(o) || o};
  function sort(el){
  var h = [];
  var box = el.getElementsByTagName("li");
  var minH = box[0].offsetHeight,
  boxW = box[0].offsetWidth,
  boxH,
  n = document.documentElement.offsetWidth / boxW | 0; //计算页面能排下多少Pin
  el.style.width = n * boxW + "px";
  for(var i = 0; i < box.length; i++) {
  boxh = box[i].offsetHeight; //获取每个Pin的高度
  if(i < n) { //第一行Pin以浮动排列,不需绝对定位
  h[i] = boxh;
  box[i].style.position = '';
  } else {
  minH = Math.min.apply({},h); //取得各列累计高度最低的一列
  minKey = getarraykey(h, minH);
  h[minKey] += boxh ; //加上新高度后更新高度值
  box[i].style.position = 'absolute';
  box[i].style.top = minH + 'px';
  box[i].style.left = (minKey * boxW) + 'px';
  }
  }
  };
  /* 返回数组中某一值的对应项数 */
  function getarraykey(s, v) {
  for(k in s) {
  if(s[k] == v) {
  return k;
  }
  }
  };
  /* 随机创建Pin */
  var pin = '';
  for(i = 0; i < 30; i++) {
  height = Math.floor(Math.random()*200 + 200);
  pin += '<li><div class="boxCont" style="height:' + height + 'px;"></div></li>';
  };
  $id("wrap").innerHTML = pin;
  window.onload = window.onresize = function() {
  sort($id("wrap"));
  };
  </script>
  </html>
相关推荐
网页瀑布流布局的几种实现方式分析
8个国外网页瀑布流布局主题欣赏及其做法揭秘(附下载)
瀑布流布局插件masonry在IE6下BUG的解决方案

精彩推荐

热门教程