A végeredmény itt megtekinthető.
A menü alapelve a következő:
- egy menüpont két részből áll, az egyik alap állapotban jelenik meg, a másik pedig a hover esemény bekövetkezésekor
- a hover állapot az alapállapot “fölött” jelenik meg, és a CSS-ben meghatározott pozíciónak, magasságnak és overflownak köszönhetően alap esetben nem látható
- a hover esemény bekövetkezésekor a normál állapothoz és a hover állapothoz tartozó rész is lentebb csúszik, az overflow miatt pedig csak a hover marad látható
- out eseménykor a folyamat visszafelé játszódik le és mindkét rész visszakerül az eredeti pozíciójába
Az elkészítés menete
- A dokumentum modell létrehozása:
A megszokott webszerkesztő programunk segítségével (Dreamweaver, Notepad++, Intype, stb) hozzunk létre egy új html dokumentumot, a következő tartalommal:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body> <!-- begin content --> <!-- end content --> </body> </html>
A tartalmi részben alakítsuk ki a menünk szerkezetét, ami alapvetően egy lista, ahol a listaelemek két részből állnak, egy alap állapotból és egy hover állapotból:
<!-- begin content --> <div id="content"> <!-- begin menu --> <ul id="menu"> <li> <p class="hover"> <a href="#">Home</a> </p> <p class="normal"> <a href="#">Home</a> </p> </li> <li> <p class="hover"> <a href="#">Blog</a> </p> <p class="normal"> <a href="#">Blog</a> </p> </li> <li> <p class="hover"> <a href="#">Porftolio</a> </p> <p class="normal"> <a href="#">Portfolio</a> </p> </li> <li> <p class="hover"> <a href="#">Contact</a> </p> <p class="normal"> <a href="#">Contact</a> </p> </li> </ul> <!-- end menu --> </div> <!-- end content -->
- Szükséges scriptek elhelyezése a dokumentumban:
A </body> tag elé írjuk be a következő sort:<!-- jQuery --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <!-- end jQuery-->
A dokumentum végére helyezett script “include” elősegíti a weboldalunk gyorsabb betöltődését.
- A CSS megírása:
Ebben a példában nem hoztam létre külön css filet, a szükséges stílusinformációkat a header részben helyeztem el a </head> tag előtt:<style type="text/css"> /* BODY */ body{ color: #eee; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin: 0px; padding: 0px; } a{ color: #eee; font-weight: bold; outline: none; text-decoration: none; } /* MENU */ #menu{ float: left; height: 30px; /* a menu magassaganak meghatarozasa, hogy csak a hover vagy a normal allapotot lassuk */ list-style-type: none; margin: 0px; overflow: hidden; /* csak a 30px magas resze latszik a menupontoknak */ padding: 0px; position: relative; /* fontos, hogy a jQuery hasznalataval manipulalni tudjuk az egyes lista elemeket */ } #menu li{ float: left; /* a lista elemek vizszintes sorba torteno rendezesehez */ height: 60px; /* a hover es a normal allapot egyuttes magassaga */ overflow: hidden; position: relative; /* fontos, hogy a jQuery hasznalataval manipulalni tudjuk az egyes lista elemeket */ top: -30px; /* igy a menupont hover resze kikerul a lathato teruletrol es a normal allapot jelenik meg */ } #menu p{ line-height: 30px; margin: 0px; padding: 0px 10px 0px 10px; } .hover{ background: #003495;/* bongeszok, amik nem tamogatjak a css-ben meghatarozott gradientet */ background: -webkit-gradient(linear, left bottom, left top, from(#1b4eb3), to(#003495)); /* safari, chrome */ background: -moz-linear-gradient(top, #1b4eb3, #003495); /* firefox */ border-left: 1px solid #275fcd; border-left: 1px solid #022c7a; } .normal{ background: #2d2d2d; /* bongeszok, amik nem tamogatjak a css-ben meghatarozott gradientet */ background: -webkit-gradient(linear, left bottom, left top, from(#595959), to(#2d2d2d)); /* safari, chrome */ background: -moz-linear-gradient(top, #595959, #2d2d2d); /* firefox */ border-left: 1px solid #727272; border-right: 1px solid #212121; } </style>Aki korábban foglalkozott CSS-el, annak túl sok újdonság nincs a fenti kódban.
A fontosabb részek mellé külön odaírtam, hogy melyikre miért van szükség. - Az animáció kialakítása:
A létrehozott menünk, az eddig megírt kóddal is teljesen műkőképes, de a hover animáció hozzáadása még csak most következik. Viszont ha valaki kikapcsolja a javascript futtatását a böngészőjében, az a jelenlegi állapotot fogja látni.A jQuery script beillesztése alá írjuk be a következő kódrészletet:<!-- menu script --> <script type="text/javascript"> $(function(){ //ide jon a kod, ami csak a dokumentumfa teljes betoltodeset kovetoen kerul futtatasra $("#menu li").hover( function(){ //hover esemeny bekovetkezesekor lefuto animacio $(this).animate({ 'top': '0px' //az animacio lefutaskor modositani kivant tulajdonasg es ertek - lentebb toljuk a lista elemet, igy a jelenleg -30px-nel kezdodo hover resz valik lathatova },{ duration: 150, //animacio sebessege queue: false //erre azert van szukseg, hogy ha valaki oda vissza mozgatja az egeret a menupontok folott, akkor is csak egyszer jatszodjon le az animacio }); }, function(){ //out esemeny bekovetkezesekor lefuto animacio $(this).animate({ 'top': '-30px' //visszamozgatjuk a lista element a kezdo allapotba },{ duration: 150 //animacio sebessege }); }); }); </script> <!-- end menu script -->A fenti kódban mghatározzuk, hogy melyik elem milyen eseményét szeretnénk figyelni ($(“#menu li”).hover), illetve, hogy az esemény bekövetkezésekor milyen funkciókat szeretnénk futtatni. A jQuery lehetőséget biztosít arra, hogy a hover és out eseményeket “egyszerre” kezeljük:
.hover(hover_esemeny_bekovetkezesekor, out_esemeny_bekovetkezesekor)
Ez a menü csak egy egyszerű példa arra, hogy viszonylag kis idő ráfordításával, mennyivel látványosabbá tehetjük a weboldalaink statikus elemeit.





Szép és látványos, és mindenek felett elég egyszerű.
Üdv.: Zozo