Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306

    [Flexbox]: usare width per il mobile

    Ciao a tutti ragazzi

    in questi giorni sto studiando il flexbox con la guida di Cesare Lamanna.

    Mi sono bloccato con questa lezione http://www.html.it/pag/53460/usare-l...per-il-mobile/ perchè non mi viene in nessun modo come nella demo http://www.html.it/guide/esempi/flex...lex-width.html

    cioè utilizzando width:33.3% non mi vengono i 3 box iniziali su una sola riga, ma me ne vengono solo due.

    Il bello è che da come si capisce, non ci è fatto una grossa modifica del file .css rispetto alla lezione precedente, quindi non capisco proprio cosa dovrei fare.

    Caricherei una pagina web, ma non ho trovato la guida su come fare e quindi vi copio i miei codici.


    il codice html è questo: e non ho modificato nulla dalla lezione precedente, quindi dovrebbe essere OK:
    codice:
    <!DOCTYPE html>
    
    <head>
    
    
    <title>centrare elementi con flexbox</title>
    
    
    <link href="griglia5conwidth.css" rel="stylesheet" type="text/css" >
    </head>
    
    
    
    
    
    
    <body>
        <div class="container">
                    <!-- creiamo un header con dentro in box per il logo-->
                
          <header class="main-header">
                <div class="logo">
                    <h1 class="logo-heading">The Flexbox</h1>
                </div>
           </header>
            
            <p>Allineare elementi flessibili con i margini automatici</p>
    
    
        <nav class="main-nav">
             <ul class="main-menu">
                  <li class="menu-item"><a class="menu-link" href="#">home</a></li>
                  <li class="menu-item"><a class="menu-link" href="#">italia</a></li>
                  <li class="menu-item"><a class="menu-link" href="#">mondo</a></li>
                  <li class="menu-item"><a class="menu-link" href="#">politica</a></li>
                  <li class="menu-item"><a class="menu-link" href="#">economia</a></li>
                  <li class="menu-item"><a class="menu-link" href="#">tecnologia</a></li>
                  <li class="menu-item"><a class="menu-link" href="#">cultura</a></li>
             </ul>
             <form class="modulo-ricerca">
                  <input type="text" placeholder="Cerca" class="campo-ricerca">
             </form>
        </nav>
    
    
    <p>QUI C'E' IL CONTENUTO DELLA PAG</p>
    <!--QUI C?é IL CONTENUTO DELLA PAG-->
    
    
    
    
        <p>Colonne affiancate con altezza uguale</p>
        <p>Nella Sezione ho tre blocchi div card-container che rappresentano le tre colonne.<br>All'interno di ognuna 
    
    
    ci sono due div: una per l'immagine (card-image) e l'altra per il contenuto (card-content)</p>
    
    
    
    
    
    
        <section class="cards">
            
            <div class="card-container">
               <div class="card-image"><img src="HTML.it - CSS - Layout a griglia con Flexbox_files/card-
    
    
    img.png"></div>
              
                <div class="card-content"> <h4>Card 1</h4>
                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor 
    
    
    incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi 
    
    
    ut aliquip ex ea commodo consequat.</p>
                
        <a href="http://www.html.it/guide/esempi/flexbox/7.%20colonne-nowrap.html#" class="btn btn-primary btn-
    
    
    blockmgtop-auto">Leggi l'articolo</a>
                
                </div>
            </div>
            
            <div class="card-container">
               <div class="card-image"><img src="HTML.it - CSS - Layout a griglia con Flexbox_files/card-
    
    
    img.png"></div>
               <div class="card-content"><h4>Card 2</h4>
        
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor.</p>
    
    
    
    
        <a href="http://www.html.it/guide/esempi/flexbox/7.%20colonne-nowrap.html#" class="btn btn-primary btn-block 
    
    
    mgtop-auto">Leggi l'articolo</a>
      
    
    
               </div>
            </div>
    
    
            <div class="card-container">
               <div class="card-image"><img src="HTML.it - CSS - Layout a griglia con Flexbox_files/card-
    
    
    img.png"></div>
               <div class="card-content"><h4>Card 3</h4>
       
                     
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore 
    
    
    magna aliqua.</p>
      
    <a href="http://www.html.it/guide/esempi/flexbox/7.%20colonne-nowrap.html#" class="btn btn-primary btn-block mgtop-
    
    
    auto">Leggi l'articolo</a>
    
    
               </div>
            </div>
    
    
    
    
        <div class="card-container"> 
                <div class="card-image"><img src="HTML.it - CSS - Layout a griglia con Flexbox_files/card-
    
    
    img.png"></div>
              
                    <div class="card-content"> <h4>Card 4</h4>
                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor 
    
    
    incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi 
    
    
    ut aliquip ex ea commodo consequat.</p>
                
        <a href="http://www.html.it/guide/esempi/flexbox/7.%20colonne-nowrap.html#" class="btn btn-primary btn-
    
    
    blockmgtop-auto">Leggi l'articolo</a>
                
                </div>
        </div>
    
    
        <div class="card-container">
                <div class="card-image"><img src="HTML.it - CSS - Layout a griglia con Flexbox_files/card-
    
    
    img.png"></div>



    il codice CSS invece è minimamente modificato come appunto dice la guida con l'eliminazione della proprietà flex nel card-container



    codice:
    .main-header{
    
    
        display:flex;
        display: -webkit-flex;
        
        align-items:center;
        -webkit-align-items:center;
    
    
        justify-content:center;
        -webkit-justify-content:center;
        
    
    
        height:160px;
        background-color:#004480;
    
    
    }
    
    
    /*Anzitutto azzero la lista: cioè tolgo i punti e resetto padding e margin*/
    
    
    ul{
    
    
    
    
    list-style-type:none; /*definisce il tipo di punti elenco da usare*/
    padding:0;
    margin:0;
    
    
    }
    
    
    /*imposto colore di sfondo del main-nav con il bordo per capire*/
    
    
    .main-nav{
    
    
    background-color:#67b4f8;
    border-bottom:1px solid #333;
    
    
    }
    
    
    
    
    /*Agiamo sul box contenitore, la lista con classe .main-menu*/
    
    
    
    
    .main-menu{
    
    
    display:flex;
    display: -webkit-flex;    
    
    
    /*con questa regola gli item sono disposti orizzontalmente, uno accanto all'altro.
    Non ci rimane che agire sui link contenuti nei li per dare l'aspetto visuale che vogliamo*/
    
    
    }
    
    
    
    
    .menu-link{
    
    
    font-weight:bold;
    color:#fff;     
    display:block;  /*rendo i link come elmenti block*/
    padding:10px;
    }
    
    
    
    
    .menu-link:hover{
    background-color:#51caf3;  /*faccio colorare diversamente i piccoli div intorno alle parole*/
    color:#fff;           /*faccio colorare diversamente le parole*/
    }
    
    
    
    
    
    
    /*Fino a qui abbiamo impostato la barra di navigazione.*/
    /*Ora poichè abbiamo aggiunto un campo per la ricerca di un sito, dobbiamo gestirlo*/
    
    
    /*Poichè è un elemento blocco si collocherà su una nuova riga. Vogliamo allinearlo accanto al menu, quindi dovremo 
    
    
    agire sull'elemento che contiene entrambi */
    
    
    /*agiamo quindi su .main-nav aggiungendoci la regola display:flex*/
    
    
    .main-nav{
    
    
    display:flex;
    display: -webkit-flex;
    }
    
    
    /*Dobbiamo ancora allinearlo a destra*/
    
    
    /*Basta usare la proprietà di margine opposta al lato su cui vogliamo allineare e dare il valore auto*/
    
    
    .modulo-ricerca{
    margin-left:auto;
    }
    
    
    
    
    
    
    /*Colonne affiancate con altezza uguale*/
    
    
    /*I tre box (colonne) della semplice griglia sono contenuti in un elemento con classe .cards*/
    
    
    
    
    
    
    
    
    .cards {
     display: flex;
     display: -webkit-flex;
    
    
     flex-flow: row wrap;                    /*EDIT*/
     -webkit-flex-flow: row wrap;
    
    
    /* (row) gli elementi si dispongono su una riga e (nowrap) impediamo agli elementi di disporsi si più righe. EDIT: 
    
    
    CON WRAP PERMETTIAMO CHE GLI ELEMETNI SI DISPONGONO SU PIù RIGHE*/
    
    
    
    
     align-items: stretch;  
     -webkit-align-items: stretch;
    
    
    /*è di default, ma lo specifico: colonne occupano tutto lo spazio disponibile ed avranno altezza uguale*/
    
    
     justify-content: space-between;
     -webkit-justify-content: space-between;
    
    
    
    
    /*gli item così si dispongono orizzontalmente creando un spaziatura proporzionale tra di loro*/
    
    
     margin-top: 10px;
    }
    
    
    
    
    
    
    /*Vogliamo anche che il pulsante posto in basso sia ancorato sempre sul fondo del box*/
    
    
    /*Dobbiamo lavorare sui singoli componenti della griglia e non semplicemente sul loro contenitore*/
    
    
    /*Perciò passiamo ai box che compongono la griglia. Questi sono definiti da un div con classe .card-container*/
    
    
    .card-container {
     display: flex;  /*vogliamo che gli elementi che contiene siano flessibili*/
     display: -webkit-flex;
    
    
     flex-direction: column;  /*tali elementi si dispongono verticalmente*/
     -webkit-flex-direction: column;
    
    
     /*flex:1 1 300px;                EDIT
     -webkit-flex: 1 1 300px;        EDIT*/
    
    
    
     width:33.3%;               /*EDIT*/
     margin-top:10px;        /*EDIT*/
     padding:10px;               /*EDIT*/
    
    }
    
    
    /*ogni box è suddiviso in due blocchi. Il primo ospita un'immagine flessibile che si adatta automaticamente alla 
    
    
    larghezza del suo contenitore*/
    
    
    .card-image img {
     display: block;
     height: auto;
     margin: 0 auto;
     max-width: 100%;
     width: 100%;
    
    
    }
    
    
    
    
    
    
    /*Il contenuto più problematico è quello con il contenuto testuale identificato dalla classe .card-content. Dato che 
    
    
    questo contenuto è variabile e che da esso dipende l'altezza reale del div che contiene il testo ed il pulsante, 
    
    
    quest'ultimo verrà a collocarsi ad altezze diverse.*/
    
    
    /*Abbiamo altezze uguali per i box, ma il pulsante non è ancora sul fondo*/  
    
    
    /*Per risolvere, possiamo ricorrere al margine automatico applicato a margin-top visto che vogliamo un allinemaneto 
    
    
    sul lato inferiore. */
    
    
    /* Ma questo non è sufficiente perchè quando operiamo in verticale, avendo come riferimento l'altezza e non la 
    
    
    larghezza abbiamo come riferimento l'altezza e non la larghezza, perciò è necessatio fornire un riferimento, un 
    
    
    contesto di posizionamento, uno spazio in verticale rispetto al quale il pulsante possa collocarsi sul fondo del suo 
    
    
    contenitore*/
    
    
    /*Quindi per il div .card-content bisogna assegnare insieme a margin-top:auto anche flex:1 che serve a dire: cresci 
    
    
    ed espanditi fino ad occupare tutto lo spazio disponibile. */
    
    
    .card-content {
    
    
     display: flex;
     display: -webkit-flex;
    
    
     flex-direction: column;
     -webkit-flex-direction: column;
    
    
     flex:1;
    -webkit-flex:1;
    
    
     padding: 10px 0;
    }
     
    
    
    .mgtop-auto {
    
    
    margin-top: auto;
    
    
    }
    
    
    /*il div con l'immagine .card-image non è flessibile, ha flex-grow impostato su0, per cui occuperà verticalmente lo spazio dettato dal suo contenuto*/
    
    
    /*Il div con il testo .card-content ha con la proprietà flex, un flex-grow:1 che lo fa diventare flessibile per 
    
    
    fargli occupare tutto lo spazio disponibile. Questo crea anche un contesto per l'altezza che ci consente di applicare 
    
    
    l'allineamento in basso con margin-top:auto*/
    Ultima modifica di Alfoxx; 23-03-2016 a 12:47

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.