Sitios "responsive" de forma nativa
Definiendo contenedores
/* Definición */
.container {
display: grid | inline-grid | subgrid;
}
/* Ejemplo */
.container {
display: grid;
}
display: grid
display: inline-grid
display: subgrid;
Definiendo Columnas y Filas
Columnas
Con grid-template-columns
podemos definir la cantidad de columnas que tendra nuestro grid, el ancho y comportamiento de cada una.
- longitud en px, vw, vh, em
- Porcentaje del ancho total
- fracción del espacio disponible
- max-content
- min-content
- minmax(min, max)
- repeat
- fit-content
/* Definición */
/* Palabras claves */
grid-template-columns: none;
/* Valores definidos y nombres de lineas */
grid-template-columns: 100px 1fr;
grid-template-columns: [linename] 100px;
grid-template-columns: [linename1] 100px [linename2 linename3];
grid-template-columns: minmax(100px, 1fr);
grid-template-columns: fit-content(40%);
grid-template-columns: repeat(3, 200px);
/* Valores automaticos y nombres de lineas */
grid-template-columns: 200px repeat(auto-fill, 100px) 300px;
grid-template-columns:
minmax(100px, max-content)
repeat(auto-fill, 200px) 20%;
grid-template-columns:
[linename1] 100px [linename2]
repeat(auto-fit, [linename3 linename4] 300px)
100px;
grid-template-columns:
[linename1 linename2] 100px
repeat(auto-fit, [linename1] 300px) [linename3];
/* Global values */
grid-template-columns: inherit;
grid-template-columns: initial;
grid-template-columns: unset;
Filas
/* Ejemplo 1*/
.container {
display: grid;
grid-template-columns: 40px 50px auto 50px 40px;
grid-template-rows: 25% 100px auto;
}
/* Ejemplo 2*/
.container {
display: grid;
grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
}
/* Ejemplo 3 */
.container {
display: grid;
grid-template-rows: [row1-start] 25% [row1-end row2-start] 25% [row2-end];
}
auto-rows
A veces no sabemos cuantas rows
necesitaremos y con css grid se irán agregando nuevas rows
en la medida que el container
lo requiera, con grid-auto-rows
podemos definir el alto de estas rows
/* Definición */
/* Palabras claves */
grid-auto-rows: min-content;
grid-auto-rows: max-content;
grid-auto-rows: auto;
/* longitudes */
grid-auto-rows: 100px;
grid-auto-rows: 20cm;
grid-auto-rows: 50vmax;
/* porcentajes */
grid-auto-rows: 10%;
grid-auto-rows: 33.3%;
/* fracciones */
grid-auto-rows: 0.5fr;
grid-auto-rows: 3fr;
/* Valores minimos y máximos */
grid-auto-rows: minmax(100px, auto);
grid-auto-rows: minmax(max-content, 2fr);
grid-auto-rows: minmax(20%, 80vmax);
/* multiples valores */
/* Firefox no trabajo bien con multiples valores */
grid-auto-rows: min-content max-content auto;
grid-auto-rows: 100px 150px 390px;
grid-auto-rows: 10% 33.3%;
grid-auto-rows: 0.5fr 3fr 1fr;
grid-auto-rows: minmax(100px, auto) minmax(max-content, 2fr) minmax(20%, 80vmax);
grid-auto-rows: 100px minmax(100px, auto) 10% 0.5fr fit-content(400px);
/* Global values */
grid-auto-rows: inherit;
grid-auto-rows: initial;
grid-auto-rows: unset;
/* Ejemplo */
.container {
grid-auto-rows: minmax(60px, auto);
}
Definiendo items
Para posicionar un item dentro del grid previamente definido, debemos entregarle 4 parametros, que hacen referencia a las grid lines
tanto de columnas como filas.
grid-colum
: Nos permite definir posición y tamaño de cada item respecto a las columnas.
grid-row
: Nos permite definir posición y tamaño de cada item respecto a las filas.
/* Definición */
.item {
grid-column: start-line / end-line;
grid-row: start-line / end-line;
}
/* Column: Inicia en la linea 1 y termina en la linea 5
Row: Inicia en la linea 1 y termina en la linea 2 */
.item {
grid-column: 1 / 5;
grid-row: 1 / 2;
}
/* Column: Inicia en la linea 2 y termina la útima linea
Row: Inicia en la linea 1 y termina en la linea 2 */
.item {
grid-column: 2 / -1;
grid-row: 1 / 2;
}
/* Column: Inicia en la linea 2 y ocupa 4 columnas
Row: Inicia en la linea 2 y se extiende hasta el final */
.item {
grid-column: 2 / span 4;
grid-row: 2 / -1;
}
repeat
/* normal */
.container {
grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start] 5%;
}
/* usando repeat */
.container {
grid-template-columns: repeat(3, 20px [col-start]) 5%;
}
Longitudes Flexibles (fr)
Longitud flexible, es una longitud con la unidad
fr
, la cual representa una fracción del espacio libre en el grid container csswg.com
/* Divide el espacio disponible en 3 columnas del mismo ancho */
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
/*
Divide el espacio disponible en 3 columnas
- Columnas 1 y 2 del mismo ancho
- Tercera columna del doble de ancho que la 1 y 2
*/
.container {
display: grid;
grid-template-columns: 1fr 1fr 2fr;
}
/* Divide el espacio disponible en 4 columnas, 1 de 50px y las 3 restantes del mismo ancho */
.container {
grid-template-columns: 1fr 50px 1fr 1fr;
}
Definiendo áreas
Espaciado gap
justify-items
align-items
Nos permite centrar verticalmente