
Dopo aver ricevuto abbastanza e-mail e feedback in generale riguardo ad alcune richieste di modifiche, ho deciso di sviluppare una seconda versione del menu verticale con effetto a fisarmonica sperando di soddisfare la maggior parte degli utenti.
In questa seconda versione del tutorial aggiungiamo la possibilità di aprire l’elenco a tendina tramite un secondo bottone così da rimanere al link della voce del menu principale la sua funzione predefinita.
Documento HTML
Quello che andiamo a cambiare alla nostra pagina HTML è l’aggiunta di una freccia down che avrà la funzione di avviare l’effetto a fisarmonica per visualizzare le voci del sotto menu:
<li class="menu"> <!-- costituisce ogni sezione del menu principale -->
<ul>
<!-- titolo della sezione che fa aprire il sotto menu -->
<li class="title">
<a href="http://www.mainickweb.com/category/firefox/">Categoria Firefox</a>
<img src="bullet_arrow_down.png" />
</li>
<li class="sub-menu sub-menu-open">
<ul>
<li><a href="http://www.mainickweb.com/hack-css-per-firefox-opera-safari-e-internet-explorer/">Articolo 1</a></li>
<li><a href="http://www.mainickweb.com/firefox-3-le-caratteristiche/">Articolo 2</a></li>
</ul>
</li>
</ul>
</li>
Aggiungiamo un’altra classe CSS sub-menu-open all’elenco del sotto menu per indicare quale di default è aperto inizialmente al caricamento della pagina.
Foglio di stile CSS
Abbiamo modificato le proprietà di alcuni selettori per utilizzare la freccia come bottone di apertura, aggiunta la classe per il sotto menu aperto di default e aggiunto il cursore di tipo puntatore quando andiamo sopra all’immagine:
ul {
margin: 0;
padding: 0;
}
ul.container {
width: 240px;
margin: 0 auto;
padding: 50px;
}
li {
list-style: none;
text-align: left;
}
li.menu {
/* Voci dell'elenco principale */
width: 100%;
padding: 5px 0;
}
li.title {
display: block;
position: relative;
width: 200px;
height: 34px;
padding: 10px 20px 0;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
background-color: #cc0000;
}
li.title:hover {
background-color: #f40000;
}
li.title a {
/* Voce del menu principale */
color: #ffffff;
font-family: BPreplay,Arial,Helvetica,sans-serif;
font-size: 21px;
overflow: hidden;
}
li.title a:hover {
text-decoration: none;
}
li.title a span {
/* Questo span agisce come parte finale della sezione title */
display: block;
position: absolute;
top: 0;
right: 0;
width: 4px;
height: 44px;
}
li.title img {
/* freccia apertura sotto menu */
float: right;
cursor: pointer;
}
.sub-menu {
/* Sotto menu */
display: none;
width: 100%;
padding-top: 5px;
}
.sub-menu li {
/* Voci del sotto menu */
margin: 5px 0;
padding: 4px 18px;
border: 1px solid #40392c;
background-color: #2F2F2F;
color: #cccccc;
}
.sub-menu-open {
display: block;
}
Effetti con jQuery
Gli script che andremo ad includere nella pagina sono gli stessi, ma bisogna dare uno sguardo allo script che gestisce l’effetto per vedere le modifiche apportate:
$(document).ready(function(){
/* Cambiare l'effetto da utilizzare */
$.easing.def = "easeOutBounce";
/* Associare una funzione all'evento click sul link */
$('li.title img').click(function(e){
/* Trovare l'elenco a discesa che corrisponde al menu cliccato: */
var subMenu = $(this).parent().next();
/* Trovare il sotto menu che corrisponde alla voce cliccata */
$('.sub-menu').not(subMenu).slideUp('slow');
subMenu.stop(false,true).slideToggle('slow');
/* Prevenire l'evento predefinito (che sarebbe di seguire il collegamento) */
e.preventDefault();
})
});
L’unica modifica effettuata riguarda il selettore su cui catturiamo l’evento click per aprire il corrispondente sotto menu.
Versione History
Ho deciso di chiamare questo secondo tutorial in questo modo perché un’altra importante richiesta ricevuta è quella di mantenere il sotto menu aperto nella pagina raggiunta da un link di uno dei sotto menu.
<?php $array_label_menu = array('jquery' => '', 'php' => '', 'css' => '', 'firefox' => '') ?>
<?php $submenu_open = (isset($_GET['menu']) && $_GET['menu']!='') ? $_GET['menu'] : 'php'; ?>
<?php $array_label_menu[$submenu_open] = 'sub-menu-open'; ?>
Utilizzando un array indichiamo come chiavi di valori nulli le parole che specificano la nostra voce del menu principale e utilizzando una valore che ci inviamo tramite l’array globale $_GET andiamo a inserire la classe CSS sub-menu-open come valore alla chiave corrispondete al $_GET['menu'] inviato.
Adesso vediamo come si modifica la parte riguardo al menu:
<li class="menu"> <!-- costituisce ogni sezione del menu principale -->
<ul>
<!-- titolo della sezione che fa aprire il sotto menu -->
<li class="title">
<a href="http://www.mainickweb.com/category/firefox/?menu=firefox">Categoria Firefox</a>
<img src="bullet_arrow_down.png" />
</li>
<li class="sub-menu <?php echo $array_label_menu['firefox'] ?>">
<ul>
<li><a href="http://www.mainickweb.com/hack-css-per-firefox-opera-safari-e-internet-explorer/?menu=firefox">Articolo 1</a></li>
<li><a href="http://www.mainickweb.com/firefox-3-le-caratteristiche/?menu=firefox">Articolo 2</a></li>
</ul>
</li>
</ul>
</li>
Tags: menu effetto easing, menu verticale, menu verticale jquery







































Che dire sie un grande..
Grazie 1000
n.b.
però devo ancora provarlo ahahaha
Ciao
ciao e complimenti per il menù. domandone.
sto usando il tuo codice per un menù dinamico, che pesca voci da un db in maniera non sequenziale, ma praticando degli ordinamenti.
ho mixato i codici, e se lancio la pagina con la proprietà disattivando
display: none;
mi stampa correttamente tutte le voci.
quando poi però vado a chiudere e riaprire il menù, per ognuno degli elementi title mi espande solamente una voce submenu.
hai idea di come si possa risolvere?
grazie e buona pasqua
Ciao @mik forse non ho capito bene il tuo domandone, comunque togliendo la proprieta
display: none;dal selettore del sotto menu.sub-menututti gli elenchi dei sotto menu saranno visualizzati al caricamento della pagina, poi cliccando sulla freccia di una delle voci del menu principale sarà eseguito lo stato contrario a quello corrente; dunque se aperto verrà chiuso e attualmente farà lo stesso per tutti gli altri sotto menu.Se non ho individuato il tuo problema o almeno non ti ho chiarito bene le idee, sono qui a disposizione.
Buona pasqua anche a te.
Ciao
è possibile fare il menù visualizzando le Categorie in orizzontale e le Sottocategorie che rimangano sempre in verticale?
Pier
Ciao,siccome non sono un genio in php..la prima parte del codice dove la mettiamo?ho scaricato i file e ho fatto come hai scritto ma quando clicco su uno dei sottomenu la pagine non viene caricata..
Ciao Mario,
innanzitutto scusami se ti rispondo solo ora, o forse avrai già risolto il tuo dubbio, ma comunque rispondo perché può essere utile a qualche altro amico nostro.
Allora la prima parte dell’articolo, il codice del paragrafo “Documento HTML”, rappresenta il menu dunque lo inserisce nella pagina in cui visualizzare il tuo menu. La parte di codice riferita allo stile del menu “Foglio di stile CSS”, lo puoi incorporare alla pagina tramite l’elemento
all’interno della sezione, oppure collegarlo alla pagina in un documento.csstramite l’elemento, da inserire sempre nella sezione. Lo stesso discorso vale per il codice JavaScript del paragrafo “Effetti con jQuery”, lo puoi incorporare o collegarlo alla pagina tramite l’elemento.Se invece ti riferivi solo al codice PHP, quindi all’ultimo paragrafo “Versione History”, la prima parte del codice va inserito in ogni pagina navigabile da menu. Questa è l’unica differenza rispetto all’altro articoli per creare un menu verticale con jQuery.
Ciao,
complimenti per lo script….
sto cercando una versione che gestisca l’hover del mouse (apertura automatica) e che visualizzi un contenuto con un immagine o html.
in effetti piu’ che un menu sarebbe uno slider verticale con pannelli….
Ciao doc, e grazie.
Forse ti può essere utile questo articolo.
grazie! ci smanetto un po’!!
Ciao Orazio,
il tuo script è grandioso. Vorrei applicarlo al mio sito web. Ti spiego. Se visiti il mio sito noterai che in basso ci sono tante diverse categorie di annunci. Vorrei sostituire le categorie in forma di menu espandibile. Quindi richiamare le variabili dal file PHP all’interno del menu.
Come si può fare? Io non sono un programmatore, quindi ho bisogno di spiegazioni un pò semplificate. Ciao grande!