2011-08-31 11 views
12

Ho una semplice griglia in muratura. Quando carica la classe .content è visibile. Quando si aggiorna , gli elementi si spostano l'uno verso l'altro.Jquery Altezza muratura

Questo accade solo in Chrome e Safari, in Firefox sembra buono.

Ecco il css dalla rete:

#media_list {} 
#media_list .media_item { height: auto; width: 270px; display: inline-block; background: #f4f4f4; border: 1px solid #d9d7d5; float: left; padding: 10px 0px 10px 0px; font: 11px Helvetica Neue; } 
#media_list .media_item .date { color: white; background: #2f343a; padding: 10px 5px; width: 260px; float: left; margin: 0px 0px 15px 0px;} 
#media_list .media_item .content { padding: 15px; float: left; display: inline-block; margin-bottom: 20px; } 
#media_list .media_item img { border: 1px solid #dedddd; margin: 0px 0px 10px 10px; width: 248px;} 

Questo è il modo in muratura si chiama:

$('#media_list').masonry({ // options 
          itemSelector : '.media_item', 
          columnWidth : 300 
         }); 

posso lavorare intorno ad esso con min-height s e margin s, ma questo non è dinamica e doesn sembra molto pulito

Questo è a JS Fiddle ma non replica realmente il problema.

+2

se eseguo $ ('# media_list'). Masonry ('reload'); nella console risolve il problema. non so come farlo accadere ogni volta che carica anche se – papacostas

+0

Non capisco bene il problema :(Che cosa sta facendo male? E potresti sempre estendere la muratura con ricarica come hai detto: p –

+1

beh io due cose. 1) perchè sembra diverso quando accedete direttamente dall'url vs quando premete ricaricare. 2) che cosa è un buon evento jquery da utilizzare per eseguire $ ('# media_list'). Masonry ('reload'); comando? – papacostas

risposta

34

Sembra che tu usi già la ricarica. Forse perché le immagini si ricaricano sull'aggiornamento dell'URL e non sulla ricarica.

Prova:

var $container = $('#media_list'); 
$container.imagesLoaded(function(){ 
    $container.masonry({ 
     itemSelector : '.media_item', 
     columnWidth : 300, 
     gutterWidth: 20 
    }); 
}); 

altrimenti

$('#media_list').masonry({ 
    // options 
    itemSelector : '.media_item', 
    columnWidth : 300, 
    gutterWidth: 20 
}).masonry('reload'); 
+3

Non ero a conoscenza del plug-in di immagini. Grazie per questo! Maggiori informazioni sul plugin qui: http://metafizzy.co/blog/imagesloaded-plugin/ –

7

Per una migliore compatibilità con Google Chrome per esempio, modificare

var $container = $('#media_list'); 

a

$(window).load(function(){ $('#media_list').masonry(); }); 
+0

questo sembra avere più senso se si carica troppo JS. Il mio layout diventerebbe fastidioso con esso su doc.ready ... quindi grazie per la soluzione –

+0

Questo ha funzionato per me. Necessario questo con la combinazione di imagesLoaded(). – Nate

Problemi correlati