Una guía interactiva sobre CSS Grid.

CSS Grid es una de las partes más asombrosas del lenguaje CSS. Nos proporciona un montón de herramientas nuevas que podemos usar para crear diseños sofisticados y fluidos. También es sorprendentemente complejo. Me tomó bastante tiempo sentirme realmente cómodo con CSS Grid. En este tutorial, voy a compartir los momentos de mayor claridad que tuve en mi propio aprendizaje de CSS Grid. Aprenderás los fundamentos de este modelo de diseño y verás cómo hacer cosas realmente geniales con él.

CSS Grid es la herramienta más moderna para construir diseños en CSS, pero no es exactamente “de última generación”. ¡Ha sido compatible con todos los navegadores principales desde 2017! Según caniuse, CSS Grid es compatible para 97.8% de los usuarios. Este es un soporte excelente para navegadores; Flexbox solo tiene alrededor de un 0.5% más de compatibilidad.

Introducción y Modelado de CSS Grid

CSS se compone de varios algoritmos de diseño, cada uno diseñado para distintos tipos de interfaces de usuario. El algoritmo de diseño predeterminado, Flow, está diseñado para documentos digitales. Table, para datos tabulares. Flexbox, para distribuir elementos a lo largo de un solo eje.

CSS Grid es el algoritmo de diseño más reciente y avanzado. Es increíblemente potente: permite crear diseños complejos que se adaptan con fluidez a diversas restricciones. A diferencia de otros métodos como Flexbox, que se enfoca en distribuir elementos en una sola dimensión (horizontal o vertical), CSS Grid trabaja con filas y columnas simultáneamente, facilitando la creación de diseños complejos y responsivos con menos código.

Lo más inusual de CSS Grid, en mi opinión, es que la estructura de la cuadrícula (filas y columnas) se define exclusivamente en CSS:


Grid Parent
Grid Children
<Header>
<Nav>
<Main>
<Footer>
Mostrar

Este modelo de diseño introduce conceptos clave como grid container, grid items, grid tracks (filas y columnas), grid areas, y propiedades como grid-template-rows, grid-template-columns y grid-gap, que permiten un control preciso sobre la disposición de los elementos. Además, CSS Grid permite la alineación y distribución de contenido de forma sencilla con propiedades como justify-content, align-items y place-items.

Gracias a su versatilidad, CSS Grid se ha convertido en una herramienta esencial para diseñadores y desarrolladores web, permitiendo la creación de interfaces dinámicas y adaptables sin necesidad de recurrir a estructuras rígidas basadas en float o display: inline-block.

Con CSS Grid, un solo nodo DOM se subdivide en filas y columnas. En esta representación visual interactiva, resaltamos las filas/columnas con líneas discontinuas, pero en realidad son invisibles.

Bastante raro. En cualquier otro modo de diseño, la única forma de crear compartimentos como este es añadiendo más nodos DOM. En el diseño de tabla, por ejemplo, cada fila se crea con un <tr> y cada celda dentro de esa fila con <td> o <th>:

            <!-- First row -->
            <table>
              <tbody>
                <!-- First row -->
                <tr>
                  <!-- Cells in the first row -->
                  <td></td>
                  <td></td>
                  <td></td>
                </tr>
            
                <!-- Second row -->
                <tr>
                  <!-- Cells in the second row -->
                  <td></td>
                  <td></td>
                  <td></td>
                </tr>
              </tbody>
            </table>
              

Conceptos Básicos

CSS Grid es un sistema de diseño avanzado introducido en CSS que permite a los desarrolladores web crear estructuras de diseño complejas de una manera mucho más eficiente que con métodos anteriores como el uso de flotantes o incluso Flexbox en algunos casos. CSS Grid se basa en un modelo bidimensional, lo que significa que permite manipular tanto filas como columnas simultáneamente, ofreciendo un control preciso sobre la ubicación y el tamaño de los elementos en la página web.

Para comenzar a utilizar CSS Grid, primero se debe definir un contenedor como una cuadrícula utilizando la propiedad display: grid. Una vez definido el contenedor, se pueden establecer las filas y columnas dentro de él mediante propiedades como grid-template-columns y grid-template-rows. Estas propiedades permiten especificar cuántas columnas o filas tendrá la cuadrícula y cuál será su tamaño.

Una de las ventajas principales de CSS Grid es su capacidad para asignar automáticamente el tamaño de los elementos utilizando valores como fr (fracción de espacio disponible), auto (ajustando al contenido) o unidades fijas como px, % o em. Esto permite que el diseño se adapte a diferentes resoluciones de pantalla sin la necesidad de ajustes manuales en cada punto de quiebre.

Otra característica destacada de CSS Grid es el uso de áreas de cuadrícula, donde se pueden asignar nombres a diferentes partes del diseño mediante la propiedad grid-template-areas. Esto facilita la organización de los elementos dentro de la página de manera semántica y legible.

Ubicación y Alineación

Una vez que se ha definido la cuadrícula, es posible colocar los elementos dentro de ella de manera precisa utilizando propiedades como grid-column y grid-row. Estas propiedades permiten especificar en qué columnas y filas deben ubicarse los elementos, asegurando un control total sobre su disposición.

Para una mayor personalización, CSS Grid ofrece diferentes propiedades que permiten alinear los elementos tanto horizontal como verticalmente:

  • justify-items: Define la alineación horizontal de los elementos dentro de las celdas de la cuadrícula. Puede tomar valores como start (alineado a la izquierda), center (centrado) y end (alineado a la derecha).
  • align-items: Controla la alineación vertical de los elementos dentro de las celdas de la cuadrícula. Funciona de manera similar a justify-items pero en la dirección vertical.
  • justify-content: Alinea toda la cuadrícula dentro de su contenedor en el eje horizontal. Es útil cuando la cuadrícula no ocupa todo el espacio disponible.
  • align-content: Alinea toda la cuadrícula en el eje vertical dentro del contenedor.

Además de estos métodos de alineación, CSS Grid permite superponer elementos en la cuadrícula utilizando la propiedad z-index, lo que abre la posibilidad de crear diseños más dinámicos y visualmente atractivos.

CSS Grid Responsivo

Uno de los aspectos más poderosos de CSS Grid es su capacidad para crear diseños responsivos de manera sencilla. En lugar de definir tamaños fijos para columnas y filas, se pueden utilizar funciones como minmax() y valores dinámicos como auto y fr para permitir que los elementos se ajusten automáticamente según el tamaño de la pantalla.

Un ejemplo común de un diseño responsivo con CSS Grid es el uso de la función repeat() combinada con auto-fit o auto-fill. Estas funciones permiten que la cuadrícula se ajuste dinámicamente según el número de elementos y el espacio disponible. Por ejemplo:

  .grid-container {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
      gap: 10px;
  }
  

En este caso, la cuadrícula se expandirá o contraerá automáticamente dependiendo del ancho de la pantalla, asegurando que los elementos siempre ocupen un espacio óptimo.

CSS Grid también se puede combinar con media queries para crear diseños que se adapten a diferentes dispositivos. Por ejemplo, se puede definir una cuadrícula con múltiples columnas para pantallas grandes y una sola columna para pantallas pequeñas:

@media (max-width: 768px) {
    .grid-container {
        grid-template-columns: 1fr;
    }
}

Esto garantiza que el diseño sea completamente flexible y funcional en dispositivos móviles, tablets y computadoras de escritorio.

CSS Grid con Flexbox

CSS Grid y Flexbox son dos herramientas poderosas que pueden combinarse para mejorar aún más la estructura y flexibilidad de un diseño web. Mientras que CSS Grid es ideal para definir la estructura general de la página (dividiendo la interfaz en secciones principales como el encabezado, el contenido y el pie de página), Flexbox se puede utilizar dentro de cada una de estas secciones para distribuir elementos de manera eficiente.

Un uso común de esta combinación es definir la disposición general con CSS Grid y luego utilizar Flexbox dentro de cada sección para distribuir los elementos internos. Por ejemplo, se puede usar CSS Grid para dividir una página en un área de contenido principal y una barra lateral, y luego utilizar Flexbox dentro del área de contenido para organizar los elementos de manera más detallada.

.container {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 20px;
}

.content {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

En este ejemplo, la propiedad display: grid se usa para definir la estructura general de la página, mientras que display: flex dentro de la clase .content permite organizar los elementos internos en una columna con espacio uniforme.

Esta combinación de Grid y Flexbox es especialmente útil cuando se trabaja con elementos que necesitan responder dinámicamente al tamaño de la pantalla y al contenido disponible. También permite mantener un código más limpio y organizado, separando la estructura principal de la distribución interna de los elementos.

Ejemplos Prácticos de CSS Grid

Ejercicio 1: Conceptos Básicos de CSS Grid

Aprende los conceptos básicos de CSS Grid definiendo una estructura de cuadrícula simple. Modifica el CSS a continuación para crear diferentes diseños de cuadrícula.

Pista: Intenta cambiar el número de columnas con grid-template-columns o ajusta el valor de gap.

1
2
3
4
5
6
Mostrar

Ejercicio 2: Áreas de Plantilla en CSS Grid

Crea un diseño utilizando las áreas de plantilla de CSS Grid. Esto es perfecto para crear diseños comunes de páginas web.

Pista: Intenta reorganizar el diseño cambiando la propiedad grid-template-areas. Puedes crear diseños como "header sidebar main footer" o "header header, sidebar main, footer footer".

Header
Main
Mostrar

Ejercicio 3: Diseño con Flexbox

Aprende a usar Flexbox para crear diseños responsivos. Experimenta con diferentes propiedades de flexbox.

Pista: Intenta cambiar flex-direction a column o ajustar justify-content a valores como center, flex-start o flex-end.

1
2
3
4

Ejercicio 4: Posicionamiento Avanzado en CSS Grid

Aprende a posicionar elementos en una cuadrícula utilizando las propiedades grid-column y grid-row. Crea diseños complejos con elementos superpuestos.

Pista: Intenta cambiar la posición de los elementos usando grid-column y grid-row. Usa el formato inicio / fin para especificar dónde deben comenzar y terminar los elementos.

1
2
3
4
5
6
Mostrar

Ejercicio 5: Diseño Responsivo con Grid y Flexbox

Crea un diseño responsivo que combine CSS Grid para la estructura general y Flexbox para la disposición de los componentes.

Pista: Intenta modificar la media query para ver cómo el diseño responde a diferentes tamaños de pantalla. También puedes ajustar las propiedades de flexbox en cada sección para diferentes disposiciones.

Header
Content
Mostrar

Apuntes Finales

Entendiendo CSS Grid

En este escenario, nuestra primera columna contiene un pequeño dragón con un ancho exacto. Pero, ¿qué pasa si la columna es demasiado estrecha para contenerlo? Las columnas basadas en porcentajes son rígidas, por lo que nuestra imagen de Skye se desbordará, saliéndose de los límites de la columna. En cambio, las columnas basadas en fr son flexibles, lo que significa que nunca se reducirán por debajo de su tamaño mínimo de contenido, incluso si eso rompe las proporciones establecidas.

Para ser más precisos: la unidad fr distribuye el espacio adicional. Primero, los anchos de las columnas se calculan en función de su contenido. Si sobra espacio, se distribuye según los valores de fr. Esto es muy similar al comportamiento de flex-grow.

En general, esta flexibilidad es algo positivo. Los valores en porcentaje pueden ser demasiado estrictos.

Podemos ver un ejemplo perfecto de esto con gap. Esta propiedad mágica de CSS agrega una cantidad fija de espacio entre todas las columnas y filas dentro de nuestra cuadrícula.

La unidad fr significa "fracción" y es una de las características más potentes de CSS Grid. Permite distribuir el espacio disponible de forma proporcional, similar a como funciona flex-grow en Flexbox.

grid-template-columns: 1fr 3fr;

En este ejemplo, estamos diciendo que:

  • La primera columna debe consumir 1 unidad de espacio
  • La segunda columna debe consumir 3 unidades de espacio

Esto significa que hay 4 unidades totales de espacio (1 + 3 = 4), lo que se convierte en el denominador. La primera columna ocupa ¼ (25%) del espacio disponible, mientras que la segunda columna ocupa ¾ (75%).

La unidad fr aporta la flexibilidad de Flexbox a CSS Grid. A diferencia de porcentajes o valores de longitud (px, em, etc.) que crean restricciones rígidas, las columnas con unidades fr son libres de crecer y reducirse según sea necesario para contener su contenido.

25%
75%
1fr
Columna 1
¼ del espacio
3fr Imagen de ejemplo
Columna 2: ¾ del espacio
1fr : 3fr

Ventajas de la unidad 'fr'

  • Flexibilidad: Las columnas y filas se adaptan automáticamente al espacio disponible.
  • Proporcionalidad: Crear diseños basados en proporciones es mucho más intuitivo que con porcentajes.
  • Compatibilidad: Se puede combinar con otras unidades como px, % o auto.
  • Responsividad: Facilita la creación de diseños que se adaptan a diferentes tamaños de pantalla.

Puedes jugar con los controles de arriba para ver cómo funciona la unidad fr en acción. El deslizador ajusta la proporción entre las columnas, demostrando cómo se distribuye el espacio disponible.

Historia

Antes de CSS Grid, los desarrolladores web dependían de métodos menos eficientes como:

Tablas HTML: Usadas en los primeros años de la web para maquetación.

Floats y Clearfix: Utilizados para posicionar elementos antes de Flexbox.

Flexbox: Introducido para diseños unidimensionales, pero menos eficiente para estructuras de grilla complejas.

CSS Grid resuelve estos problemas al proporcionar un sistema robusto para diseñar filas y columnas simultáneamente.

Conclusión

CSS Grid ha revolucionado la forma en que diseñamos interfaces web al proporcionar un sistema de cuadrícula bidimensional flexible y eficiente. A lo largo de este temario, hemos explorado sus conceptos fundamentales, desde la creación de filas y columnas hasta el posicionamiento avanzado de elementos y su integración con otras tecnologías como Flexbox.

Una de las principales ventajas de CSS Grid es su capacidad para simplificar estructuras de diseño complejas, reduciendo la necesidad de soluciones alternativas como float o inline-block. Además, su compatibilidad con técnicas de diseño responsivo lo convierte en una herramienta imprescindible para desarrollar sitios web modernos y adaptables a diferentes dispositivos.

Para aprovechar al máximo CSS Grid, es recomendable experimentar con sus propiedades, combinarlo con Flexbox cuando sea necesario y aplicar buenas prácticas como el uso de grid-template-areas para una mayor legibilidad del código. Con práctica y exploración, CSS Grid puede convertirse en una solución poderosa para la maquetación web, optimizando tanto la estética como la funcionalidad de nuestros proyectos.

Gracias por leer :3

Widget is loading comments...
Now Playing
Album Art

Current Song

0:00
0:00