Isotope - fitColumns in fit container

Re http://stackoverflow.com/questions/5100009/relayout-items-with-isotope-doesnt-seem-to-maintain-structure

by johnnytrinh

HTML

<script src="http://isotope.metafizzy.co/jquery.isotope.min.js"></script>
<div id="container">
     <div class="item corner" id="min"><ul id="filters" style="padding:0;margin:0;">
  <li><a href="#" data-filter="*">all</a></li>
  <li><a href="#" data-filter=".one, .corner">abstract</a></li>
  <li><a href="#" data-filter=".two, .corner">shoes</a></li>
</ul></div>
        <div class="item one"><img src="http://www.wiels.org/dbfiles/mfile/1700/1797/image.jpg"><p><img src="http://www.wiels.org/dbfiles/mfile/1700/1797/image.jpg"><p>image description</div>
    <div class="item one"><img src="http://lesirreguliers.unblog.fr/files/2007/12/image.jpg"><p>image description</div>
  <div class="item one"><img src="http://lesirreguliers.unblog.fr/files/2007/12/image.jpg"><p>image description</div>
  <div class="item two"><img src="http://www.hasbeeners.com/Blog/wp-content/uploads/2011/11/Image-9-635x423.png"><p>image description</div>
  <div class="item two"><img src="http://www.hasbeeners.com/Blog/wp-content/uploads/2011/11/Image-9-635x423.png"><p>image description</div>
  <div class="item two"><img src="http://www.hasbeeners.com/Blog/wp-content/uploads/2011/11/Image-9-635x423.png"><p>image description</div>
  <div class="item two"><img src="http://www.hasbeeners.com/Blog/wp-content/uploads/2011/11/Image-9-635x423.png"><p>image description</div>
  <div class="item two"><img src="http://www.hasbeeners.com/Blog/wp-content/uploads/2011/11/Image-9-635x423.png"><p>image description</div>
</div>

CSS

body{font-family:Arial,Helvetica,sans-serif;}
.item{padding-bottom:10px;border-bottom:1px dashed #111;width:195px;margin:10px}
.item img{cursor:pointer;width:100%}
.selected{width:auto;height:auto}

#min{width:195px}
#min2{max-width:415px}

#wait{padding:10px}

#filters a{color:blue}
#filters a:focus{color:red}

@media screen and (max-width:655px)
{body{padding:10px;font-size:12px}.item.selected{width:415px}}
@media screen and (max-width:467px){.item{width:auto;padding:auto}#min{width:90%;height:auto}.item.selected{width:auto}}



.item:hover {
  cursor: pointer;
}

/**** Isotope CSS3 transitions ****/

.isotope,
.isotope .isotope-item {
  -webkit-transition-duration: 0.8s;
     -moz-transition-duration: 0.8s;
          transition-duration: 0.8s;

}

.isotope {
  -webkit-transition-property: height, width;
     -moz-transition-property: height, width;
          transition-property: height, width;
}

.isotope .isotope-item {
  -webkit-transition-property: -webkit-transform, opacity;
     -moz-transition-property:    -moz-transform, opacity;
          transition-property:         transform, opacity;
}

JavaScript

$(function(){
    var $container=$('#container'),
        $items=$('.item')
        $filterLinks = $('#filters a');
        
    $container.imagesLoaded(function(){
        $container.isotope({
            itemSelector:'.item',
            masonry: {columnWidth: 10},
            sortBy:'order',
            filter: '*'
        })
    });

$filterLinks.click(function(){
    var $this = $(this);
    
    // get selector from data-filter attribute
    selector = $this.data('filter');
    
    $container.isotope({
      filter: selector
    });
});    

 
    $items.click(function(){
        var $this=$(this);
        var $previousSelected=$('.selected');
        if(!$this.hasClass('selected')){$this.addClass('selected')}
        
        $previousSelected.removeClass('selected');
        
        $container
            .isotope('updateSortData',$this)
            .isotope('updateSortData',$previousSelected)
            .isotope()
    })
});