Creare un menu laterale statico a scorrimento verticale HTML e CSS

« Older   Newer »
 
  Share  
.
  1.     +4    
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    Creare un menu laterale statico a scorrimento in HTML e CSS
    Creata da Alexander Cerutti




    Clicca per andare all'esempio.



    Salve a tutti, benvenuti in un'altra delle mie guide! Quest'oggi non mi dilungherò più di tanto nell'introduzione in quando non c'è molto da dire se non che useremo il tag <nav> dell'HTML 5 e le classiche liste.

    Situazione



    Vogliamo creare un sito che avrà un menù come quello in figura sopra.



    Procedura

    Dotiamoci dei classici due fogli, index.html e style.css, il secondo già incluso nel primo.
    Apriamo dentro <body> il tag <nav> (e lo chiudiamo anche) e inseriamo come primo elemento, il nostro logo (io inserisco quello di Syra). Quindi apriamo una lista non ordinata (<ul>), dentro la quale creeremo tanti elementi di lista (<li>).

    Nota Bene: affinché tutto il pulsante singolo di una lista riporti ad un collegamento determinato, sarà necessario che il tag <a> contorni il tag <li>. Inoltre, il primo elemento della lista avrà la classe ".active".

    HTML
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    </head>
    <body>
    <nav>
    <a href="#"><img id="logo" alt="logo" src="https://farm6.staticflickr.com/5565/15093842946_de52317ac2_o.png" width="240"></a>
    <ul>
    <a href="#"><li class="active">Home</li></a>
    <a href="#"><li>Chi Siamo</li></a>
    <a href="#"><li>La nostra missione</li></a>
    <a href="#"><li>Altro</li></a>
    <a href="#"><li>Dona</li></a>
    <a href="#"><li>Trovaci</li></a>
    <a href="#"><li>Eventi</li></a>
    <a href="#"><li>Crediti</li></a>
    <a href="#"><li>Assistenza Tecnica</li></a>
    <a href="#"><li>Noi Malati di Computer</li></a>
    <a href="#"><li>Altro</li></a>
    <a href="#"><li>Altro</li></a>
    <a href="#"><li>Altro</li></a>
    <a href="#"><li>Altro</li></a>
    <a href="#"><li>Altro</li></a>
    <a href="#"><li>Altro</li></a>
    <a href="#"><li>Altro</li></a>
    </ul>
    </nav>
    </body>
    </html>


    Passiamo quindi alla definizione degli stili nel file CSS.
    Definiamo lo stile di <nav>: necessiterà di essere fissato a destra in modo da occupare il 100% dell'altezza (position: fixed, left: 0, top: 0, bottom: 0). Visto che ci siamo, definiamo anche le proprietà per i collegamenti. Da ricordarsi è di definire la larghezza del menu stesso.

    CODICE
    nav {
           position: fixed;
           top: 0; left: 0; bottom: 0;
           width: 288px;
           margin: 0;
           padding: 0;
           background: #E6E6E6;
           color: #6C7482;
           overflow-y: scroll;
    }

    nav a { text-decoration: none; color: #6C7482; }


    Grazie a position: fixed e a overflow-y:scroll permetteremo al contenuto che sarà d'eccesso di rimanere sempre visibile con lo scroll del menu. Infatti overflow-y, rappresenta ciò che eccede (overflow) sull'asse verticale (y); come potete immaginare, esiste anche quello dell'asse x o quello generico rappresentante entrambi.

    Definiamo quindi il logo: useremo padding-left (o margin-left, in questo caso è uguale) per posizionarlo al centro.

    CODICE
    #logo { padding-left: 20px; }


    Quindi passiamo a definire prima le liste (e il menu generale <ul>), quindi la classe .active. Da notare che per poter far funzionare l'effetto che gli ho "installato", useremo lo pseudo-elemento :not() per escludere delle proprietà da determinate funzioni, ID o, in questo caso, classi. Lo useremo per escludere .active da determinate proprietà, ovvero transition, per l'animazione, e posizionamenti.

    CODICE
    nav ul {
           width: 288px;
           height: 100%;
           padding: 0;
           position: relative;
           left: 0;
           right: 0;
           bottom: 0;
           list-style-type: none;
    }

    nav ul li {
           color: #000;
           width: 258px;
           height: 35px;
           margin: 0;
           padding-top: 10px;
           padding-left: 20px;
           padding-right: 0;
           padding-bottom: 0;
           left: 0;
           right: 0;
           position: relative;
    }

    nav ul li:not(.active) {
           background: #E6E6E6;
           transition: left 0.5s, background 1s, color 1s;
           -webkit-transition: left 0.5s, background 1s, color 1s;
           -moz-transition: left 0.5s, background 1s, color 1s;
           border-left: 10px solid #21D561;
           padding-top: 10px;
           left: -10px;
    }


    Ed ecco la classe dedicata ad .active:

    CODICE
    nav ul li.active {
           width: 258px !important;
           border-top: 0!important;
           border-left: 10px solid #21D561;
           background: #3B383B;
           color: #FFF;
    }


    E, per finire, applichiamo gli effetti :hover

    CODICE
    nav ul a:hover {
           color: #FFF;
    }

    nav ul a:hover > li:not(.active) {
           background: #3B383B;
           left: 0px;
           color: #FFF;
    }


    Ed ecco completato! :)


    Animazioni


    Come funzionano le animazioni in questo caso? Semplice, ponendo in un elemento la proprietà transition e come suo(i) valore/i le proprietà CSS che vogliamo modificare e il tempo dell'animazione, quando ci sarà un evento (:hover, :active, :focus) che contiene quella proprietà che abbiamo specificato, quella si animerà. Oltre a questo, dopo i secondi è possibile inserire la tipologia di animazione, la quale, di default, è linear. Per ultimo, è possibile inserire un altro valore di tempo DOPO la tipologia di animazione, il quale specificherà il delay, ovvero il ritardo di inizio dell'animazione.



    Spero che vi possa essere stata utile questa guida e alla prossima! :)
    Buona creazione!



    Edited by Alexander Cerutti - 7/9/2014, 01:45
     
    .
  2.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Molto interessante, bravo! :)
     
    .
  3.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    Grazie! :)
     
    .
  4. Sonny Moore
         
     
    .

    User deleted


    Io di solito per includere gli stylesheet utilizzo il tag style cosi` la pagina ci mette di meno a caricarsi perche` non fa riferimento a nessun foglio esterno.
    Comunque, guida interessante.
     
    .
  5.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    CITAZIONE (Sonny Moore @ 7/9/2014, 09:22) 
    Io di solito per includere gli stylesheet utilizzo il tag style cosi` la pagina ci mette di meno a caricarsi perche` non fa riferimento a nessun foglio esterno.
    Comunque, guida interessante.

    In realtà c'é poca differenza, il fatto é che se sono poche righe é meglio usare Style, altrimenti meglio usare il file separato :) Comunque grazie :)
     
    .
  6.      
     
    .
    Avatar

    Senior Member

    Group
    Member
    Posts
    21,398
    Reputazione
    +1

    Status
    Ottimo, bravo! :)
     
    .
  7. JS96
         
     
    .

    User deleted


    Purtroppo su Windows viene visualizzata la scrollbar.

    Quindi la cosa andrebbe fatta così:
    HTML
    <div style="overflow: hidden;">
    <div style="overflow: auto;">
    <!-- CONTENUTO -->
    </div>
    </div>
     
    .
  8.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    CITAZIONE (JS96 @ 7/9/2014, 14:09) 
    Purtroppo su Windows viene visualizzata la scrollbar.

    Quindi la cosa andrebbe fatta così:
    HTML
    <div style="overflow: hidden;">
    <div style="overflow: auto;">
    <!-- CONTENUTO -->
    </div>
    </div>

    Contenuto, intendi la barra si?
    Comunque, hai modo di fare uno screen prima e dopo?

    CITAZIONE (Broke. @ 7/9/2014, 13:49) 
    Ottimo, bravo! :)

    Grazie! :)

    Edited by eXander - 9/2/2016, 18:54
     
    .
  9. .Areon
         
     
    .

    User deleted


    Complimenti , sopratutto nel sistema hover (se ho visto bene) .
     
    .
  10.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    Grazie! :) Si effettivamente non si usa spesso il sistema :not(), ma è una buona cosa da usare. ;)
     
    .
  11. .Areon
         
     
    .

    User deleted


    CITAZIONE (Alexander Cerutti @ 7/9/2014, 21:32) 
    Grazie! :) Si effettivamente non si usa spesso il sistema :not(), ma è una buona cosa da usare. ;)

    Ah ecco che cos'era il Not() ;) .
    Cmq prego :P ...
     
    .
  12. Emanuele8
         
     
    .

    User deleted


    Ciao...bella guida.....il problema è che sul pulsante home rimane l'effetto come se fosse continuamente il puntatore del mouse su di lui...come posso fare?
     
    .
  13. Matteo65
         
     
    .

    User deleted


    togli l'
    CODICE
    <a href"#">...</a>
    prima
     
    .
12 replies since 6/9/2014, 23:47   6206 views
  Share  
.
Top