We want to create an horizontal accordion with jQuery and some nice animation effects to show when we expand our items. We start with a basic markup like this:
<div id="accordion">
<h2 class="main"><a href="#main-content">Title</a></h2>
<div id="main-content" class="content">
<p>...</p>
</div>
<h2 class="sub"><a href="#sub-content">Title</a></h2>
<div id="sub-content" class="content">
<p>...</p>
</div>
</div>
Then we add some CSS styles to create the effect of a side panel menu:
#accordion {
width: 100%;
height: 100%;
overflow: hidden;
}
#accordion h2 {
margin: 0 10px 0 0;
width: 5px;
height: 35px;
display: block;
float: left;
background: url(img/expand.gif) no-repeat 0 0;
}
#accordion h2 a {
float: left;
display: block;
height: 35px;
width: 5px;
text-indent: -1000em;
outline-style: none;
}
#accordion div.content {
float: left;
width: 200px;
margin: 0;
padding-right: 10px;
}
#accordion div.content p {
margin-top: 0;
}
Each panel is made up by an heading and an hyperlink which are left-floated and the heading has a background image. The whole area is clickable because the child link has exactly the same dimensions of its parent. Now let's add jQuery:
$(document).ready(function() {
$('#accordion .content').hide().css('width', '100px');
$('#accordion h2').each(function() {
var $h2 = $(this);
$h2.find('a').click(function() {
$h2.next().animate({width: '200px'}, 'slow');
return false;
});
});
});
After hiding all the panels next to our tabs, we've assigned to them a width that is less than their original CSS
width. Why so? Because later in the source we use the animate() method to create our effect: when an user clicks on
a tab, he/she will see the text growing until the whole block gains its original dimensions. You can see the final
result here.