A minimalist masonry function
mason(containerElement,brickElement,brickWidth,brickHeight)
Only works with one size of brick.
The only advantage of using this over using inline-block elements is that you can use css transitions.
| function(m,n,w,h,i){m=m.offsetWidth/w|0;for(i=n.length;i--;)n[i].style.left=i%m*w+"px",n[i].style.top=(i/m|0)*h+"px"} |
| function(m,n,w,h,i){ | |
| m=m.offsetWidth/w|0; //get the max number of bricks per row | |
| for(i=n.length;i--;) //loop | |
| n[i].style.left=i%m*w+"px", //calculate and set x | |
| n[i].style.top=(i/m|0)*h+"px" //calculate and set y | |
| } |
| { | |
| "name": "theNameOfYourLibWhichMustBeAValidCamelCasedJavaScriptIdentifier", | |
| "description": "This should be a short description of your entry.", | |
| "keywords": [ | |
| "five", | |
| "descriptive", | |
| "keywords", | |
| "or", | |
| "fewer" | |
| ] | |
| } |
| <!doctype html> | |
| <style> | |
| body{text-align:center;background:#999;} | |
| nav>div{width:200px;height:123px;margin:38px;background:#777;box-sizing:border-box;position:absolute;-webkit-transition:all 1s; | |
| box-shadow:0 0 7px -3px #000;} | |
| nav{position:relative;display:inline-block;background:yellow} | |
| </style> | |
| <nav> | |
| <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div> | |
| <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div> | |
| <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div> | |
| <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div> | |
| </nav> | |
| <script> | |
| //masonry container: | |
| m=document.querySelector("nav") | |
| //masonry bricks: | |
| n=m.getElementsByTagName("div") | |
| //brick dimentions: | |
| w=n[0].offsetWidth+(parseInt((getComputedStyle(n[0],null)||n[0].currentStyle).marginLeft,10)*2) | |
| h=n[0].offsetHeight+(parseInt((getComputedStyle(n[0],null)||n[0].currentStyle).marginTop,10)*2) | |
| //function caller: | |
| onload=onresize=function(){ | |
| //container resizer: | |
| document.querySelector("nav").style.width=(((document.body.offsetWidth*0.9)/w|0)*w)+"px" | |
| ;( | |
| //masonry function: | |
| function(m,n,w,h,i){m=m.offsetWidth/w|0;for(i=n.length;i--;)n[i].style.left=i%m*w+"px",n[i].style.top=(i/m|0)*h+"px"} | |
| )(m,n,w,h); | |
| } | |
| </script> |