Mantenere il menu fisso allo scroll della pagina

Mantenere il menu fisso allo scroll della pagina
Mantenere il menu fisso allo scroll della pagina

L'articolo di oggi tratta un argomento molto discusso e richiesto nei forum ai quali partecipo: Come avere il menu di navigazione fisso dopo che scorriamo la pagina verso il basso.

E' una funzionalità molto importante e comoda sia da desktop e, soprattutto, da smartphone in quanto, se una pagina contiene molti contenuti e si vuole tornare al menu per selezionare un altro link, la si deve scorrere verso l'alto. Ne va della praticità ed usabilità del sito.

In questo modo, invece, offriamo all'utente quello di cui necessita senza infastidire la sua permanenza nel nostro sito.

Di cosa abbiamo bisogno? HTML, CSS3 e della libreria jQuery, oltre a qualche rigo di javascript nella head della pagina.

Il codice HTML

La pagina demo che verrà presentata alla fine del tutorial conterrà nell'ordine:

il cui codice è:

<div class="header">
	LOGO
</div>

<div class="nav-container">		
	Home | Blog | Contatti
</div>

<div class="wrapper">
	Contenuti....
</div>

Il codice CSS

.header{
background:lightblue;
padding:3em .5em; 
}

.f-nav{ z-index: 9999; position:fixed; top:0; width:100%;}

.nav-container{
height: 42px;
width:100%;
background:#f0f0f0;
border-bottom:1px solid #ddd;
}

.nav-container ul {list-style:none; line-height:42px; }

.nav-container ul li, .nav-container ul li a { display:inline-block;}

.wrapper{
min-height:2500px;
max-width:500px;
margin: 0 auto;
padding-top:50px;
text-align:left;
}

Notare la classe f-nav, volutamente in grassetto, perchè verrà "aggiunta" al menu tramite il codice jQuery.

Meglio avere uno z-index molto alto così da evitare sovrapposizioni da parte di altri elementi.

Il codice Javascript

Oltre al link della libreria jQuery nella head della pagina, si deve aggiungere il seguente codice, prima del tag <body> di chiusura:

jQuery("document").ready(function($){	
	var nav = $('.nav-container');
	
	$(window).scroll(function () {
		if ($(this).scrollTop() > 200) {
			nav.addClass("f-nav");
		} else {
			nav.removeClass("f-nav");
		}
	}); 
});

Cosa è scritto in queste righe di codice?

Se stiamo visualizzando la pagina e scorriamo verso il basso per una altezza maggiore di 200px, al menu viene aggiunta la classe f-nav.

Di conseguenza il menu rimarrà fermo nella parte alta del monitor o dello smartphone.

Diversamente, se non viene compiuta nessuna azione di scorrimento, il menu rimarrà sempre nella sua posizione iniziale e non verrà aggiunta alcuna classe.

Per vedere la pagina in azione e comprendere meglio tutto quello che è stato scritto, ho preparato un articolo demo nel quale è possibile vedere il .