Grids
Grids
grabada
Clase 06. DESARROLLO WEB
Grids
CLASE N°05
Glosario
Flexbox: es un modo de diseño que nos permite ✓ Flex-direction: esta propiedad nos va a
crear estructuras para sitios web de una forma permitir especificar si queremos que los
más fácil. No se trata de una propiedad de CSS, flex items se dispongan en filas o columnas.
sino de un conjunto de ellas. Se basa sobre un
contenedor (padre) para ordenar a sus ítems ✓ Flex-wrap: permite especificar si
(hijos). queremos que los ítems puedan saltar a
una nueva línea, cuando el contenedor
flexible se quede sin espacio.
Glosario
✓ Justify-content: nos va a permitir ✓ Align-items: Así como justify-content
alinear los elementos. Esto puede ser de alinea los elementos en el eje principal,
forma vertical u horizontal, según lo align-items hace lo propio, pero en el eje
especifiquemos con flex-direction. Nos secundario. Este será el opuesto al
va a ayudar a distribuir los flex items principal
(hijos) en el contenedor (padre), cuando
los ítems no utilicen todo el espacio ✓ Align-content: esta propiedad sólo tiene
disponible en su eje principal actual. efecto cuando el contenedor flexible tiene
varias líneas de flex items (hijos). Si se
colocan en una sola línea, esta propiedad
no tiene ningún efecto sobre el diseño.
Objetivos de la clase
Conocer Grids.
05 06 07
¿Qué es?
Flexbox ≠ Grids
Grids
📌 ¿Qué es Grids?
👉CSS Grid es un sistema de maquetación muy versátil que está disponible para
CSS. Se trata de un sistema en 2D que permite definir filas y columnas (a diferencia
de Flexbox, el cual funciona en una única dimensión).
Y… ¿Flexbox?
¡SI!
Los complementos vistos anteriormente suelen ser insuficientes, o a veces un
poco complejos para crear un layout/estructura para páginas web actuales.
Flexbox fue una gran mejora, pero está orientado a estructuras de una sola
dimensión.
Muchos frameworks y librerías utilizan un sistema grid, donde definen una cuadrícula
determinada, y cambiando los nombres de las clases de los elementos HTML es posible
trabajar muchos atributos.
🔍 ¿Por qué Grids?
👉 Grid CSS surge de la necesidad de algo más potente, y toma las ventajas del
sistema Flexbox, sumándole muchas mejoras y características que permiten
crear muy rápido cuadrículas sencillas y versátiles.
👉 Grid toma la filosofía y la base del sistema Flexbox. Esto no significa que lo
reemplaza, sino que pueden convivir.
Ambos son mucho más potentes que cualquier técnica que haya existido antes.
Diferencia entre Flexbox y Grids
UNIDIMENSIONAL BIDIMENSIONAL
Pueden convivir
Implementar Grids
Implementando Grid
El objetivo
grid-template-areas Indica la disposición de las áreas en el grid. Cada texto entre comillas
simboliza una fila.
Propiedad Descripción
.grid-container {
display: grid;
grid-template-columns: 300px 100px; /* 2 columnas */
grid-template-rows: 40px 100px; /* 2 filas */
}
Filas y columnas explícitas
Filas y columnas explícitas
Unidad creada para ser usada en grid ( fr (fraction) )
.grid-container {
display: grid;
grid-template-columns: 2fr 1fr;
grid-template-rows: 3fr 1fr;
}
.grid-container {
display: grid;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: repeat(12, 1fr)
}
👉Es posible indicar el nombre y la posición concreta de cada área de la cuadrícula. Utiliza la
propiedad grid-template-areas, donde debes especificar el orden de las áreas. Luego, en cada ítem
hijo, usas la propiedad grid-area para indicar el nombre del área en cuestión.
👉De esta forma, es muy sencillo crear una cuadrícula altamente personalizada en apenas
unas cuantas líneas de CSS.
Ejemplo en vivo
HTML
<div id="grilla">
<header class="border">Header</header>
<section id="productos" class="border">Section</section>
<section id="servicios" class="border">Section</section>
<nav class="border">Navegación</nav>
<aside class="border">Aside</aside>
<footer class="border">Pie de página</footer>
</div>
Grid por áreas
CSS
#grilla { header {
grid-area: header;
display: grid;
}
grid-template-areas: footer {
grid-area: footer;
"nav header header"
}
"nav productos publicidad" section#productos {
grid-area: productos;
"nav servicios publicidad"
}
"nav footer footer"; section#servicios {
grid-area: servicios;
grid-template-rows: 100px 1fr 1fr 75px;
}
grid-template-columns: 20% auto 15%; nav {
grid-area: nav;
}
}
.border { aside {
grid-area: publicidad;
border: 1px solid black;
}
}
Grid por áreas
De esta forma, nuestro layout se aproxima a lo que queremos inicialmente, sólo nos
falta darle unas decoraciones:
En la propiedad grid-template-areas también es posible indicar una palabra clave especial:
👉 La palabra clave none: Indica que no se colocará ninguna celda en esta posición.
👉 Uno o más puntos (.): Indica que se colocará una celda vacía en esta posición.
Grid gap
La cuadrícula tiene todas sus celdas una a
continuación de la otra.
Aunque sería posible darle un margen a las
celdas dentro del contenedor, existe una
forma más apropiada: los huecos (gutters).
.grid {
column-gap: 10px;
row-gap: 15px;
}
Combinando propiedades
Aplicamos las propiedades vistas, agregando
más estilos al padre (el contenedor).
#grilla { .border {
display: grid; border: 1px solid black;
grid-template-areas: background-color: yellow;
"nav header header" }
"nav productos publicidad"
"nav servicios publicidad"
"nav footer footer";
grid-template-rows: 100px 1fr 1fr 75px;
grid-template-columns: 20% auto 15%;
row-gap: 10px;
column-gap: 10px;
height: 100vh;
margin: 0;
}
☕
Break
¡10 minutos y volvemos!
Posicionamiento de los
hijos (desde el padre)
Posición de hijos (desde el
padre)
Existen propiedades que se pueden utilizar para colocar los ítems dentro de la
cuadrícula. Es posible distribuir los elementos de una forma muy sencilla y cómoda,
usando justify-items y align-items, que ya conocemos del módulo CSS Flexbox.
justify-items y align-items
Veamos un ejemplo:
HTML
<section class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
<div class="grid-item">Item 4</div>
</section>
justify-items y align-items
CSS
.grid-container { .grid-container .grid-item {
justify-items: start; /* start | end | border: solid 1px;
center | stretch */ font-size: 21px;
align-items: stretch; /* start | end | padding: 5px;
center | stretch */ background-color: yellow;
display: grid; }
width: 95%;
grid-template-columns: auto auto;
grid-column-gap: 10px;
grid-template-rows: 100px 100px;
grid-row-gap: 10px;
}
justify-items y align-items
La grilla está, pero las celdas “se achican”, se ajustan.
Estas propiedades trabajan sobre la celda:
Posición de hijos (desde el
padre): resumen
Propiedad Valores Descripción
justify-items start | end | center | stretch Distribuye los elementos en el
eje horizontal
Propiedad Descripción
justify-self Altera la justificación del ítem hijo en el eje horizontal.