jQuery can virtually animate any kind of HTML elements or structures, so why don't we use it to animate a tag cloud? The effect we want to achieve is a zoom animation with a smooth bounce on hover. For that reason, we'll also use jQuery UI. Let's see how.
We start with the following markup:
<ul id="tag-cloud"> <li class="tc-1"><a href="#">CSS</a></li> <li class="tc-2"><a href="#">HTML5</a></li> <li class="tc-2"><a href="#">JavaScript</a></li> <li class="tc-3"><a href="#">jQuery</a></li> <li class="tc-4"><a href="#">PHP</a></li> <li class="tc-5"><a href="#">Wordpress</a></li> </ul>
Then we add the following styles:
body { margin: 2em; padding: 0; font: 100% Arial, sans-serif; } #tag-cloud { width: 18em; margin: 0; padding: 1em; line-height: 1.4; background: #f5f5f5; border-radius: 12px; box-shadow: 3px 3px 3px #ccc; } #tag-cloud li { margin: 0 0.5em; display: inline; } #tag-cloud li a { color: #d34545; text-decoration: none; font-weight: bold; } #tag-cloud li a:hover { color: #fff; background: #d34545; padding: 3px 5px; border-radius: 6px; } #tag-cloud li.tc-2 a { font-size: 1.2em; } #tag-cloud li.tc-3 a { font-size: 1.4em; } #tag-cloud li.tc-4 a { font-size: 1.6em; } #tag-cloud li.tc-5 a { font-size: 1.8em; }
With jQuery, we'll use the base font size of each item to create our animation:
$(function() { $('li', '#tag-cloud').each(function() { var $li = $(this); var $a = $('a', $li); var fontSize = parseInt($a.css('fontSize')); $a.hover(function() { $a.stop(true, true).animate({ fontSize: fontSize + 4 + 'px' }, 'slow', 'easeOutBounce'); }, function() { $a.stop(true, true).animate({ fontSize: fontSize + 'px' }, 'slow', 'easeOutBounce'); }); }); });
You can see the demo below.