图片分享网站>Pinterest(beta), 在不久前获得了2700$的投资,估值已超2亿元(据说现该公司团队有8人)。该网站的一大特色就是每一张分享的图片被拟作“Pin”被钉在页面上面,每 一Pin依尺寸智能排列,同时滚动页面时异步加载新Pin,极具效果。这种创新模式被在国内也被广泛copy,其中最有前途的当属Mark之,以 “Mark”代“Pin”,也算有些想法。
下面简单模拟下这种布局,这种布局在国内有人称之为瀑布流,当然这个名称主要还是指Pin在异步加载时的效果,而这个在本demo并没有做。(本demo兼容所有浏览器,但还是建议你使用firefox,chrome等浏览器,效果更佳)
- <!doctype html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>等宽格子堆砌</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>
本站文章大部分为原创,用于个人学习记录,可能对您有所帮助,仅供参考!
我的微信
微信号已复制
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!