Una de las limitaciones con las que tuvo que lidiar CSS en el pasado fue la alineación de elementos verticales. Anteriormente había que volverse loco a la hora de posicionar contenedores, no solo en este eje, sino, también, había muchas limitaciones a la hora de hacer cuadrículas y elementos un poco más libres. Con la llegada de flexbox y CSS Grid se abrió toda una serie de opciones que nos dieron casi total libertad.
Índice de contenidos
Este módulo de CSS fue diseñado para mejorar un aspecto que daba muchos quebraderos de cabeza: La ordenación, alineación y distribución de espacio entre elementos. Se trata de un modelo unidimensional en el que podemos ordenar elementos como filas o columnas, pero solo una de estas opciones.
Se asigna este comportamiento mediante la propiedad css display: flex.
.parent div {
display: flex;
flex-direction: column;
justify-content: flex-end;
}
Al empezar a trabajar con este módulo siempre surgen las dudas sobre sus ejes, y es que no son fijos, sino que dependen de la propiedad flex-direction. Podemos decir que tiene dos ejes, uno principal marcado por flex-direction y otro secundario, perpendicular al principal. Así, si flex-direction marca «row», el principal será horizontal y el secundario vertical; mientras que si marca «column», el principal será el vertical y el secundario será horizontal.
¿Por qué hacemos esta diferenciación entre ejes? Porque te será clave para usar las propiedades de ordenación. Por ejemplo justify-content funciona para el eje principal, mientras align-items funciona para el secundario. No ordenan horizontal ni verticalmente, ya que dependen de la orientación que le dé flex-direction. Al principio cuesta un poco acostumbrarse al cambio de ejes, pero el esfuerzo merecerá la pena.
Como todo nuevo módulo de CSS, no se ha visto implantado en todos los navegadores de inicio, pero, a día de hoy, ha pasado el suficiente tiempo para que podamos considerarlo un estándar. En esta captura sacada de caniuse.com, podéis ver su implementación actual.
Si lo que quieres conseguir se parece a la imagen siguiente, la propiedad a usar es flexbox. Pero ten en cuenta que las variaciones son múltiples, pudiendo ocupar varias líneas, diferentes anchuras, etc. La idea es que se distribuyen solo en una dirección (en el caso de la imagen, en horizontal).
Lo mejor para entender Flexbox es ver ejemplos y hacer pruebas y modificaciones. Para ello hay varias webs que os pueden ofrecer un resultado en directo de las diferentes propiedades. Os dejo un enlace a loading.io, donde podréis, por medio de botones, observar cómo se alteran las alineaciones. Cuando tengáis el resultado deseado, hay un botón, «Get CSS», que os dará el código referente a esa configuración.
CSS Grid va más allá, el control que da de la maquetación es un nivel superior, y nunca mejor dicho, ya que, si decíamos que flexbox era unidimensional, CSS Grid trabaja de forma bidimensional: Al igual que flexbox, tenemos columnas y filas, pero ambos elementos pueden ser definidos a la vez.
Este uso de filas y columnas recuerda a las tablas de HTML, pero, más que una evolución de estas, son una mutación. Ordenaciones, superposiciones, repartición de anchuras… Sí flexbox necesita de un esfuerzo inicial, CSS Grid sube la apuesta, pero también en este caso merece la pena hacerlo.
Se asigna este comportamiento mediante la propiedad css display: grid.
.parent {
display: grid;
grid-template-columns: repeat(4,1fr);
grid-template-rows: repeat(2,1fr);
grid-column-gap: 0px;
grid-row-gap: 0px;
}
La integración en navegadores no es tan completa como la de flexbox, pero si usas los navegadores más comunes actualizados, no te dará problemas. Te dejamos también un enlace para que puedas consultar su compatibilidad.
Si tienes en mente una distribución compleja con diferentes relaciones y posiciones, como en la imagen siguiente, la propiedad que mejor se adaptará a tus necesidades es CSS Grid. Igual que hemos comentado anteriormente, esto es solo un ejemplo típico, ten en cuenta que, por ejemplo, los contenedores se pueden superponer unos a otros.
Igual que con Flexbox, hay varias herramientas online para probar y toquetear las propiedades de CSS Grid. Te recomiendo la página de grid.layoutit.com, donde podrás construir tu propia estructura mediante su css grid generator y comprender mejor su funcionamiento.
/* Ejemplo de CSS Grid*/.presentacion {
grid-area: celda1;
}
.grid-container {
display: grid;
grid-template-areas: 'celda1 celda1 celda1 . .'; /* La celda 1 ocupa 3 de las 5 columnas */}
.datos {
grid-area: 1 / 4 / span 2 / span 2; /* Empieza en la fila 1, columna 4 y se extiende hasta la fila 2 y columna 6 */}
Analizamos las principales diferencias entre Grid y Flexbox:
Flexbox | CSS Grid | |
---|---|---|
Aprendizaje | Esfuerzo inicial moderado | Esfuerzo inicial alto |
Ordenación | Control de ordenación en una dimensión | Control de ordenación en dos dimensiones |
Uso ideal | Menús de navegación | Cuadrículas de fotos de diferentes tamaños y proporciones |
Relación con el contenido | Funciona bien con contenido dinámico que se va ordenando según las reglas creadas | Funciona bien con contenido fijo, permitiendo más control sobre el diseño visual |
Superposición | No está preparado para superponer elementos | Preparado para superponer elementos según la ordenación que les demos |
Aprende a usar los dos, no te arrepentirás. Luego usa cada uno cuando corresponda, cada herramienta tiene su uso. Básicamente pordríamos resumirlo en que si tienes que ordenar elementos en una dirección uses flexbox, y si necesitas cuadrículas más complejas, retículas en dos dimensiones, uses CSS Grid.
En esta segunda parte de crear tu primera app, veremos como funcionan la navegación, widgets,… Leer más
La accesibilidad web es clave para llegar a todos los usuarios, independientemente de sus capacidades.… Leer más
En este artículo aprenderás a cómo quitar el fondo de una imagen en Adobe Illustrator… Leer más
El SEO local es una de las estrategias más efectivas para que los negocios atraigan… Leer más
Si no lo has implementado ya en tu estrategia de marketing online, llegas tarde. Pero… Leer más
Descubre cómo usar redirecciones en .htaccess para mejorar tu SEO, evitar errores y optimizar fácilmente… Leer más