Come realizzare header fissa con animazione

In questo articolo vediamo come ottenere una semplice header fissa e con un pizzico di animazione. Può essere utile a volte avere un header che rimane fissa allo scroll della pagina, specie quando si hanno nel sito molte pagine sviluppate in altezza.

Per prima cosa creiamo l’header, che nel caso dell’esempio contiene solamente il logo. A livello di codice HTML, l’header sarà costituita da due div, uno in posizione fissa e l’altro in posizione relativa. Quest’ultimo lo utilizzeremo soltanto per abbassare il contenuto della pagina, assegnandogli un’altezza per evitare che tale contenuto finisca sotto l’header fissa.

HTML

<header class="site-header">        
    <div class="header-fixed">
        <h1>
            <a href="http://persaper.it/"><img src="img/persaper.png" alt="Per saper"></a>
        </h1>
    </div>
    <div class="header-relative"></div>
</header>

A questo punto possiamo fare il più del lavoro utilizzando i fogli stile. La classe header-fixed raccoglie gli stili dell’header che vediamo appena carichiamo la pagina e non siamo ancora scesi con lo scroll.

CSS

.header-fixed {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 150px;
    background: #eee;
    z-index: 9999;
    transition: All 0.3s ease;
    -webkit-transition: All 0.3s ease;
    -moz-transition: All 0.3s ease;
    -o-transition: All 0.3s ease;
}
 
.header-fixed h1 a {
    display: block;
    text-align: center;
}
 
.header-relative {
    height: 150px;
}
 
.header-fixed.resized {
    top: -75px;
}
 
.header-fixed.resized img {
    padding-top: 60px;
    transform: scale(0.8);
    -webkit-transform: scale(0.8);
    -moz-transform: scale(0.8);
    -o-transform: scale(0.8);
    -ms-transform: scale(0.8);
}

Per finire utilizziamo Javascript per aggiungere una classe (resized) quando si inizia a scrollare la pagina. Questa classe sposterà verso l’alto l’header e ridurrà le dimensioni del logo.

Javascript

$(document).ready(function() {
    $(window).scroll(function () {
        var scroll = $(window).scrollTop();
        if (scroll > 250) {
            $(".header-fixed").addClass("resized");
        } else {
            $(".header-fixed").removeClass("resized");
        }
    });
});