Wysuwane menu w 10 minut w wykorzystaniem CSS i jQuery



Wysuwane menu w 10 minut w wykorzystaniem CSS i jQuery

Dzisiaj zaprezentuje jak w niespełna 10 minut można stworzyć naprawdę zadziwiające menu nawigacyjne na stronę www. Technika ta pozwoli na zaoszczędzenia miejsca na stronie, ponieważ menu jest w pozycji fixed. Ponadto zastosowanie funkcji jQuery animate() wprowadza element bardzo przyjemnej animacji po najechaniu myszą.

Zobacz DEMO

Po pierwsze HTML

W pierwszej kolejności zacznijmy od HTML-a. Tutaj sytuacja jest naprawdę prosta, ponieważ potrzebujemy jedynie listy nieuporządkowanej:

  1. <ul id="boxNavi">
  2.         <li class="potwor1"><a href="#" title="Potwór 1"></a></li>
  3.         <li class="potwor2"><a href="#" title="Potwór 2"></a></li>
  4.         <li class="potwor3"><a href="#" title="Potwór 3"></a></li>
  5.         <li class="potwor4"><a href="#" title="Potwór 4"></a></li>
  6. </ul>

Lista posiada atrybut id w celu szybkiego jej znalezienia przez JavaScript, ponadto każdy z elementów listy posiada (w tym przypadku) unikatowy atrybut class niezbędny dla nas w późniejszym zidentyfikowaniu poszczególnych pozycji dla styli CSS.

Po drugie CSS

Menu powinno być dostępne dla użytkownika przez cały czas, nawet w przypadku gdy użytkownik znajduje się poza łamaniem strony, więc pozycje menu ustawiamy na fixed:

  1. ul#boxNavi {
  2.     position: fixed;
  3.     margin: 0px;
  4.     padding: 0px;
  5.     top: 60px;
  6.     left: 0px;
  7.     list-style: none;
  8.     z-index:9999;
  9. }
  10. ul#boxNavi li {
  11.     width: 100px;
  12. }

Dodatkowo z uwagi na fakt, że menu nie powinno być przysłaniane przez żadne inne elementy znajdujące się na stronie, ustawiamy atrybut z-index na 9999 (czyli najwyższe na stronie :) )

Kolejny element to linki w liście. Poza standardowymi atrybutami warto zauważyć minusowy atrybut margin-left, został on wprowadzony w celu ukrywania elementów menu poza obszarem widzialnym na stronie. Później przy pomocy JavaScriptu, elementy te będą pokazywane bądź ukrywane w zależności czy użytkownik najedzie na lub zjedzie z danego elementu.

  1. ul#boxNavi li a {
  2.     display: block;
  3.     width: 100px;
  4.     height: 100px;    
  5.     background-color:#000;
  6.     background-repeat:no-repeat;
  7.     background-position:center center;
  8.     border:1px solid #fff;
  9.     margin-left: -85px;
  10. }

Na koniec grafika, czyli dodajmy ikonki do poszczególnych pozycji menu:

  1. ul#boxNavi .potwor1 a{background-image: url(../images/1.png);}
  2. ul#boxNavi .potwor2 a{background-image: url(../images/2.png);}
  3. ul#boxNavi .potwor3 a{background-image: url(../images/3.png);}
  4. ul#boxNavi .potwor4 a{background-image: url(../images/4.png);}

Wprawmy wszystko w ruch – JavaScript

Na potrzeby menu wykorzystamy bibliotekę do JavaScriptu – jQuery (jak zwykle). By wprawić nasze menu w ruch wykorzystamy funkcje jQuery – animate().

  1. $(function() {
  2.     $('#boxNavi > li').hover(
  3.         function () {
  4.             $('a',$(this)).stop().animate({'marginLeft':'-5px'},300);
  5.         },
  6.         function () {
  7.            $('a',$(this)).stop().animate({'marginLeft':'-80px'},300);
  8.          }
  9.     );
  10. });

Działanie skryptu jest naprawdę proste. Na zdarzenie hover link znajdujący się w elemencie listy, którego dotyczy zdarzenie zmienia wartość margin-left na -5px, a dzięki funkcji jQuery, cała czynność jest przyjemnie animowana i trwa 300ms. W momencie gdy zjedziemy kursorem z elementu, wykonywany jest drugi fragment kodu, a mianowicie wykorzystując tą samą animację atrybut margin-left jest zmieniany na -80px, co powoduje jego częściowe ukrycie. Ważną funkcją która również jest wywoływana jest stop(), która zatrzymuje animacje wszystkich elementów znajdujacych się na stronie – uzyskujemy dzięki temu efekt zatrzymania i cofnięcia animacji w przypadku szybkiego przeskakiwania pomiędzy elementami menu.

Końcowe udoskonalenia

No i proszę menu jest już działające i w pełni funkcjonalne, teraz możemy się zastanowić co jeszcze możemy dla niego zrobić.

Otóż możemy zaokrąglić rogi elementów menu. I tu mamy 2 opcje. Za pomocą CSS-ów, ale nie wspierając Internet Explorera, wystarczy że do styli dodamy:

  1. ul#navigation li a {
  2.     display: block;
  3.     margin-left: -85px;
  4.     width: 100px;
  5.     height: 70px;
  6.     background-color:#CFCFCF;
  7.     background-repeat:no-repeat;
  8.     background-position:center center;
  9.     border:1px solid #AFAFAF;
  10.     -moz-border-radius:0px 10px 10px 0px;
  11.     -webkit-border-bottom-right-radius: 10px;
  12.     -webkit-border-top-right-radius: 10px;
  13.     -khtml-border-bottom-right-radius: 10px;
  14.     -khtml-border-top-right-radius: 10px;
  15. }

Druga opcją jest wykorzystanie jQuery rounded corners, dzięki któremu mamy wsparcie także dla IE. Użycie pluginu jest naprawdę proste, ponieważ po zlinkowaniu skryptu organiczna się do wywołania funkcji na document ready

  1. $('#boxNavi a').corners("10px 0px");

Innym udoskonaleniem może być dodanie przeźroczystości, co możemy zrobić również za pośrednictwem szablonów CSS:

  1. ul#navigation li a {
  2.     display: block;
  3.     margin-left: -85px;
  4.     width: 100px;
  5.     height: 70px;
  6.     background-color:#CFCFCF;
  7.     background-repeat:no-repeat;
  8.     background-position:center center;
  9.     border:1px solid #AFAFAF;
  10.     -moz-border-radius:0px 10px 10px 0px;
  11.     -webkit-border-bottom-right-radius: 10px;
  12.     -webkit-border-top-right-radius: 10px;
  13.     -khtml-border-bottom-right-radius: 10px;
  14.     -khtml-border-top-right-radius: 10px;
  15.     opacity: 0.6;
  16.     filter:progid: DXImageTransform.Microsoft.Alpha(opacity=60);
  17. }

Zobacz DEMO

Related Posts with Thumbnails
Prześlij dalej:
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicious BlinkList Furl

5 komentarze do “Wysuwane menu w 10 minut w wykorzystaniem CSS i jQuery”

Witaj, mam jedną prośbę. Możesz mi wytłumaczyć co robi $this w $('a',$(this)).stop()....)

commenter

Jasne. this odnosi się do elementu, którego dotyczy zdarzenie – w tym przypadku konkretnego elementu #boxNavi > li.
Na potrzeby prezentowanego menu chcemy, aby link (element a) był animowany – ale nie chcemy żeby animowane były wszystkie elementy a – co miałoby miejsce w przypadku wywołania $('a').stop().animate({'marginLeft':'-5px'},300);, a chcemy, żeby animował się element a zawarty w elemencie listy którego dotyczy zdarzenie. (mam nadzieję ze nie zagmatwałem za bardzo :) )
Dlatego nadajemy selektoromi kontekst $(‘a’,$(this)) – czyt. znajdź element a, ale szukaj we fragmencie DOM zawartym w $this (czyli #boxNavi > li którego dotyczy zdarzenie hover).

Mam nadzieję, że ot trochę wyjaśniło sprawę –Cheers

super efekt i tak naprawdę w kilka linijek kodu :)

commenter

Ja nie mam siły pisać tutoriali, dlatego bardzo fajnie, że ktoś tworzy takie materiały. ;] Niby wszystko jest proste, ale czasem dobrze jest mieć referencję w razie gdyby coś nie działało. ;]

no to prawda, zawsze przyda się dobrze napisany tutorial :) poza tym dobrze wiedzieć z tą funkcją stop() :)

Zostaw komentarz:

Imię (wymagane):
Email:
Strona www:
Komentarz (wymagany):
XHTML: W komentarzach możesz korzystać z nastepujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
-