• +34 685 967 885
  • +34 695 898 191
  • antgarprats@gmail.com
  • Antonio García Prats

creando interfaces utilizando css grid

Creando interfaces utilizando Grid

CSS Grid se ha convertido en una de las herramientas más poderosas para el diseño de interfaces modernas. Su adopción en CSS3 ha permitido a desarrolladores y diseñadores web estructurar páginas complejas de forma intuitiva y responsiva, sin la necesidad de recurrir a trucos o estructuras forzadas. En este artículo, exploraremos en profundidad los fundamentos de CSS Grid, las propiedades esenciales que lo hacen tan versátil y cómo aplicarlo para crear interfaces atractivas y funcionales. Como ejemplo práctico, vamos aplicar estos conocimientos creando interfaces utilizando Grid.

Introducción a CSS Grid

CSS Grid es un sistema de diseño bidimensional que permite controlar tanto las filas como las columnas de un contenedor. A diferencia de otros métodos tradicionales como floats o flexbox (este último enfocado principalmente en la distribución unidimensional), Grid ofrece una solución nativa para estructurar layouts complejos de manera eficiente.

La gran ventaja de CSS Grid radica en su capacidad para separar la estructura del contenido y el diseño visual. Esto significa que se pueden definir áreas específicas del diseño, posicionar elementos en la cuadrícula y gestionar espacios de forma responsiva, lo cual es fundamental en el desarrollo de interfaces que deben adaptarse a múltiples dispositivos y tamaños de pantalla.

Fundamentos: creando interfaces utilizando Grid

El contenedor Grid y los ítems

Para empezar a trabajar con CSS Grid, es necesario identificar dos conceptos clave:

Contenedor Grid (Grid Container): Es el elemento padre al que se le aplica la propiedad display: grid o display: inline-grid. Este contenedor se convierte en la base sobre la cual se define la cuadrícula y determina cómo se distribuyen los elementos internos.

Ítems Grid (Grid Items): Son los elementos hijos directos del contenedor grid. Estos elementos se posicionan dentro de la cuadrícula de acuerdo a las reglas y propiedades definidas.

Mediante la separación entre contenedor e ítems, se facilita el control sobre el posicionamiento y la distribución de los elementos, permitiendo así una mayor flexibilidad en el diseño.

Cómo activar CSS Grid

La activación de CSS Grid es sencilla. Basta con asignar la propiedad display: grid al contenedor deseado:

.container {
  display: grid;
}

Con esta simple línea, el contenedor se transforma en un grid y todos sus hijos se comportarán como ítems grid, listos para ser organizados según la configuración que definamos.

Propiedades fundamentales de CSS Grid

Una vez activado el grid, existen varias propiedades fundamentales que permiten definir la estructura y el comportamiento de la cuadrícula:

1. Grid template: definición de columnas y filas

grid-template-columns: Permite especificar la cantidad y el tamaño de las columnas en el grid. Se pueden utilizar unidades fijas, relativas o funciones como repeat().

.container {
  grid-template-columns: 200px 1fr 2fr;
}

En este ejemplo, la primera columna tiene un ancho fijo de 200 píxeles, mientras que la segunda y tercera se distribuyen proporcionalmente utilizando unidades fraccionales (fr).

grid-template-rows: Funciona de manera similar a grid-template-columns, pero define la altura de las filas.

.container {
  grid-template-rows: 100px auto 150px;
}

Aquí, la primera fila tiene 100 píxeles, la segunda se ajusta automáticamente al contenido, y la tercera tiene 150 píxeles.

2. Funciones Avanzadas: repeat(), minmax(), auto-fill y auto-fit

repeat(): Facilita la repetición de columnas o filas sin tener que escribir cada valor manualmente.

.container {
  grid-template-columns: repeat(4, 1fr);
}

Esto crea cuatro columnas de igual ancho.

minmax(): Define un tamaño mínimo y máximo para una columna o fila, lo cual es muy útil en diseños responsivos.

.container {
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
}

Este ejemplo crea tantas columnas como quepan en el contenedor, cada una con un ancho mínimo de 150 píxeles y un ancho flexible de 1fr.

3. Área de la cuadrícula: grid-template-areas

La propiedad grid-template-areas permite definir zonas específicas del grid mediante nombres. Esta técnica mejora la legibilidad del código y facilita la organización de la disposición visual.

.container {
  grid-template-areas:
    "header header header"
    "sidebar content content"
    "footer footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }

Con este método, se define de forma clara la estructura del layout, y cada elemento se posiciona asignándole el nombre correspondiente mediante la propiedad grid-area.

4. Espaciado entre Ítems: gap (grid-gap)

La propiedad gap (o en versiones anteriores, grid-gap) establece el espacio entre las filas y columnas de la cuadrícula.

.container {
  gap: 20px;
}

Esto añade un espacio de 20 píxeles tanto entre columnas como entre filas, mejorando la legibilidad y estética del diseño.

5. Alineación y distribución

CSS Grid ofrece propiedades que facilitan la alineación de ítems tanto a nivel individual como colectivo:

justify-items: Alinea los ítems dentro de cada celda a lo largo del eje horizontal.

align-items: Alinea los ítems dentro de cada celda a lo largo del eje vertical.

justify-content: Distribuye la cuadrícula en el contenedor a lo largo del eje horizontal, afectando al conjunto de ítems.

align-content: Realiza una distribución similar en el eje vertical.

Estas propiedades permiten ajustes finos en la presentación de los elementos, asegurando que el diseño sea coherente y visualmente atractivo.

6. Posicionamiento específico de ítems

Para controlar la posición exacta de cada elemento dentro del grid, se utilizan las siguientes propiedades:

grid-column-start y grid-column-end: Definen el inicio y el final de un ítem en las columnas.

grid-row-start y grid-row-end: Realizan la misma función para las filas.

grid-area: Permite agrupar las cuatro propiedades anteriores en una sola declaración.

.item {
  grid-column: 2 / 4; /* Desde la segunda hasta la tercera columna */
  grid-row: 1 / 3;    /* Ocupa la primera y segunda fila */
}

Estas propiedades son esenciales para crear layouts asimétricos y diseños complejos donde el posicionamiento exacto de cada ítem es crucial.

Ejemplo práctico: creando una galería de imágenes

La idea es poner en práctica toda la información que, anteriormente, he recopilado sobre Grid CSS y que nos sirva para incluir una galería de imágenes personalizada. Veámos el código:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Grid Gallery with CSS Clip Path Effect</title>

    <link rel="stylesheet" href="style.css">

</head>
<body>

    <h2>Galería de fotografías</h2>

 
    <div class="masonry">
        <div class="portfolio-item">
          <img src="image/pic-1.jpg" />
        </div>
        <div class="portfolio-item">
          <img src="image/pic-2.jpg" />
        </div>
        <div class="portfolio-item">
          <img src="image/pic-3.jpg" />
        </div>
        <div class="portfolio-item">
          <img src="image/pic-4.jpg" />
        </div>
        <div class="portfolio-item">
          <img src="image/pic-5.jpg" />
        </div>
        <div class="portfolio-item">
          <img src="image/pic-6.jpg" />
        </div>
        <div class="portfolio-item">
          <img src="image/pic-7.jpg" />
    </div>
    
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
    <script src="script.js"></script>

</body>
</html>
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
  }
  
  body {
    margin: 0;
    padding: 0;
    position: relative;
    background-color: #212529;
  }
  
  .masonry {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 50px 10px;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    grid-auto-rows: 280px;
    grid-auto-flow: dense;
    grid-gap: 10px;
  }
  
  .masonry .portfolio-item {
    position: relative;
    background-color: #2f3337;
    overflow: hidden;
    box-shadow: 0 5px 5px rgba(0, 0, 0, 0.02), inset 0 0 0 1px rgba(0, 0, 0, 0.07);
  }
  
  .masonry .portfolio-item:nth-child(4n + 1) {
    grid-column: span 1;
    grid-row: span 2;
  }
  
  .masonry .portfolio-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

El efecto que lleva este código que os he compartido tiene el siguiente efecto que os muestro en la imágen:

galería de imágenes personalizada con Grid CSS

Para quienes estén interesados, pueden acudir a la fuente original de la que he extraido este código, en youtube, en la página designtorch.

Buenas prácticas y consejos

Planificación del layout

Antes de codificar, es fundamental planificar el layout en papel o utilizando herramientas de diseño. Visualizar la estructura y definir las áreas ayuda a evitar complicaciones durante el desarrollo y garantiza una mayor coherencia en el resultado final.

Utilizar funciones de CSS Grid

Las funciones como repeat(), minmax() y los comportamientos automáticos con auto-fill o auto-fit facilitan la creación de diseños responsivos. Estas funciones no solo reducen la cantidad de código, sino que permiten adaptarse a diferentes tamaños de pantalla de forma dinámica.

Compatibilidad y soporte

Aunque la mayoría de los navegadores modernos soportan CSS Grid, siempre es aconsejable revisar la compatibilidad y, en casos de necesidad, proporcionar fallbacks utilizando Flexbox u otras técnicas. Herramientas como Can I use ofrecen información actualizada sobre el soporte en diferentes navegadores.

Mantenimiento y escalabilidad

Organizar el código CSS en módulos y utilizar variables o preprocesadores (como SASS o LESS) pueden facilitar el mantenimiento del proyecto a largo plazo. Esto es especialmente útil en proyectos grandes donde la claridad y la modularidad son claves para la escalabilidad.

Accesibilidad y semántica

Aunque CSS Grid se centra en la disposición visual, es importante mantener la semántica HTML. Utilizar etiquetas HTML adecuadas (como <header>, <nav>, <section>, <article> y <footer>) mejora la accesibilidad y la optimización para motores de búsqueda. La separación entre estructura y presentación permite que los usuarios con tecnologías asistivas tengan una mejor experiencia.

Grid CSS es una herramienta con la que podrás crear web atractvas y responsivas

CSS Grid representa una revolución en el diseño de interfaces web, ofreciendo un sistema robusto y flexible que facilita la creación de layouts complejos y responsivos. Desde la definición de áreas específicas con grid-template-areas hasta el manejo dinámico de columnas y filas con funciones como repeat() y minmax(), cada propiedad de CSS Grid está diseñada para simplificar el proceso de diseño.

La clave para dominar CSS Grid reside en comprender la relación entre el contenedor y los ítems, y en aplicar de forma inteligente las propiedades de alineación y espaciado para conseguir interfaces limpias y funcionales. Además, la capacidad de separar la estructura del contenido permite a los desarrolladores concentrarse en la experiencia del usuario sin sacrificar la estética o la organización del código.

Este enfoque modular y semántico no solo mejora la eficiencia en el desarrollo, sino que también facilita el mantenimiento y la escalabilidad de los proyectos. Al adoptar buenas prácticas y planificar cuidadosamente el diseño, es posible aprovechar al máximo las capacidades de CSS Grid, creando interfaces que se adapten a las necesidades de una audiencia cada vez más exigente y diversa.

La comunidad de desarrolladores y expertos en diseño web, a través de publicaciones y documentación en línea como la ofrecida por MDN y CSS-Tricks, respalda la efectividad y la versatilidad de CSS Grid. Estas fuentes subrayan que la adopción de esta técnica no es solo una mejora estética, sino una verdadera evolución en la forma de construir la web moderna .

En resumen, el dominio de CSS Grid abre un abanico de posibilidades para la creación de interfaces intuitivas, modernas y responsivas. Con su sintaxis clara y sus poderosas propiedades, es una herramienta indispensable en el arsenal de cualquier desarrollador web que aspire a construir experiencias digitales de alta calidad y a la vanguardia tecnológica.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *