Register now or login here to start promoting your blog and your favourite articles.
jQuery Flipping Menu Tutorial using backgroundPosition Plugin
16 Sep 2009 - 9 Comments
Learn how to create a simple, but elegant menu by animating background with jquery backgroundPosition plugin. It's simple, but the effect is really good.
Author: kevin | Source: queness
Goin Nutty
Demonstration Download

Introduction

Sometimes, simplicity is the most beautiful thing. This tutorial uses images and jQuery animate plus backgroundPosition Plugin to make the flipping/rotating effect. This will be a simple tutorial and I believe it has a great potential to become something really creative. Check out the demo and I hope you all will like it.

1. HTML

As usual, we want to keep the HTML as simple as possible. I guess this is the minimal code for a menu.

	<b>Horizontal Menu</b>
	<ul id="hor">
		<li><a href="#" class="home">Home</a></li>
		<li><a href="#" class="download">Download</a></li>
		<li><a href="#" class="contact">Contact</a></li>

	</ul>

	<div class="clear"></div>
	<br/><br/>

	<b>Vertical Menu</b>
	<ul id="ver">
		<li><a href="#" class="home">Home</a></li>
		<li><a href="#" class="download">Download</a></li>
		<li><a href="#" class="contact">Contact</a></li>
	</ul>

2. CSS

This time, we don't have to do much with the CSS. The following is just a simple configuration of a menu. With a little bi of CSS Sprites used for the menu images, the rest are just basic CSS.

/* CSS Style for Horizontal Menu */	
#hor {
	list-style:none;
	padding:0;
	margin:0;	
}

	#hor li {
		float:left;
		padding:5px;
	}

	#hor a {
		display:block;
		height: 12px;
		text-indent:-999em;
	}
			
	#hor a.home {
		width:46px; 
		background:url(vHome.gif) no-repeat 0 0;	
	}

	#hor a.download {
		width:94px; 
		background:url(vDownload.gif) no-repeat 0 0;	
	}
			
	#hor a.contact {
		width:74px; 
		background:url(vContact.gif) no-repeat 0 0;	
	}


/* CSS Style for Vertical Menu */	
	
#ver {
	list-style:none;
	padding:0;
	margin:0;	
}
		
	#ver li {
		padding:2px;	
	}
		
	#ver li a {
		display:block;
		height:12px;
		text-indent:-999em;
	}			
			
	#ver a.home {
		width:47px; 
		background:url(hHome.gif) no-repeat 0 0;	
	}

	#ver a.download {
		width:95px; 
		background:url(hDownload.gif) no-repeat 0 0;	
	}
			
	#ver a.contact {
		width:74px; 
		background:url(hContact.gif) no-repeat 0 0;	
	}
			
			
	.clear {
		clear:both;	
	}	

3. Javascript

With the background position jquery plugin, what we need to do is to set the backgroundPosition properties to the right top and left value.

	
$(document).ready(function () {

	/* Horizontal Menu */
	$('#hor li a').hover(
		function () {
			//convert current height to negative value
			height = $(this).height() * (-1);
			$(this).stop().animate({'backgroundPosition':'(0 ' + height + ')'}, {duration:200});	
		}, 
			
		function () {
			//reset the top position
			$(this).stop().animate({'backgroundPosition':'(0 0)'}, {duration:200});	
		}
	);

	/* Vertical Menu*/
	$('#ver li a').hover(
		function () {
			//convert current width to negative value
			width = $(this).width() * (-1);
			$(this).stop().animate({'backgroundPosition':'(' + width + ' 0)'}, {duration:200});	
		}, 
			
		function () {
			//reset the left position
			$(this).stop().animate({'backgroundPosition':'(0 0)'}, {duration:200});	
		}
	);
		
});

Conclusion

Like this tutorials? You can express your gratitude by visiting my sponsors on the sidebar, buy me a drink in the bottom of the page or, just bookmark it and help me to spread this tutorial to the rest of the people who you think they are interested! :) Thanks!

Demonstration Download

Copyright & Usage

The effects and techniques demonstrated in tutorials on Queness can be used in whatever manner you wish without attribution. You cannot copy whole tutorials (unless permission is given), either in English or translated to another language.

Share This Post to Support Me! :)


Comments

scott bourn on 5 Mar 2010 says:
hi there

im trying to get this to work with my wordpress them but i can :-(

my site is the one im trying to add it to ??

where do i add this
$(document).ready(function () {

/* Horizontal Menu */
$('#hor li a').hover(
function () {
//convert current height to negative value
height = $(this).height() * (-1);
$(this).stop().animate({'backgroundPosition':'(0 ' + height + ')'}, {duration:200});
},

function () {
//reset the top position
$(this).stop().animate({'backgroundPosition':'(0 0)'}, {duration:200});
}
);
mel on 7 Feb 2010 says:
Hi,

it's ok i figured it out after going back to it after a couple of hours later... must have been tired.

Great tutorial by the way.
mel on 6 Feb 2010 says:
Hi,

i followed your tutorial, altering only
the images used. i want to do two things... 1, have a larger space between the horizontal images...
2, this is really troublesome... i don't want my text to float on the left of the horizontal menu, instead i want it centred in the page, i have tried nearly everything... it's probably something really simple, any help would be great, i can post my css code if that will help.

thanks
bastr3 on 18 Jan 2010 says:
thanks ... how i can select one link?
I mean when I press on the link within the image remains fixed and the rest of the links work normally, and when you press on the other link interface Previous become animate and the link that you press them become stable
sara on 12 Jan 2010 says:
thanks will try that.
kevin on 11 Jan 2010 says:
hi sara, sorry for the late reply. yes, selected class would be the way to go... you need to declare selected and set the background position to the active state. that should work.
sara on 10 Jan 2010 says:
yeah i know how you feel... i have tested it on another computer with internet explorer and it seems to be fine so i'm thinking it may just be that computer...

Also sorry if this seems a bit dumb but how would i keep the button from rolling back to it's original state once the viewer is on the page it links to... i have tired adding 'selected' to the class but it doesn't seem to be working...

Thanks
kevin on 6 Jan 2010 says:
hi sara... have you tried to remove all the margin and padding of the item and set a fixed height... i hate ie6....
sara on 6 Jan 2010 says:
hi,

i recreated this menu for my website and have horizontly centred it on my page, but when checking it on Internet Explorer 6 and above the images seem to be visable both top and bottom of rollover part.

i have tried everything, no problems in safari or firefox. Any help?
  • Page :
  • 1

Leave a comment

Subscribe RSS Subscribe RSS, Keep yourself updated with queness latest posts!
Pixel Crayons Really learn it! Digging into Wordpress

Buy wholesale computers directly from China at DHgate.com

Discover the tools to build your e-Commerce Site with Netfirms

  •  
  •  
  •  
  •  
  •  

Community News

Recent Comments

Random Posts


View all posts and news Back to top

About the Author

A web designer and developer who is passionate and keen on contributing to the web development industry. Feel free to say hi to me, or follow me on twitter.

Kevin Liew

Partner

  • Web and Designers
  • CSS Style
  • PV.M Garage Blogzine - (Italian)
  • TutsValley
  • Designrfix
  • CoolVibe
  • Web Developer Juice
  • Denbagus
  • Web Hosting Secret Revealed
  • PSD to HTML Conversion
  • BlueHost