Riga bootstrap con colonne di diversa altezza


91

Al momento ho qualcosa come:

<div class="row">
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
</div>

Ora supponendo che, content fossero scatole di diversa altezza, con la stessa larghezza - come potrei mantenere lo stesso "layout basato su griglia" e tuttavia avere tutte le scatole allineate l'una sotto l'altra, invece che in linee perfette.

Attualmente TWBS posizionerà la riga successiva col-md-4sotto l'elemento più lungo nella terza riga precedente., Quindi ogni riga di elementi è perfettamente allineata e pulita - anche se è fantastico, voglio che ogni elemento cada direttamente sotto l'ultimo elemento (layout "Muratura" )

Risposte:


172

Questa è una domanda popolare su Bootstrap, quindi ho aggiornato e ampliato la risposta per Bootstrap 3 e Bootstrap 4 ...

Il " problema di altezza " Bootstrap 3 si verifica perché le colonne utilizzano . Quando una colonna viene "flottata" viene tolta dal normale flusso del documento. Viene spostato a sinistra oa destra finché non tocca il bordo della sua scatola di contenimento. Quindi, quando si hanno altezze di colonna non uniformi , il comportamento corretto è impilarle sul lato più vicino.float:left

Bootstrap colonne di wrapping irregolare

Nota : le opzioni seguenti sono applicabili per scenari di disposizione delle colonne in cui sono presenti più di 12 unità di colonna in una singola.row . Per i lettori che non capiscono perché ci dovrebbero essere più di 12 colonne di fila , o pensano che la soluzione sia "usare righe separate" dovrebbero leggere prima questo


Ci sono alcuni modi per risolvere questo problema .. (aggiornato per il 2018)

1 - L'approccio "clearfix" ( consigliato da Bootstrap ) come questo (richiede l'iterazione ogni X colonne). Questo forzerà un ritorno a capo ogni X numero di colonne ...

inserisci qui la descrizione dell'immagine

<div class="row">
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="clearfix"></div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="clearfix"></div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
    <div class="col-md-4">Content</div>
</div>

Clearfix Demo (livello singolo)

Clearfix Demo (livelli reattivi) - ad es.col-sm-6 col-md-4 col-lg-3

Esiste anche una variazione solo CSS del clearfix solo CSS "clearfix"
con tabelle


2 - Rendi le colonne della stessa altezza (usando flexbox):

Poiché il problema è causato dalla differenza di altezza, puoi rendere le colonne uguali ad altezza su ogni riga. Flexbox è il modo migliore per farlo ed è supportato nativamente in Bootstrap 4 ...

inserisci qui la descrizione dell'immagine

.row.display-flex {
  display: flex;
  flex-wrap: wrap;
}
.row.display-flex > [class*='col-'] {
  display: flex;
  flex-direction: column;
}

Flexbox uguale altezza Demo


3 - Annulla il float delle colonne e usa invece il blocco inline ..

Anche in questo caso, il problema di altezza si verifica solo perché le colonne sono flottate. Un'altra opzione è impostare le colonne su display:inline-blocke float:none. Ciò fornisce anche una maggiore flessibilità per l'allineamento verticale. Tuttavia, con questa soluzione non devono esserci spazi HTML tra le colonne , altrimenti gli elementi inline-block hanno spazio aggiuntivo e andranno a capo prematuramente.

Demo della correzione del blocco in linea


4 - Approccio colonne CSS3 (soluzione in muratura / Pinterest) ..

Questo non è nativo di Bootstrap 3, ma un altro approccio che utilizza multi-colonne CSS . Uno svantaggio di questo approccio è che l'ordine delle colonne è dall'alto verso il basso anziché da sinistra a destra. Bootstrap 4 include questo tipo di soluzione : Bootstrap 4 Masonry cards Demo .

Bootstrap 3 multi-colonne Demo

5 - Approccio JavaScript / jQuery in muratura

Infine, potresti voler utilizzare un plugin come Isotope / Masonry: inserisci qui la descrizione dell'immagine

Bootstrap Masonry Demo
Masonry Demo 2


Ulteriori informazioni sulle colonne ad altezza variabile Bootstrap


Aggiornamento 2018
Tutte le colonne hanno la stessa altezza in Bootstrap 4 perché utilizza flexbox per impostazione predefinita, quindi il "problema di altezza" non è un problema. Inoltre, Bootstrap 4 include questo tipo di soluzione multi-colonna: Bootstrap 4 Masonry cards Demo .


Ecco una buona linea guida sull'allineamento verticale in bootstrap v4-alpha.getbootstrap.com/layout/grid . In particolare l'allineamento verticale e la classe "row align-items-start"
— Josh

2
WooW! guadagni il mio voto positivo per questo bootply.com/120682 . Con il plugin Masonry, sembra buono al caricamento della pagina non buono quando trascini per regolare la larghezza dello schermo
— Paullo

11

Per qualche ragione questo ha funzionato per me senza la classe .display-flex

.row {
    display: flex;
    flex-wrap: wrap;
}
.row > [class*='col-'] {
    display: flex;
    flex-direction: column;
}

Questo ha funzionato per me. Solo ho inserito il secondo CSS nella proprietà
— .col

0

Ho creato un'altra estensione (che è anche reattiva) alla riga di bootstrap. Puoi provare qualcosa di simile:

.row.flexRow { display: flex; flex-wrap: wrap;}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.