No estoy segura si Pinterest fue el primer sitio web que popularizó el diseño de una cuadrícula de imágenes en cascada, pero ahora lo veo en todas partes. Si nunca has utilizado Pinterest, es un sitio donde puedes guardar colecciones de imágenes que se organizan en una cuadrícula.
Hay un par de librerías a tu disposición para crear un diseño de cuadrícula que se encargaran del posicionamiento para ti (como Masonry), pero la implementación de un diseño como el de Pinterest no es tan dificil. ¡Puedes hacerlo tu misma!
Voy a usar jQuery para explicar cómo hacerlo, pero tu puedes usar lo que quieras. Lo que importa es la matemática detrás del posicionamiento, no la biblioteca que utilices. Te daré una explicación general y luego podremos entrar en los detalles de implementación con código.
Aquí va la explicación general. Los “pins” se muestran en la página inicialmente con AJAX. Después de asignar lo ancho de la columna y el margen entre las columnas, puedes utilizar lo ancho de la ventana para calcular el número de columnas que caben en la página. Utiliza una lista para guardar la altura de cada columna y la longitud de la lista es cuántas columnas hay. Por ejemplo, misColumnas = [300, 340, 370] significa que hay 3 columnas en la página. La altura de la primera columna es de 300, la altura de la segunda columna es de 340 y la altura de la tercer columna es de 370. Cool, ¿no? Así que cuando cada pin se agrega a la página, se agrega a la columna más corta y la matriz se actualiza con la nueva altura de la columna. La posición izquierda y superior de cada uno de los “pins”, los cuales tienen una posición absoluta, se determina usando estos valores de altura (ve getTopPosition () y getLeftPosition () a continuación).
¡Eso es! Probablemente es un poco confuso leer sólo esa explicación, así que echemos un vistazo al código para ver cómo se implementa. Añadi comentarios con números para que puedas leer el archivo en el orden en que suceden las cosas que mencione en la explicación anterior. Los nombres de las variables y el resto del codigo lo voy a dejar en inglés, pero todos mis comentarios explicando lo que está pasando en el código están en espanol:
Si quieres ver la implementación del proyecto entero esta aquí.