JSFiddle - React, Tailwind, and code Playground

by Ajay Patel

HTML

<script src="https://raw.github.com/razorjack/quicksand/master/jquery.quicksand.js"></script>
<link rel="stylesheet" href="http://fancybox.net/css/style.css">
<link rel="stylesheet" href="http://yandex.st/jquery/fancybox/1.3.4/jquery.fancybox.css">
<script src="http://yandex.st/jquery/fancybox/1.3.4/jquery.fancybox.js"></script>
 <nav id="filter"></nav>

        <section id="container">
        <p>
        <a id="example1" href="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/1.jpg"><img src="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/1.jpg" alt="Illustration" /></a>
        </p>
        <p>
            <ul id="stage">
                <li data-tags="Print Design"><a class="fsand" href="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/1.jpg"><img src="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/1.jpg" alt="Illustration" /></a></li>
                <li data-tags="Logo Design,Print Design"><a class="fsand" href="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/2.jpg"><img src="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/2.jpg" alt="Illustration" /></a></li>
                <li data-tags="Web Design,Logo Design"><a class="fsand" href="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/3.jpg"><img src="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/3.jpg" alt="Illustration" /></a></li>
                <li data-tags="Web Design,Print Design"><a class="fsand" href="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/4.jpg"><img src="http://demo.tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/assets/img/shots/4.jpg" alt="Illustration" /></a></li>
                <li data-tags="Logo Design"><a class="fsand"...

CSS

/*-------------------------
    Simple reset
--------------------------*/


*{
    margin:0;
    padding:0;
}


/*-------------------------
    General Styles
--------------------------*/


html{
    background: url('../img/bg_tile.jpg') #18222b;
}

body{
    color:#fcfcfc;
    font:14px/1.3 'Segoe UI',Arial, sans-serif;
    min-height: 930px;
    background:url('../img/bg_center.jpg') center 240px no-repeat;
}

a, a:visited {
    text-decoration:none;
    outline:none;
    color:#54a6de;
}

a:hover{
    text-decoration:underline;
}


/*----------------------------
    Headers & Footers
-----------------------------*/


header{
    background:url('../img/header.png') repeat-x;
    display: block;
    height: 220px;
    padding: 10px;
}

h1{
    background:url('../img/logo.png') no-repeat center center;
    height: 80px;
    margin: 75px auto;
    overflow: hidden;
    text-align: center;
    text-indent: -99999px;
}



/*----------------------------
    Green filter bar
-----------------------------*/


#filter {
    background: url("../img/bar.png") repeat-x 0 -94px;
    display: block;
    height: 39px;
    margin: 55px auto;
    position: relative;
    width: 600px;
    text-align:center;
    
    -moz-box-shadow:0 4px 4px #000;
    -webkit-box-shadow:0 4px 4px #000;
    box-shadow:0 4px 4px #000;
}

#filter:before, #filter:after {
    background: url("../img/bar.png") no-repeat;
    height: 43px;
    position: absolute;
    top: 0;
    width: 78px;
    content: '';
    
    -moz-box-shadow:0 2px 0 rgba(0,0,0,0.4);
    -webkit-box-shadow:0 2px 0 rgba(0,0,0,0.4);
    box-shadow:0 2px 0 rgba(0,0,0,0.4);
}

#filter:before {
    background-position: 0 -47px;
    left: -78px;
}

#filter:after {
    background-position: 0 0;
    right: -78px;
}

#filter a{
    color: #FFFFFF;
    display: inline-block;
    height: 39px;
    line-height: 37px;
    padding: 0 15px;
    text-shadow:1px 1px 1px #315218;
}

#filter a:hover{
    text-decoration:none;
}

#filter a.active{
...

JavaScript

$(document).ready(function(){
    
    var items = $('#stage li'),
        itemsByTags = {};
    
    // Looping though all the li items:
    
    items.each(function(i){
        var elem = $(this),
            tags = elem.data('tags').split(',');
        
        // Adding a data-id attribute. Required by the Quicksand plugin:
        elem.attr('data-id',i);
        
        $.each(tags,function(key,value){
            
            // Removing extra whitespace:
            value = $.trim(value);
            
            if(!(value in itemsByTags)){
                // Create an empty array to hold this item:
                itemsByTags[value] = [];
            }
            
            // Each item is added to one array per tag:
            itemsByTags[value].push(elem);
        });
        
    });

    // Creating the "Everything" option in the menu:
    createList('Everything',items);

    // Looping though the arrays in itemsByTags:
    $.each(itemsByTags,function(k,v){
        createList(k,v);
    });
    
    $('#filter a').live('click',function(e){
        var link = $(this);
        
        link.addClass('active').siblings().removeClass('active');
        
        // Using the Quicksand plugin to animate the li items.
        // It uses data('list') defined by our createList function:
        
        $('#stage').quicksand(link.data('list').find('li'),
                              function() {
                                 $("a.fsand").fancybox({
                                    'overlayShow'   : false,
                                    'transitionIn'  : 'elastic',
                                    'transitionOut' : 'elastic'
                                });  
                              });
        e.preventDefault();
    });
    
    $('#filter a:first').click();
    
    function createList(text,items){
        
        // This is a helper function that takes the
        // text of a menu button and array of li items
        
       ...