2015-07-24 11 views
28

Quindi immaginate Ho il seguente MarkupCome controllare il numero di elementi per riga utilizzando le query multimediali in Flexbox?

<div class="container"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

E seguenti stili(SASS)

@mixin max-width($width) { 
    @media screen and (max-width: $width) { 
     @content; 
    } 
} 

.container { 
    display: flex; 

    @include max-width(992px) { 
     number: 4; //Hypothetical property that is supposed to control number per row 
    } 

    @include max-width(640px) { 
     number: 2; //Hypothetical property that is supposed to control number per row 
    } 
} 
.item { 
    background-color: tomato; 
    padding: 20px; 
    margin-right: 20px; 
    flex: 1; 
} 

Esiste una reale Flexbox CSS alternativa alla mia ipotetica number proprietà che può controlla quanti oggetti mostrare per fila?

La griglia simile a un float era pratica perché si poteva montare un numero illimitato diper uno .row a causa dello width. Ma con flexbox devo usare soluzioni alternative come numerose classi .row per controllare il layout e il numero di elementi con larghezza diversa. Sono stato fortunato finora, ma ci sono alcuni tipi di layout che falliranno con un simile approccio.

Codepen link to demonstrate

+0

Beh è ancora possibile utilizzare la larghezza pò per controllare quanti elementi si otterrà per riga - tramite 'flex-basis' ... – CBroe

+0

griglia CSS sarebbe la cosa per risolvere questo in modo straight-forward di oggi : https: //developer.mozilla.or g/it-it/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout –

risposta

61

ho dovuto sbarazzarsi del margine attorno ai blocchi, perché larghezze percentuali sono difficili da applicare in modo pulito per elementi con margini, ma è possibile visualizzare le modifiche al http://codepen.io/anon/pen/jPeLYb?editors=110:

@mixin max-width($width) { 
    @media screen and (max-width: $width) { 
     @content; 
    } 
} 

.container { 
    position: relative; 
    display: flex; 
    flex-flow: row wrap; 
} 
.item { 
    background-color: tomato; 
    box-sizing: border-box; 
    padding: 20px; 
    outline: 2px solid blue; 
    flex: 1; 
} 

@include max-width(992px) { 
    .item { 
     flex-basis: 25%; 
     background-color: red; 
    } 
} 

@include max-width(640px) { 
    .item { 
     flex-basis: 50%; 
     background-color: green; 
    } 
} 

le parti importanti sono:

  • flex-flow: row wrap che permette al FlexBox a comparire su mul righe tiple (il default è nowrap)

  • flex-basis che è l'equivalente di width in questo caso

  • position: relative che rende le larghezze relative al contenitore, piuttosto che il corpo (ciò avvitare il raccordo)

+2

in pixel in btw funziona bene con flex. Ho aggiunto '' margin-right: 100px'' e ha funzionato. Nessun overflow come nei layout float. Grazie per la risposta, esattamente ciò di cui avevo bisogno. Perdonati di questa proprietà per tutto – knitevision

+1

Una volta che vai per il flexbox tutto fuori - non penserai mai ai galleggianti che sono davvero un brutto scherzo. La griglia di Bootstrap è basata sui float. Se disponi del moderno supporto per browser, puoi utilizzare la flexbox pura in questo modo più semplice e più forte. Esiste un pacchetto chiamato sass-flex-mixins che limiterà IE10. – httpete

+0

@httpete I float non sono un "brutto scherzo", funzionano esattamente come concepiti. Al contrario, l'esistenza di questa domanda consente di illustrare ciò che è un flexbox standard progettato in modo approssimativo. – mystrdat

Problemi correlati