2011-08-31 15 views
12

Tengo una grilla de mampostería simple. Cuando carga la clase .content es visible. Cuando vuelve a cargar, los elementos entran uno en el otro.Jquery Problema de altura de mampostería

Esto solo ocurre en Chrome y Safari, en Firefox se ve bien.

Aquí es el css de la red:

#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;} 

Esta es la forma en la mampostería se llama:

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

puedo trabajar alrededor de ella con min-height s y margin s, pero eso no es dinámico y doesn No se ven muy limpios.

Aquí está a JS Fiddle pero realmente no reproduce el problema.

+2

si ejecuto $ ('# media_list'). Masonry ('reload'); en la consola resuelve el problema. no estoy seguro de cómo hacer que esto suceda cada vez que se carga – papacostas

+0

No entiendo muy bien el problema :(¿Qué está haciendo mal? Y siempre se puede extender la albañilería con la recarga como usted dijo: p –

+1

bien yo dos cosas. 1) ¿Por qué? ¿Se ve diferente cuando accede directamente desde la url frente a cuando presiona recargar? 2) cuál es un buen evento jquery para usar para ejecutar $ ('# media_list'). Masonry ('reload'); ¿mando? – papacostas

Respuesta

34

Parece que ya usa la recarga. Tal vez sea porque las imágenes se vuelven a cargar en la actualización de URL y no en la recarga.

Probar:

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

lo contrario

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

No tenía conocimiento del plugin imagesLoaded, ¡gracias por eso! Más información sobre el plugin aquí: http://metafizzy.co/blog/images/images/images/images/images/images/images.php?title= –

7

Para una mejor compatibilidad con Google Chrome, por ejemplo, cambiar

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

a

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

Esto parece tener más sentido si también tienes un montón de carga de JS. Mi diseño se volvería inestable con él en doc.ready ... así que gracias por la solución –

+0

Esto funcionó para mí. Necesitó esto con la combinación de imagesLoaded(). – Nate

Cuestiones relacionadas