148 lines
6.4 KiB
Markdown
148 lines
6.4 KiB
Markdown
|
---
|
||
|
title: Grid Layout
|
||
|
localeTitle: Diseño de cuadrícula
|
||
|
---
|
||
|
## Diseño de cuadrícula
|
||
|
|
||
|
CSS Grid Layout, conocido simplemente como Grid, es un esquema de diseño que es el más nuevo y más poderoso en CSS. Es [compatible con todos los navegadores principales](https://caniuse.com/#feat=css-grid) y proporciona una forma de colocar elementos en la página y moverlos.
|
||
|
|
||
|
Puede asignar automáticamente elementos a _áreas_ , ajustar su tamaño y cambiar su tamaño, encargarse de crear columnas y filas según el patrón que usted defina y realizar todos los cálculos utilizando la unidad `fr` recién introducida.
|
||
|
|
||
|
### ¿Por qué Grid?
|
||
|
|
||
|
* Puede tener fácilmente una cuadrícula de 12 columnas con una línea de CSS. `grid-template-columns: repeat(12, 1fr)`
|
||
|
* Grid te permite mover las cosas en cualquier dirección. A diferencia de Flex, donde puede mover elementos horizontalmente ( `flex-direction: row` ) o verticalmente ( `flex-direction: column` ), no ambos al mismo tiempo, Grid le permite mover cualquier _elemento de la cuadrícula_ a cualquier _área de cuadrícula_ predefinida en la página. Los elementos que muevas no tienen que ser adyacentes.
|
||
|
* Con CSS Grid, puede **cambiar el orden de los elementos HTML utilizando solo CSS** . Mueva algo de arriba a derecha, mueva los elementos que estaban en el pie de página a la barra lateral, etc. En lugar de mover `<div>` de `<footer>` a `<aside>` en el HTML, puede cambiar su ubicación con `grid-area` de la `grid-area` en el Hoja de estilo CSS.
|
||
|
|
||
|
### Grid vs. Flex
|
||
|
|
||
|
* Flex es unidimensional, ya sea horizontal o vertical, mientras que Grid es bidimensional, lo que significa que puede mover elementos tanto en planos horizontales como verticales
|
||
|
* En Grid, aplicamos estilos de diseño al contenedor principal y no a los elementos. Por otro lado, Flex se dirige al elemento flex para establecer propiedades como `flex-basis` , `flex-grow` y `flex-shrink`
|
||
|
* Grid y Flex no son mutuamente excluyentes. Puedes usar ambos en el mismo proyecto.
|
||
|
|
||
|
### Verificando la compatibilidad del navegador con `@supports`
|
||
|
|
||
|
Lo ideal es que cuando construyas un sitio, lo diseñes con Grid y utilices Flex como alternativa. Puede averiguar si su navegador admite cuadrícula con la regla `@support` CSS (consulta de características). Aquí hay un ejemplo:
|
||
|
|
||
|
```css
|
||
|
.container {
|
||
|
display: grid; /* display grid by default */
|
||
|
}
|
||
|
|
||
|
@supports not (display: grid) { /* if grid is not supported by the browser */
|
||
|
.container {
|
||
|
display: flex; /* display flex instead of grid */
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Empezando
|
||
|
|
||
|
Para convertir cualquier elemento en una cuadrícula, debe asignar su propiedad de `display` a la `grid` , así:
|
||
|
|
||
|
```css
|
||
|
.conatiner {
|
||
|
display: grid;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Y eso es. Acabas de hacer de tu `.container` una grilla. Cada elemento dentro del `.container` se convierte automáticamente en un elemento de cuadrícula.
|
||
|
|
||
|
### Definiendo plantillas
|
||
|
|
||
|
Filas y columnas
|
||
|
|
||
|
```css
|
||
|
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||
|
grid-template-rows: auto 300px;
|
||
|
```
|
||
|
|
||
|
Áreas
|
||
|
|
||
|
```css
|
||
|
grid-template-areas:
|
||
|
"aaaa"
|
||
|
"bcde"
|
||
|
"bcde"
|
||
|
"ffff";
|
||
|
```
|
||
|
|
||
|
o
|
||
|
|
||
|
```css
|
||
|
grid-template-areas:
|
||
|
"header header header header"
|
||
|
"nav main main sidebar";
|
||
|
```
|
||
|
|
||
|
### Áreas de cuadrícula
|
||
|
|
||
|
Aquí hay un código de ejemplo sobre cómo definir y asignar áreas de cuadrícula
|
||
|
|
||
|
```css
|
||
|
.site {
|
||
|
display: grid;
|
||
|
grid-template-areas: /* applied to grid container */
|
||
|
"head head" /* you're assigning cells to areas by giving the cells an area name */
|
||
|
"nav main" /* how many values kind of depends on how many cells you have in the grid */
|
||
|
"nav foot";
|
||
|
}
|
||
|
|
||
|
.site > header {
|
||
|
grid-area: head;
|
||
|
}
|
||
|
|
||
|
.site > nav {
|
||
|
grid-area: nav;
|
||
|
}
|
||
|
|
||
|
.site > main {
|
||
|
grid-area: main;
|
||
|
}
|
||
|
|
||
|
.site > footer {
|
||
|
grid-area: foot;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### La unidad de `fr`
|
||
|
|
||
|
Grid introduce una nueva unidad `fr` , que significa _fracción_ . Lo bueno de usar la unidad `fr` es que se encarga de los cálculos por ti. El uso de `fr` evita los problemas de margen y relleno. Con `%` y `em` etc. se convierte en una ecuación matemática cuando se calcula `grid-gap` . Si usó la unidad de `fr` , calculará automáticamente el tamaño de la columna y el de la canaleta y ajustará el tamaño de las columnas en consecuencia, además, tampoco habrá huecos de sangrado al final.
|
||
|
|
||
|
### Ejemplos
|
||
|
|
||
|
#### Cambio del orden de los elementos en función del tamaño de la pantalla.
|
||
|
|
||
|
Digamos que desea mover el pie de página al final en pantallas pequeñas y a la derecha en pantallas más grandes, y hay un montón de otros elementos HTML entre los dos.
|
||
|
|
||
|
La solución simple es cambiar las `grid-template-areas` la `grid-template-areas` según el tamaño de la pantalla. También puede **cambiar el número de columnas y filas según el tamaño de la pantalla** . Esta es una alternativa mucho más limpia y simple al sistema Grid de Bootstrap ( `col-xs-8 col-sm-6 col-md-4 col-lg-3` ).
|
||
|
|
||
|
```css
|
||
|
.site {
|
||
|
display: grid;
|
||
|
grid-template-columns: 1fr 1fr;
|
||
|
grid-template-areas:
|
||
|
"title title"
|
||
|
"main header"
|
||
|
"main sidebar"
|
||
|
}
|
||
|
|
||
|
@media screen and (min-width: 34em) { /* If the screen is big enough, use a different template for grid areas */
|
||
|
.site {
|
||
|
grid-template-columns: 2fr 1fr 1fr;
|
||
|
grid-template-areas:
|
||
|
"title title title"
|
||
|
"main header header"
|
||
|
"main sidebar footer"
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Vea la [Cuadrícula de](https://codepen.io/aamnah/pen/RLVVoE/) la pluma [CSS por ejemplo - 2 (áreas de cuadrícula + separación de cuadrícula)](https://codepen.io/aamnah/pen/RLVVoE/) por Aamnah Akram ( [@aamnah](https://codepen.io/aamnah) ) en [CodePen](https://codepen.io) .
|
||
|
|
||
|
#### Más información:
|
||
|
|
||
|
* [CSS Grid Palyground por Mozilla](https://mozilladevelopers.github.io/playground/) Gran punto de partida si eres nuevo en CSS Grids. Tiene elementos visuales para ayudarte a entender la terminología fácilmente.
|
||
|
* [YouTube: Morten Rand-Hendriksen: CSS Grid lo cambia todo (Acerca de los diseños web)](https://www.youtube.com/watch?v=txZq7Laz7_4) Esta presentación lo convencerá en menos de una hora por qué CSS Grids es genial y por qué / cómo debe usarlos
|
||
|
* [Videos: Serie de videos Learn Grid Layout por Rachel Andrew](https://gridbyexample.com/video/) Rachel Andrew es considerada una experta en el tema. Los títulos de los videos pueden parecer extraños y abrumadores, pero el contenido es corto y al punto
|
||
|
* [Libro: Prepárese para el diseño de cuadrícula de CSS por Rachel Andrew](https://abookapart.com/products/get-ready-for-css-grid-layout)
|