immagine avatar

Ciao come puoi notare ho dato una bella rinfrescatina al mio blog!
Attendo un tuo feedback, per suggerimenti e ulteriori proposte di miglioramento, ma anche, sperando che non ci siano, segnalazioni di errori o malfunzionamenti del blog. Buona lettura!

Menu Verticale con Effetto Fisarmonica – versione history

di MaiNick | 22 apr 2011 | jQuery | 11 Commenti

Menu Verticale con jQuery

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']) &amp;&amp; $_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>

Demo Download

Tags: , ,

11 Commenti

  1. joe scrive:

    Che dire sie un grande..

    Grazie 1000

    n.b.
    :) però devo ancora provarlo ahahaha

    Ciao

  2. mik scrive:

    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

    • MaiNick scrive:

      Ciao @mik forse non ho capito bene il tuo domandone, comunque togliendo la proprieta display: none; dal selettore del sotto menu .sub-menu tutti 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.

  3. Pierhagi scrive:

    Ciao

    è possibile fare il menù visualizzando le Categorie in orizzontale e le Sottocategorie che rimangano sempre in verticale?

    Pier

  4. Mario scrive:

    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..

    • MaiNick scrive:

      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 .css tramite 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.

  5. doc scrive:

    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….

  6. doc scrive:

    grazie! ci smanetto un po’!!

  7. Nick scrive:

    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!

Trackbacks

  1. [...] pubblicato un secondo tutorial in cui ho riportato le modifiche richieste nei feedback, come rendere la voce del menu principale [...]

Lascia un Commento

^ Torna su