2012-02-04 13 views
49

Bootstrap 2.0 ha qualche aiuto per rendere .span1, .span2 .... .span12 uguale altezza. Ho annidato questo tipo di codice HTMLUtilizzo di twitter bootstrap 2.0 - Come aumentare l'altezza delle colonne?

<div class='container'> 
    <div class='row'> 
    <div class='span2'> 
     <div class='well'> 
     XXXX 
     </div> 
    </div> 
    <div class='span2'> 
     <div class='well'> 
     XXXX 
     XXXX 
     </div> 
    </div> 
    <div class='span2'> 
     <div class='well'> 
     XXXX 
     XXXX 
     XXXX 
     </div> 
    </div> 
    </div> 
</div> 

Vorrei che ogni pozzetto finisse alla stessa altezza se possibile?

+0

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

risposta

73

Ecco una soluzione CSS reattivo, basato sull'aggiunta di un grande imbottitura e un altrettanto ampio negativo margine per ogni colonna, quindi avvolgendo l'intera riga in una classe con overflow nascosto.

.col{ 
    margin-bottom: -99999px; 
    padding-bottom: 99999px; 
    background-color:#ffc; 
} 

.col-wrap{ 
    overflow: hidden; 
} 

si può vedere lavorare a jsFiddle

Modifica

In risposta a una domanda, ecco una variazione se avete bisogno di pozzi altezza pari o colonne di altezza pari con gli angoli arrotondati: http://jsfiddle.net/panchroma/4Pyhj/

Modifica

In risposta a una domanda, ecco la stessa tecnica in Bootstrap 3, lo stesso principio, basta aggiornare i nomi delle classi nella griglia Bootstap: http://jsfiddle.net/panchroma/bj4ys/embedded/result/

+1

Uno svantaggio, lo sfondo è disegnato e nascosto a causa dell'overflow. Significato se si esegue il rendering di qualcos'altro, quindi un colore statico non si vede il bordo inferiore. provalo insieme a chiamare bene su ogni colonna. –

+0

@ s093294, se si desidera avviare un jsFiddle, potremmo essere fortunati e riuscire a trovare una soluzione nel caso specifico. –

+0

http://jsfiddle.net/teFYS/109/ appena aggiornato quello da qui abit per illustrare il mio problema. –

16

provare qualcosa di simile (non molto elegante, però):

$('.well').css({ 
    'height': $('.well').height() 
}); 

I jQuerys height() metodo restituisce il valore più alto quando si selezionano più elementi.

Vedere il jsFiddle: http://jsfiddle.net/4HxVT/

+1

Ho appena provato questo, ma 'height()' restituisce effettivamente il primo elemento: "Descrizione: Ottieni l'altezza calcolata corrente per il primo elemento nel set di elementi corrispondenti." http://jsfiddle.net/p4ekd/ –

4

espansione a seconda delle risposte già date, ho appena risolto questo utilizzando jquery e underscore. Il frammento di seguito equalizza l'altezza dei miei pozzi e gli avvisi che appaiono su una determinata riga, indipendentemente da dove appare quello più alto:

$('.well, .alert').height(function() { 
    var h = _.max($(this).closest('.row').find('.well, .alert'), function (elem, index, list) { 
     return $(elem).height(); 
    }); 
    return $(h).height(); 
}); 
1

ho risolto questo con un costume jQuery max plugin:

$.fn.max = function(selector) { 
    return Math.max.apply(null, this.map(function(index, el) { return selector.apply(el); }).get()); 
} 

Qui contenuti-box è il mio elemento di colonna interna, il contenuto-contenitore è l'involucro che contiene le colonne:

$('.content-box').height(function() { 
    var maxHeight = $(this).closest('.content-container').find('.content-box') 
        .max(function() { 
        return $(this).height(); 
        }); 
    return maxHeight; 
}) 
2
$.fn.matchHeight = function() { 
    var max = 0; 

    $(this).each(function(i, e) { 
    var height = $(e).height(); 
    max = height > max ? height : max; 
    }); 

    $(this).height(max); 
}; 

$('.match-height').matchHeight(); 
0

Le soluzioni di cui sopra funzionano tutte finché non si aggiungono dei bei pulsanti di bootstrap! Come posizioni i pulsanti pensavo (sì, quello era il mio problema).

ho unito il CSS con la risposta jquery da How might I force a floating DIV to match the height of another floating DIV?

Dopo un po 'di frigging ho ottenuto questo, che lavora con i CSS, anche se i tasti non si allineano, e va bene con jQuery

tatto liberi di fissare la linea pulsante CSS fino po ':)

jQuery:

$.fn.equalHeights = function (px) { 
    $(this).each(function() { 
     var currentTallest = 0; 
     $(this).children().each(function (i) { 
      if ($(this).height() > currentTallest) { 
       currentTallest = $(this).height(); 
      } 
     }); 
     if (!px && Number.prototype.pxToEm) { 
      currentTallest = currentTallest.pxToEm(); //use ems unless px is specified 
     } 
     // for ie6, set height since min-height isn't supported 
     if ($.browser.msie && $.browser.version == 6.0) { 
      $(this).children().css({ 
       'height': currentTallest 
      }); 
     } 
     $(this).children().css({ 
      'min-height': currentTallest + 40 // THIS IS A FRIG - works for jquery but doesn't help CSS only 
     }); 
    }); 
    return this; 
}; 

$(document).ready(function() { 
    var btnstyle = { 
    position : 'absolute', 
    bottom : '5px', 
    left : '10px' 
    }; 
    $('.btn').css(btnstyle); 
    var colstyle = { 
    marginBottom : '0px', 
    paddingBottom : '0px', 
    backgroundColor : '#fbf' 
    }; 
    $('.col').css(colstyle);  
    $('.row-fluid').equalHeights(); 
}); 

CSS

0.123.516,41 mila
.col { 
    margin-bottom: -99999px; 
    padding-bottom: 99999px; 
    background-color:#ffb; 
    position:relative; 
} 
.col-wrap { 
    overflow: hidden; 
} 

.btn{ 
    margin-left:10px ; 
} 
p:last-child { 
margin-bottom:20px ; 
} 

jsfiddle - http://jsfiddle.net/brianlmerritt/k8Bkm/

0

Ecco la mia soluzione con 2 colonne (ADAPT questo a più colonne è semplice, basta aggiungere altre condizioni). Esegui sull'evento load per avere le altezze corrette di tutti gli elementi.

$(window).on('load', function() { 
    var left = $('.left'); 
    var leftHeight = left.height(); 
    var right = $('.right'); 
    var rightHeight = right.height(); 

    // Width like mobile, the height calculation is not needed 
    if ($(window).width() <= 751) 
    { 
     if (leftHeight > rightHeight) { 
      right.css({ 
       'height': 'auto' 
      }); 
     } 
     else { 
      left.css({ 
       'height': 'auto' 
      }); 
     } 

     return; 
    } 

    if (leftHeight > rightHeight) { 
     right.css({ 
      'height': leftHeight 
     }); 
    } 
    else { 
     left.css({ 
      'height': rightHeight 
     }); 
    } 
}); 

<div class="row"> 
    <div class="span4 left"></div> 
    <div class="span8 right"></div> 
</div> 
Problemi correlati