2013-10-28 13 views
9

Hey Sto cercando di creare un layout di dialogo reattivo per una galleria, che assomiglia a questo http://webdesignerwall.com/demo/responsive-column-grid/CSS Flex griglia - stessa larghezza per ultimo elemento

Il problema con l'esempio è che le larghezze sono fissi e le media query sono necessario. Ho molte colonne per essere una soluzione fattibile.

posso ottenere lo stesso risultato con Flex cinge, tuttavia l'ultima colonna è più grande delle altre, come mostrato in questo CodePen:

http://codepen.io/anon/pen/zClcx

HTML

<div class="flex-container same-width same-height"> 
    <div class="flex-item"> 
    <div>g</div> 
    </div> 
    <div class="flex-item"> 
    <div>g</div> 
    </div> 
    <div class="flex-item"> 
    <div>g</div> 
    </div> 
    <div class="flex-item"> 
    <div>why am I longer than my friends?</div> 
    </div> 
</div> 

CSS

.flex-container { 
    display: -webkit-flex; 
    display: flex; 
    width: 100%; 
    max-width: 950px; 
    flex-wrap: wrap; 
    justify-content: space-between; 
    background: grey; 

    & > * { 
    min-width: 300px; 
    background: green; 
    max-width: 404px; 
    flex: 1 1 auto; 
    } 
    .flex-item > div { 
    background: red; 
    } 
} 

Domanda:Come posso rendere l'ultima colonna delle stesse dimensioni delle altre?

+0

Hey ragazzi Ho appena trovato questo [collegamento] (http://codepen.io/dalgard/pen/Dbnus), che risolve magnificamente il problema. Sfortunatamente la compatibilità non è troppo grande. IE10 non funziona. Le ultime cromate e l'opera vanno bene. – Paul

+0

Tutto ciò di cui hai bisogno è un mix del preprocessore e una singola riga di codice per utilizzare quel mixin. Vedi qui: http://stackoverflow.com/a/36401995/635069 – Merott

risposta

5

Utilizzando una confezione flessibile, è necessario prestare attenzione alle larghezze dello max- e min-. Citando da w3schools:

Suggerimento: gli elementi che sono flessibili possono ridursi o aumentare man mano che la scatola si restringe e aumenta. Ogni volta che c'è spazio extra in una scatola, gli elementi flessibili vengono espansi per riempire quello spazio.

Per contrastare ciò, iniziare una larghezza di X numero di pixel per il contenitore ma utilizzare le percentuali invece delle quantità di pixel per le caselle interne. La percentuale del contenitore sarà la stessa per tutte le colonne.

In questo modo si elimina anche la necessità di un box flessibile, perché questi sono solo se si desidera espandere le caselle in direzione orizzontale (rendendole più ampie in base al contenuto di ciascuna) piuttosto che in direzione verticale.

PS: se si desidera reagire e mantenere la larghezza proporzionale allo spazio intermedio, utilizzare anche le percentuali per i margini (tenendo presente le dimensioni dei bordi e delle imbottiture). Questo non è necessario ma è una funzionalità utile per mantenere un aspetto coerente su diversi dispositivi.

+0

Grazie per aver parlato del tuo tempo per rispondere. Sfortunatamente non capisco cosa intendi. Seguendo le tue istruzioni è tutto quello che posso ottenere: [codepen] (http://codepen.io/anon/pen/doLhr), che in realtà non risolve il mio problema – Paul

+0

Ecco cosa vedo in quella codepen: http://i.imgur.com/Wvzosh1.jpg - Questo è l'ultimo di Google Chrome, ma anche gli ultimi di Firefox sono gli stessi. Quello che dice "perché sono più lungo ..." ha le stesse dimensioni degli altri. Puoi inviare uno screenshot di quello che stai vedendo o se questo non è quello che vuoi, mi scuso e mi piacerebbe rivisitare questo con maggiori dettagli se puoi fornirlo. – Deryck

+0

Sì, io vedo esattamente come te. Anche usando l'ultimo Chrome. Immagino che quello che sto cercando sia una griglia simile a quella di una codepen, comunque reattiva nel modo in cui i contenitori si riempiranno per usare lo spazio rimanente. Visto che Firefox non supporta ancora l'attributo flex-warp, questo è sicuramente il modo sbagliato di farlo. Penso che potrei dover rimanere con media-query per questo compito. Grazie per l'aiuto. – Paul

6

È un malinteso comune, ma Flexbox non è un sistema di rete. Una volta che gli elementi flessibili sono impostati per essere flessibili, possono essere ridimensionati solo rispetto agli altri oggetti flessibili sulla stessa linea, non con gli elementi flessibili su qualsiasi altra linea. Non c'è modo di forzarli ad allinearsi senza usare una larghezza specifica (sebbene questa larghezza possa essere una percentuale).

La larghezza minima non ha alcuno scopo in quanto i tuoi articoli flessibili sono flessibili. Il tuo valore di restringimento della flessione non ha alcuno scopo perché i tuoi elementi flessibili possono essere avvolti. La larghezza massima è l'unica cosa che impedisce agli elementi dell'ultima riga di riempire l'intera riga. Dovresti conoscere la larghezza esatta degli articoli nella riga precedente per impostare il valore di larghezza massima corretto.

correlati:

+0

Sì, hai ragione. Flexbox non è davvero progettato per farlo a questo punto. Spero davvero che tu possa farlo anche perché è così vicino ad essere la soluzione perfetta al problema che ho esposto nella domanda originale. Grazie per l'aiuto. Mi piacerebbe revocare la tua risposta, tuttavia non ho ancora abbastanza reputazione :) – Paul

18

Impostare la flessione crescere a 0.

violino: http://jsfiddle.net/RichAyotte/Ev5V7/

enter image description here

<div class='flex-container seven'> 
    <div>1</div> 
    <div>2</div> 
    <div>3</div> 
    <div>4</div> 
    <div>5</div> 
    <div>6</div> 
    <div>7</div> 
</div> 

.flex-container { 
    display: flex; 
    flex-flow: row wrap; 
    justify-content: flex-start; 
} 
.flex-container div { 
    font-size: 200%; 
    padding: 2mm; 
    margin: 10px 10px; 
    flex: 0 1 20%; 
    box-shadow: 3px 3px 2px 0px rgba(50, 50, 50, 0.5); 
} 
+0

La mia reazione iniziale è rimasta molto impressionata. Ci giocherò domani e tornerò da te. Saluti. – Paul

Problemi correlati