Mis apuntes de desarrollo web </>

Grid

CSS Grid Layout es un sistema de diseño bidimensional para la web. Le permite distribuir el contenido en filas y columnas. Tiene muchas características que facilitan la creación de diseños complejos.

Para definir una cuadricula se usa el valor grid en la propiedad display. Esto habilita el diseño de cuadrícula; todos los elementos secundarios directos del contenedor se convierten en elementos de cuadrícula.

fila 1
fila 2
fila 3
fila 4
fila 5
fila 6
fila 7

Los elementos no se verán inmediatamente diferentes. La declaración display: grid brinda una cuadrícula de una columna, por lo que los elementos continuarán mostrándose uno debajo del otro como lo hacen en el flujo normal.

Para ver algo que se parece más a una cuadrícula, se agregan algunas columnas mediante la propiedad grid-template-columns. Esta puede usar cualquier unidad de longitud o porcentaje para crear las columnas mediande la definición de su ancho, así el número de columnas se agregará dependiendo del numero de valores en la propiedad.

ejemplo columnas grid
fila 1 columna 1
fila 1 columna 2
fila 1 columna 3
fila 2 columna 1
fila 2 columna 2
fila 2 columna 3
fila 3 columna 1

Tambien se puede dar un alto a las filas mediante la propiedad grid-template-rows, e igual que con la propiedad anterior, según el número de valores que tenga la propiedad se aplicarán a ese número de filas. si no se define el valor, la altura de dicha fila sera automática.

ejemplo altura filas grid
fila 1 columna 1
fila 1 columna 2
fila 1 columna 3
fila 2 columna 1
fila 2 columna 2
fila 2 columna 3
fila 3 columna 1

Unidad fracción fr:

Además de crear cuadrículas usando longitudes y porcentajes, se puede usar la unidad fr para cambiar el tamaño de las filas y columnas de la cuadrícula de manera flexible. Esta unidad representa una fracción del espacio disponible en el contenedor de cuadrícula.

ejemplo unidad fr
fila 1 columna 1
fila 1 columna 2
fila 1 columna 3
fila 2 columna 1
fila 2 columna 2
fila 2 columna 3
fila 3 columna 1

Espacios entre elementos:

Para crear espacios entre elementos, se usan las propiedades column-gap para espacios entre columnas, row-gap espacios entre filas y gap como abreviatura de ambos. Estos espacios pueden ser cualquier unidad de longitud o porcentaje, pero no una frunidad.

ejemplo espacios entre elementos
fila 1 columna 1
fila 1 columna 2
fila 1 columna 3
fila 2 columna 1
fila 2 columna 2
fila 2 columna 3
fila 3 columna 1

Repetición de valores:

Se puede repetir los valores de las propedades de alto y ancho anteriores usando la función repeat(). Esta función tiene 2 argumentos, el número de repeticiones y el valor de la propiedad a repetir.

ejemplo repeat()

Grid implícita vs Grid explícita:

La grilla explícita es la que se crea usando grid-template-columns o grid-template-rows. La grilla implícita se crea cuando el contenido se coloca fuera de esa cuadrícula. Tomando como ejemplo el grid3 se puede ver que de las 3 filas, solo se definió altura para las primeras 2, por lo que la ultima fila quedó con una altura automática.

ejemplo altura filas grid

Esa 3er fila y todas las que no se definan en la grilla explícita por defecto su alto será automático, pero se puede corregir esto mediante la propiedad grid-auto-rows.

ejemplo grid-auto
fila 1 columna 1
fila 1 columna 2
fila 1 columna 3
fila 2 columna 1
fila 2 columna 2
fila 2 columna 3
fila 3 columna 1

De este modo todas las filas de la cuadrícula implícita tienen 100px de alto.

La función minmax()

Aveces altura definida de los elementos no es muy útil si se agrega contenido que es más alto que el elemento, en cuyo caso se produciría un desbordamiento.

La función minmax() permite establecer un tamaño mínimo y máximo para un elemento, por ejemplo, minmax(50px, auto). El tamaño mínimo es de 50 píxeles, pero el máximo es auto, que se expandirá para acomodar más contenido.

Tantas columnas como quepan:

A veces es útil poder pedirle a grid que cree tantas columnas como quepan en el contenedor. Esto se realiza estableciendo el valor de grid-template-columns la función repeat(), pero en lugar de pasar un número, pasar la palabra clave auto-fill. Para el segundo parámetro de la función se usa minmax() con un valor mínimo igual al tamaño mínimo de pista que se gustaría tener y un máximo de 1fr.

ejemplo columnas automaticas
fila 1 columna 1
fila 1 columna 2
fila 1 columna 3
fila 1 columna 4
fila 2 columna 1
fila 2 columna 2
fila 2 columna 3

Esto funciona porque la cuadrícula crea tantas columnas de 300px como quepan en el contenedor y luego comparte el espacio sobrante entre todas las columnas.

Colocación basada en líneas:

La cuadrícula siempre tiene líneas; estas están numeradas comenzando con 1 y se relacionan con el modo de escritura del documento. Por ejemplo, la línea de columna 1 en inglés (escrita de izquierda a derecha) estaría en el lado izquierdo de la cuadrícula y la línea de fila 1 en la parte superior.

Los elementos de la cuadrícula pueden expandirse especificando la línea inicial y final usando las siguientes propiedades:

Todas estas propiedades pueden tener un número de línea como valor. También se pueden utilizar las propiedades abreviadas:

Estos permiten especificar las líneas de inicio y finalización a la vez, separadas por una barra inclinada /.

ejemplo Colocación basada en lineas
header
columna 1
fila 1 columna 2
fila 1 columna 3
fila 2 columna 2
fila 2 columna 3
footer

Posicionamiento con grid-template-areas:

Una forma alternativa de organizar los elementos en la cuadrícula es usar grid-template-areas y dar un nombre a los diversos elementos del diseño. Las reglas para grid-template-areas son las siguientes:

ejemplo grid areas
header
columna 1
fila 1 columna 2
fila 1 columna 3
fila 2 columna 2
fila 2 columna 3
footer