Drzewiaste menu
W niniejszym artykule opiszę projekt drzewiastego menu. Cały kod oraz wszystkie potrzebne pliki są dostępne do pobrania w dziale freebies. Na początek przedstawię przykładowy kod html menu.
<ul id="menu"> <li id="tutorialeid"><a>Tutoriale</a></li> <li id="tutoriale"> <ul class="menu2"> <li><a href="http://google.pl">Photoshop</a></li> <li><a href="http://google.pl">Office</a></li> <li><a href="http://google.pl">Flash</a></li> <li id="webdesignid"><a>Webdesign</a></li> <li id="webdesign"> <ul class="menu3"> <li><a href="http://google.pl">HTML</a></li> <li><a href="http://google.pl">CSS</a></li> <li><a href="http://google.pl">JavaScript</a></li> <li><a href="http://google.pl">PHP</a></li> </ul></li> </ul> </li> <li id="artykulyid"><a>Artykuły</a></li> <li id="artykuly"> <ul class="menu2"> <li><a href="http://google.pl">Grafika</a></li> <li><a href="http://google.pl">Webdesign</a></li> <li><a href="http://google.pl">jQuery</a></li> <li><a href="http://google.pl">Matematyka</a></li> <li><a href="http://google.pl">Photoshop</a></li> <li><a href="http://google.pl">Inne</a></li> </ul> </li> </ul>Menu będzie działało na następującej zasadzie: np. po kliknięciu na element li o identyfikatorze tutorialeid rozwinie się podmenu o identyfikatorze tutoriale. Widać zatem, że nazwa tutoriale łączy klikany element listy z odpowiednią podlistą do rozwinięcia. Styl css menu przedstawia poniższy listing
ul.menu2 { list-style-type: none; margin-top: 0px !important; margin-top: -10px; } ul.menu2 li{ list-style-image: url('images/page.gif'); margin: 0; padding: 0; } ul.menu3 { margin-top: 0px !important; margin-top: -10px; } ul.menu3 li{ list-style-image: url('images/page.gif'); } #menu{ list-style-type: none; list-style-image: url('images/folder.gif'); font: 12px Arial, Helvetica, sans-serif; } a { cursor: pointer; text-decoration: none; color: black; } li#webdesignid { list-style-image: url('images/folder.gif'); } li#tutoriale, li#artykuly, li#webdesign { list-style-type: none; list-style-image: none; }Klasy menu2 i menu3 reprezentują poziomy zagnieżdżenia listy. Warto również zwrócić uwagę na obrazki: folder.gif – reprezentuje element nierozwiniętej listy, folder_page.gif – element rozwiniętej listy, natomiast page.gif – zwykły element listy. Oczywiście obrazki te można podmienić na własne. Na zakończenie pozostaje tylko kod JavaScript.
function init() { function toggle(){ var zmm = this.getAttribute('id'); var lista = zmm.substr(0,zmm.length-2); var stylelem=document.getElementById(lista).style; var wysw = document.getElementById(lista+'id').style; if (stylelem.display=="none"){ stylelem.display="block"; wysw.listStyleImage='url(images/folder_page.gif)'; } else{ stylelem.display="none"; wysw.listStyleImage='url(images/folder.gif)'; } } var wszystkie_li = document.getElementsByTagName('li'); for(var i=0;i<wszystkie_li.length;i++) { if(wszystkie_li[i].getAttribute('id')) { if(wszystkie_li[i].getAttribute('id').substring(wszystkie_li[i].getAttribute('id').length-2)=='id') { var zm = wszystkie_li[i].getAttribute('id'); dp_none = wszystkie_li[i].getAttribute('id').substring(0,wszystkie_li[i].getAttribute('id').length-2); document.getElementById(dp_none).style.display="none"; document.getElementById(zm).onclick=toggle; } } } } window.onload=init;