03 Css (Grid)
03 Css (Grid)
Tags CSS
Uno de los procesos más problematicos y frustrantes de CSS, sobre todo para
novatos o principiantes, es el proceso de colocar y distribuir los elementos a lo
largo de una página. Mecanismos como posicionamiento, floats o elementos en
bloque o en línea, suelen ser insuficientes (o muy complejos) para crear un layout
o estructuras para páginas web actuales.
El sistema de elementos flexibles Flex es una gran mejora, sin embargo, está
orientado a estructuras de una sola dimensión, y puede ser laborioso crear
estructuras más complejas, por lo que aún necesitamos algo más potente para
estructuras web de varias dimensiones rápidamente. Con el paso del tiempo,
muchos frameworks CSS y librerías comenzaron a utilizar un sistema basado en
un grid donde se definía una cuadrícula, a la que era posible darle tamaño,
posición o colocación, cambiando el nombre de sus clases.
CSS (Grid) 1
Grid CSS nace de esa necesidad, obteniendo las ventajas de ese sistema grid,
añadiéndole numerosas mejoras y características que permiten crear rápidamente
cuadrículas flexibles y potentes de forma prácticamente instantánea con una
nueva familia de propiedades CSS.
Conceptos
CSS (Grid) 2
Para crear diseños basados en Grid CSS necesitaremos tener en cuenta una serie
de conceptos que utilizaremos a partir de ahora y que definiremos a continuación:
Ítem: Cada uno de los hijos que contiene la cuadrícula (elemento contenedor).
Celda (grid cell): Cada uno de los cuadritos (unidad mínima) de la cuadrícula.
Modalidades de grid
CSS (Grid) 3
Para utilizar cuadriculas Grid CSS, trabajaremos bajo el siguiente escenario:
Para activar la cuadrícula grid hay que utilizar sobre el elemento contenedor la
propiedad display y especificar uno de los dos valores que queramos utilizar: grid
o inline-grid.
Tipo de
Descripción
elemento
grid Establece una cuadrícula con ítems en bloque, de forma similar a block.
Una vez elegido uno de estos dos valores, y establecida la propiedad display al
elemento contenedor, hay varias formas de configurar nuestra cuadrícula grid. Al
igual que con Flex, muchas de las propiedades se aplican al contenedor padre, sin
embargo, existen algunas que se aplican sobre los elementos hijos. Las iremos
viendo todas detalladamente.
CSS (Grid) 4
Definir filas y columnas
Filas y columnas fijas
grid-template-rows [fila1] [fila2] ... Establece el tamaño de cada fila (fila1, fila2...).
CSS
.grid {
display: grid;
grid-template-columns: 50px 300px;
grid-template-rows: 200px 75px;
}
Con la propiedad display: grid definimos que queremos crear un grid, y mediante
las propiedades grid-template-columns y grid-template-rows definimos los
tamaños de las columnas y las filas del mismo. Esto significa que, a priori,
tendríamos una cuadricula o grid de 4 celdas en total:
CSS (Grid) 5
Veamos un ejemplo interactivo donde se pueden cambiar los valores establecidos
en la propiedad grid-template-columns y en la propiedad grid-template-rows,
para así poder entenderlo mejor:
Ahora, ten en cuenta que corre de nuestra cuenta vigilar que el número de
elementos hijos en el grid es el que debería. Dependiendo del número de
elementos hijos que tenga definido el contenedor grid en su HTML, tendremos
una cuadrícula de 2x2 elementos (4 ítems), 2x3 elementos (6 ítems), 2x4
elementos (8 ítems) y así sucesivamente. Incluso, si el número de ítems es impar
(por ejemplo, 5 ítems), la última celda de la cuadrícula se quedaría vacía.
CSS (Grid) 6
la propiedad, los ítems restantes se incluirían sin formato. De tener menos,
simplemente se ocuparían los ítems implicados.
.grid {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 2fr 1fr;
}
Este nuevo ejemplo, también crea una cuadrícula de 2x2, donde el tamaño de la
cuadrícula se divide en:
Dos filas: La primera fila ocupará el doble (2fr) que la segunda fila (1fr).
CSS (Grid) 7
De esta forma, es muy fácil predecir el espacio que va a ocupar la cuadrícula, ya
que sólo tenemos que sumar todas las unidades para saber el tamaño total, y
comparar con cada columna o fila para saber como de grande o pequeña es
respecto al total. Así tendremos un mejor control del espacio restante de la
cuadrícula, y resultará más intuitivo calcularlo.
CSS (Grid) 8
rows podemos necesitar indicar las mismas cantidades un número alto de veces,
resultando repetitivo y molesto escribirlas varias veces. Se puede utilizar la
función repeat() para indicar repetición de valores, señalando el número de veces
que se repiten y el tamaño en cuestión.
.grid {
display: grid;
/* Equivalente a... */
grid-template-columns: 100px 50px 50px 50px 50px 200px;
grid-template-rows: 1fr 2fr 1fr 2fr;
}
Función minmax()
La función minmax() se puede utilizar como valor para definir rangos flexibles de
celda. Funciona de la siguiente forma:
Función Descripción
minmax(min, max) Define un rango flexible entre un valor mínimo y uno máximo.
CSS (Grid) 9
Prueba con este ejemplo, y prueba a redimensionar la ventana del navegador:
.container {
display: grid;
grid-template-columns: repeat(2, minmax(400px, 600px));
grid-template-rows: repeat(2, 1fr);
gap: 5px;
}
.item {
background: black;
color: white;
padding: 1em;
}
<div class="container">
<div class="item item-1">Item 1</div>
<div class="item item-2">Item 2</div>
<div class="item item-3">Item 3</div>
<div class="item item-4">Item 4</div>
</div>
Comprobarás que las celdas se hacen más pequeñas hasta un punto en el que se
alcanza el mínimo, y entonces ya no se hace más pequeño.
CSS (Grid) 10
fila, y los que no quepan, se desplacen a las siguientes filas del grid, de modo que
se aproveche lo mejor posible el contenedor, y consigamos un efecto similar al
que se consigue con media queries, pero de una forma más directa y con menos
código.
Imagina el siguiente ejemplo, con un grid con 10 ítems:
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
background: grey;
gap: 10px;
}
.item {
background: blue;
color: #fff;
font-size: 2rem;
}
<div class="grid">
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
</div>
CSS (Grid) 11
Atajo: La propiedad grid-template
Si acostumbras a utilizar estas propiedades frecuentemente, puedes utilizar la
propiedad grid-template, que sirve de atajo para muchas cosas, y una de ellas,
resumir en una sola propiedad los valores que tenemos en grid-template-columns
y en grid-template-rows:
Huecos en grid
Por defecto, la cuadrícula tiene todas sus celdas pegadas a sus celdas contiguas.
Aunque sería posible darle un margin a las celdas dentro del contenedor, existe
una forma más apropiada: los huecos (gutters).
Para especificar los huecos (espacio entre celdas) podemos utilizar las
propiedades column-gap y/o row-gap. En ellas indicaremos el tamaño de dichos
huecos:
Propiedad Descripción
CSS (Grid) 12
Observa el siguiente grid irregular de ejemplo. No te preocupes por la estructura,
más adelante veremos como hacerla. En él, le indicamos estas dos propiedades
para colocar huecos entre las celdas de la cuadrícula.
El código sería el siguiente:
.grid {
column-gap: 100px;
row-gap: 10px;
}
De la misma forma que habrás visto en flex, existe una propiedad de atajo para las
CSS (Grid) 13
propiedades column-gap y row-gap, que nos permite la posibilidad de no tener
que indicar las propiedades por separado. La propiedad en cuestión sería gap y
se utilizaría de la siguiente forma:
.grid {
/* gap: <row-gap> <column-gap> */
gap: 20px 80px;
/* Equivalente a... */
row-gap: 20px;
column-gap: 80px;
gap: 40px;
/* Equivalente a... */
row-gap: 40px;
column-gap: 40px;
}
CSS (Grid) 14
propiedades, que se utilizan en los elementos hijos de la cuadrícula,
probablemente te vendrán bastante bien.
as propiedades para crear esa distribución irregular de una celda del grid son las
siguientes:
Propiedad Descripción
grid-column-start Indica en que columna empezará el ítem de la cuadrícula.
grid-column-end Indica en que columna terminará el ítem de la cuadrícula.
grid-row-start Indica en que fila empezará el ítem de la cuadrícula.
grid-row-end Indica en que fila terminará el ítem de la cuadrícula.
Observa que tenemos dos pares de propiedades, una con el prefijo grid-column- y
otro par con el prefijo grid-row- . Luego, dentro de ambas, tenemos un sufijo -
start para indicar donde empieza y otra con un sufijo -end para indicar donde
Valores posibles
En las propiedades anteriores podemos establecer diferentes valores para indicar
donde comienza o termina una celda irregular en nuestro grid de CSS:
CSS (Grid) 15
Indica la línea específica, es decir, la separación de
línea
columnas o filas.
Ver líneas
nombre Idem al anterior, pero con líneas nombradas.
nombradas
Observa que mientras que el valor auto (valor por omisión) no cambia en nada
nuestra celda, indicando un número haremos referencia a la linea que divide las
celdas del grid. Por ejemplo, si tenemos una fila con 4 columnas, ten en cuenta
que tendríamos 5 líneas.
De esta forma, indicando un valor numérico haríamos referencia a la línea en
cuestión, pero si indicamos la palabra clave span antes, haremos referencia a
cuántas líneas deberemos alargar la celda.
.item-6 {
grid-column-start: 2;
grid-column-end: 4;
}
.item-6 {
grid-column-start: 2;
grid-column-end: span 2;
}
Los dos ejemplos anteriores son equivalentes. El primero define que se empieza
en la línea 2 hasta la 4 , por lo que abarca dos celdas: 2-3 y 3-4 . En el segundo
caso, definimos que se empieza en la línea 2 y la celda se alargará 2 celdas más:
hasta la 3 y hasta la 4 .
CSS (Grid) 16