I will present in this article an example for how to create a menu with Lava Lamp jQuery .
Code HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<title>Lava Lamp Menu Tutorial</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.easing.1.3.js"></script>
<script type="text/javascript">
$(document).ready(function () {
//transitions
//for more transition, goto http://gsgd.co.uk/sandbox/jquery/easing/
var style = 'easeOutElastic';
//Retrieve the selected item position and width
var default_left = Math.round($('#lava li.selected').offset().left - $('#lava').offset().left);
var default_width = $('#lava li.selected').width();
//Set the floating bar position and width
$('#box').css({left: default_left});
$('#box .head').css({width: default_width});
//if mouseover the menu item
$('#lava li').hover(function () {
//Get the position and width of the menu item
left = Math.round($(this).offset().left - $('#lava').offset().left);
width = $(this).width();
$('#debug').html(left);
//Set the floating bar position, width and transition
$('#box').stop(false, true).animate({left: left},{duration:1000, easing: style});
$('#box .head').stop(false, true).animate({width:width},{duration:1000, easing: style});
//if user click on the menu
}).click(function () {
//reset the selected item
$('#lava li').removeClass('selected');
//select the current item
$(this).addClass('selected');
});
//If the mouse leave the menu, reset the floating bar to the selected item
$('#lava').mouseleave(function () {
//Retrieve the selected item position and width
default_left = Math.round($('#lava li.selected').offset().left - $('#lava').offset().left);
default_width = $('#lava li.selected').width();
//Set the floating bar position, width and transition
$('#box').stop(false, true).animate({left: default_left},{duration:1500, easing: style});
$('#box .head').stop(false, true).animate({width:default_width},{duration:1500, easing: style});
});
});
</script>
</head>
<body>
<div id="container">
<div id="lava">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Portfolio</a></li>
<li class="selected"><a href="#">About Us</a></li>
<li class="selected"><a href="#">Contact</a></li>
</ul>
<!-- If you want to make it even simpler, you can append these html using jquery -->
<div id="box"><div class="head"></div></div>
</div>
</div>
</body>
</html>
Code CSS :
body {
font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
font-size:15px;
background:#343434 url('images/background.jpg') repeat-x;
text-align:center;
}
a {
text-decoration:none;
color:white;
font-weight:bold;
}
#lava {
/* you must set it to relative, so that you can use absolute position for children elements */
position:relative;
text-align:center;
width:583px;
height:40px;
}
#lava ul {
/* remove the list style and spaces*/
margin:0;
padding:0;
list-style:none;
display:inline;
/* position absolute so that z-index can be defined */
position:absolute;
/* center the menu, depend on the width of you menu*/
left:110px;
top:10px;
/* should be higher than #box */
z-index:100;
}
#lava ul li {
/* give some spaces between the list items */
margin:0 18px;
/* display the list item in single row */
float:left;
}
#lava #box {
/* position absolute so that z-index can be defined and able to move this item using javascript */
position:absolute;
left:0;
top:0;
/* should be lower than the list menu */
z-index:50;
/* image of the right rounded corner */
background:url(images/pink/tail.jpg) no-repeat right center;
height:40px;
/* add padding 8px so that the tail would appear */
padding-right:18px;
/* self-adjust negative margin to make sure the box display in the center of the item */
margin-left:-15px;
}
#lava #box .head {
/* image of the left rounded corner */
background:url(images/pink/head.jpg) no-repeat 0 0;
height:40px;
/* self-adjust left padding to make sure the box display in the center of the item */
padding-left:10px;
}
#container {
text-align:left;
width:583px;
margin:0 auto;
}

