2013-05-16 15 views
21

Ho due bambini <div> elementi all'interno di un contenitore padre <div> come mostrato:rendere i bambini div l'altezza del bambino più alto

<div class="row"> 
    <div class="item"> 
     <p>Sup?</p> 
    </div> 
    <div class="item"> 
     <p>Sup?</p> 
     <p>Wish that other guy was the same height as me</p> 
    </div> 
</div> 

ho provato il seguente CSS:

.item { 
    background: rgba(0,0,0,0.1); 
    display: inline-block; 
} 

.row { 
    border: 1px solid red; 
} 

Come posso ottenere entrambi i bambini (div.item) sono l'altezza del bambino più alto?

jsFiddle: http://jsfiddle.net/7m4f7/

+0

Questa domanda è stata posta una moltitudine di volte . Vedi questa domanda http://stackoverflow.com/questions/16592597/issue-with-responsive-columns-having-equal-height – Cam

+0

Semplice. Facile. [Colonne di altezza uguale con Flexbox] (http://stackoverflow.com/a/33815389/3597276). –

risposta

13

Una soluzione consiste nel modificare il valore di visualizzazione da inline-block a table-cell per i discendenti div.item elementi:

.row { 
    border: 1px solid red; 
    display: table; 
    border-spacing: 20px; /* For controlling spacing between cells... */ 
} 
.item { 
    background: rgba(0,0,0,0.1); 
    display: table-cell; 
} 

Example

+0

Attenzione, table-cell è un css3 e non funziona in tutti i browser. – Cam

+8

In realtà il valore 'table-cell' è stato introdotto in [CSS 2.1 Specification] (http://www.w3.org/TR/CSS2/visuren.html#display-prop) – Yana

+2

Aggiungi display: tabella e bordo- spaziatura: 20px 20px a .row nel tuo violino, rende le colonne più evidenti, grazie! http://jsfiddle.net/audetwebdesign/7m4f7/5/ –

6

Un'altra soluzione consiste nell'utilizzare FlexBox: http://jsfiddle.net/7m4f7/4/

.item { 
    background: rgba(0,0,0,0.1); 
    -webkit-box-flex: 1; 
    -moz-box-flex: 1; 
    -webkit-flex: 1; 
    -ms-flex: 1; 
    flex: 1; 
} 

.row { 
    border: 1px solid red; 
    display: -webkit-box; 
    display: -moz-box; 
    display: -webkit-flexbox; 
    display: -ms-flexbox; 
    display: -webkit-flex; 
    display: flex; 
} 

Tuttavia, il supporto è limitato (ma sempre meglio!) Vedi http://caniuse.com/flexbox

In caso contrario è necessario utilizzare javascript per impostare manualmente le altezze.

+2

dato che funziona, supponiamo che io abbia molti elementi figlio che sono stati divisi automaticamente in linee diverse quando ho usato 'inline-block', ma ora tutto viene riempito in una riga. C'è un lavoro in giro per questo. – akabhirav

+0

@akabhirav, sì - usa 'flex-wrap: wrap; direzione della flessione: riga; ' – crishoj

6

versione jQuery: FIDDLE

var maxheight = 0; 

$('div div.y').each(function() { 
    maxheight = ($(this).height() > maxheight ? $(this).height() : maxheight); 
}); 

$('div div.y').height(maxheight); 

EDIT: appena notato che non ha a che fare con l'altezza del <div> 's, ma <p>' s

Problemi correlati