Tabla de Contenidos

Grid

Módulo de CSS dedicado a la organización de elementos en una página.

El sistema Grid permite definir una cuadrícula bidimensional

Uso

Para usar grid, se utiliza la propiedad display con el valor grid en el elemento que haga de contenedor:

body {
    display: grid;
}

Si fueran varios cojntenedores grid para mostrar en línea: display: inline-grid.

A continuación es necesario espeficiar una plantilla de columnas o filas. Si queremos 12 columnas de igual tamaño:

body {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
}

Para las filas, usaríamos grid-template-rows.

La unidad fr indica cuántas “fracciones” del ancho total ocupará un columna o fila

Tamaño de los elementos

Si tenemos una rejilla de 12 columnas y queremos que un elemento ocupe 3 columnas:

.feature {
    grid-column-end: span 3;
}

Posicionamiento avanzado de los elementos

body {
    display: grid;
    grid-template-areas:
        "title  title .   .    ."
        ".      date  .   desc desc"
        "attend .     .   desc desc"
        ".      img   img .    ."
        ".      img   img .    footer";
}

El espacio en blanco indica separación entre columnas. Para describir celdas vacías es convención utilizar el punto (.)

Habremos construidos una cuadrícula de 5 columnas y 5 filas. Para indicar qué elemento se colocará dónde, le indicamos el nombre del área que usamos en la plantilla:

h1 {
    grid-area: title;
}
time {
    grid-area: date;
}
.desc {
    grid-area: desc;
}
.attend {
    grid-area: attend;
}
.img {
    grid-area: img;
}
footer {
    grid-area: footer;
}

Rejillas implícitas

Para definir una rejilla implícita, estableceremos el flujo automático de elementos en filas y permitiremos que rellenen huecos cambiando el orden si es necesario (dense):

main {
    display: grid;
    grid-auto-flow: row dense;
}

Número de pistas dinámico

grid-template-columns: repeat(auto-fit, 350px);

Con auto-fit estamos indicando que se calcule el número de columnas necesario para rellenar los espacios.

Tamaño de pistas dinámico:

grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));

Esto nos definirá cuantas columnas sean necesarias de idéntico ancho de forma que rellenen el contenedor.