Card Component: 4 formas de crear la misma tarjeta

Aprende a crear un componente card profesional usando Tailwind CSS, Bootstrap, Flexbox puro y CSS Grid. El mismo HTML, diferentes enfoques de estilado.

Las cards son el componente más usado en desarrollo web moderno: portfolios, blogs, e-commerce, dashboards.

Verás cómo crear la misma card (imagen + título + texto + botón) con 4 técnicas distintas.

Entenderás las ventajas y desventajas de cada enfoque: frameworks vs CSS vanilla.

  • Estructura HTML y elementos esenciales.
  • Una card típica contiene: contenedor principal, imagen destacada, área de contenido (título, descripción, metadatos), y zona de acciones (botones, enlaces).
  • La estructura HTML debe ser semántica: usar <article> o <div> para el contenedor, <img> con alt descriptivo, headings apropiados (<h2> o <h3>), y <a> o <button> para las acciones.
  • El diseño más común es vertical (imagen arriba, contenido abajo), pero también existen variantes horizontales y con overlay de texto sobre la imagen.
  • Frameworks vs CSS vanilla: ventajas y trade-offs.

Anatomía de una card

Estructura HTML y elementos esenciales.

Una card típica contiene: contenedor principal, imagen destacada, área de contenido (título, descripción, metadatos), y zona de acciones (botones, enlaces).

La estructura HTML debe ser semántica: usar <article> o <div> para el contenedor, <img> con alt descriptivo, headings apropiados (<h2> o <h3>), y <a> o <button> para las acciones.

El diseño más común es vertical (imagen arriba, contenido abajo), pero también existen variantes horizontales y con overlay de texto sobre la imagen.

4 enfoques para el mismo resultado

Frameworks vs CSS vanilla: ventajas y trade-offs.

Tailwind CSS: Utility-first, desarrollo rápido, HTML más verboso pero sin CSS custom. Ideal para prototipar y proyectos con design system consistente.

Bootstrap: Componentes predefinidos, desarrollo ultra-rápido, menos personalización. Perfecto para MVPs y proyectos con timeline corto.

Flexbox: Control total, CSS limpio y semántico, perfecto para layouts unidireccionales. Mejor para cards verticales u horizontales simples.

CSS Grid: Máxima flexibilidad, ideal para cards con layouts complejos o múltiples columnas internas. Overkill para cards simples, poderoso para cards avanzadas.

Método 1: Tailwind CSS

Utility classes, cero CSS custom.

Tailwind usa clases de utilidad atómicas: cada clase hace una cosa. max-w-sm limita el ancho, rounded-lg añade border-radius, shadow-lg añade sombra.

El enfoque utility-first permite construir componentes sin escribir CSS, pero el HTML se vuelve más largo.

Ventajas: desarrollo rápido, diseño consistente, purge automático en producción. Desventajas: curva de aprendizaje, HTML verboso.

  • overflow-hidden para recortar la imagen en las esquinas redondeadas.
  • bg-white y shadow-lg para la card flotante clásica.
  • p-6 para padding consistente en el contenido.
  • hover:bg-blue-700 para estados interactivos sin JS.
  • transition-colors para animaciones suaves.

Método 2: Bootstrap

Componentes predefinidos, personalización vía variables.

Bootstrap ofrece la clase .card con subcomponentes: .card-img-top, .card-body, .card-title, .card-text.

El HTML es más limpio que Tailwind porque cada clase representa un componente completo, no una propiedad individual.

Ventajas: velocidad extrema, accesibilidad incluida, responsive por defecto. Desventajas: diseños muy reconocibles ('look Bootstrap'), más KB en producción.

  • .card como contenedor principal con estilos predefinidos.
  • .card-img-top para la imagen con border-radius solo arriba.
  • .card-body para padding y separación automática.
  • .btn .btn-primary para botones con estilos del tema.
  • Customización vía CSS variables o SASS.

Método 3: Flexbox

CSS vanilla, control total, perfecto para layouts verticales.

Flexbox organiza el contenido de la card en una columna (flex-direction: column), permitiendo que la imagen y el contenido se apilen naturalmente.

Con flex: 1 en .card-content, el contenido ocupa el espacio restante después de la imagen, útil en grids de cards con alturas variables.

Este método te da control absoluto sobre cada propiedad CSS, pero requiere más código que los frameworks.

  • display: flex + flex-direction: column para layout vertical.
  • flex: 1 en el contenido para distribución automática del espacio.
  • object-fit: cover en la imagen para evitar deformaciones.
  • transition para hover suaves en la card completa.
  • margin-top: auto en el botón para fijarlo al fondo si la descripción varía.

Método 4: CSS Grid

Para cards con layouts internos complejos.

CSS Grid puede parecer overkill para una card simple, pero brilla cuando necesitas layouts más complejos: imagen al lado del contenido, múltiples columnas internas, o áreas específicas.

Con grid-template-rows: auto 1fr auto, defines que la imagen y el botón ocupen su tamaño natural, mientras el contenido se expande.

Este método es el más poderoso para cards avanzadas con elementos posicionados de forma no lineal.

  • display: grid para control bidimensional del layout.
  • grid-template-rows para definir el alto de cada sección.
  • grid-template-areas para layouts con nombres semánticos (avanzado).
  • place-items para centrar elementos dentro de celdas.
  • gap para separación entre elementos sin usar margin.

¿Cuándo usar cada método?

Guía de decisión según tu proyecto.

Tips profesionales

Detalles que marcan la diferencia.

  • object-fit: cover en imágenes para evitar deformaciones, siempre con alto fijo.
  • aspect-ratio: 16 / 9 para mantener proporciones sin alto fijo (soporte moderno).
  • overflow: hidden en el contenedor para que border-radius afecte a la imagen.
  • transition en hover para cards que parecen 'levantarse' con transform: translateY(-4px).
  • max-width en la card para que no se estire demasiado en pantallas grandes.
  • line-clamp: 3 para truncar texto largo con elipsis (con -webkit-line-clamp).
CSS
71

Card Component: 4 formas de crear la misma tarjeta

Aprende a crear un componente card profesional usando Tailwind CSS, Bootstrap, Flexbox puro y CSS Grid. El mismo HTML, diferentes enfoques de estilado.

Código del tema: display: grid; gap: 1rem;

📘 Teoría

Anatomía de una card

4 enfoques para el mismo resultado

Frameworks vs CSS vanilla: ventajas y trade-offs.

1

Tailwind CSS: Utility-first, desarrollo rápido, HTML más verboso pero sin CSS custom. Ideal para prototipar y proyectos con design system consistente.

2

Bootstrap: Componentes predefinidos, desarrollo ultra-rápido, menos personalización. Perfecto para MVPs y proyectos con timeline corto.

3

Flexbox: Control total, CSS limpio y semántico, perfecto para layouts unidireccionales. Mejor para cards verticales u horizontales simples.

4

CSS Grid: Máxima flexibilidad, ideal para cards con layouts complejos o múltiples columnas internas. Overkill para cards simples, poderoso para cards avanzadas.

Método 1: Tailwind CSS

Utility classes, cero CSS custom.

Tailwind usa clases de utilidad atómicas: cada clase hace una cosa. max-w-sm limita el ancho, rounded-lg añade border-radius, shadow-lg añade sombra.

El enfoque utility-first permite construir componentes sin escribir CSS, pero el HTML se vuelve más largo.

Ventajas: desarrollo rápido, diseño consistente, purge automático en producción. Desventajas: curva de aprendizaje, HTML verboso.

  • overflow-hidden para recortar la imagen en las esquinas redondeadas.
  • bg-white y shadow-lg para la card flotante clásica.
  • p-6 para padding consistente en el contenido.
  • hover:bg-blue-700 para estados interactivos sin JS.
  • transition-colors para animaciones suaves.
Card con Tailwind CSS
<article class="max-w-sm rounded-lg overflow-hidden shadow-lg bg-white">
  <img class="w-full h-48 object-cover" 
       src="https://images.unsplash.com/photo-1492144534655-ae79c964c9d7?w=400" 
       alt="Automóvil deportivo">
  <div class="p-6">
    <h3 class="font-bold text-xl mb-2 text-gray-900">Deportivo Clásico</h3>
    <p class="text-gray-700 text-base mb-4">
      Un icono del automovilismo que combina elegancia, potencia y diseño atemporal.
    </p>
    <a href="#" 
       class="inline-block bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700 transition-colors">
      Ver detalles
    </a>
  </div>
</article>

Método 2: Bootstrap

Componentes predefinidos, personalización vía variables.

Bootstrap ofrece la clase .card con subcomponentes: .card-img-top, .card-body, .card-title, .card-text.

El HTML es más limpio que Tailwind porque cada clase representa un componente completo, no una propiedad individual.

Ventajas: velocidad extrema, accesibilidad incluida, responsive por defecto. Desventajas: diseños muy reconocibles ('look Bootstrap'), más KB en producción.

  • .card como contenedor principal con estilos predefinidos.
  • .card-img-top para la imagen con border-radius solo arriba.
  • .card-body para padding y separación automática.
  • .btn .btn-primary para botones con estilos del tema.
  • Customización vía CSS variables o SASS.
Card con Bootstrap 5
<article class="card" style="width: 20rem;">
  <img src="https://images.unsplash.com/photo-1492144534655-ae79c964c9d7?w=400" 
       class="card-img-top" 
       alt="Automóvil deportivo">
  <div class="card-body">
    <h3 class="card-title">Deportivo Clásico</h3>
    <p class="card-text">
      Un icono del automovilismo que combina elegancia, potencia y diseño atemporal.
    </p>
    <a href="#" class="btn btn-primary">Ver detalles</a>
  </div>
</article>

Método 3: Flexbox

CSS vanilla, control total, perfecto para layouts verticales.

Flexbox organiza el contenido de la card en una columna (flex-direction: column), permitiendo que la imagen y el contenido se apilen naturalmente.

Con flex: 1 en .card-content, el contenido ocupa el espacio restante después de la imagen, útil en grids de cards con alturas variables.

Este método te da control absoluto sobre cada propiedad CSS, pero requiere más código que los frameworks.

  • display: flex + flex-direction: column para layout vertical.
  • flex: 1 en el contenido para distribución automática del espacio.
  • object-fit: cover en la imagen para evitar deformaciones.
  • transition para hover suaves en la card completa.
  • margin-top: auto en el botón para fijarlo al fondo si la descripción varía.
Card con Flexbox
.card {
  display: flex;
  flex-direction: column;
  max-width: 320px;
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  transition: transform 0.3s, box-shadow 0.3s;
}

.card:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
}

.card-image {
  width: 100%;
  height: 200px;
  object-fit: cover;
}

.card-content {
  display: flex;
  flex-direction: column;
  padding: 24px;
  flex: 1;
}

.card-title {
  margin: 0 0 12px;
  font-size: 20px;
  font-weight: 700;
  color: #0f172a;
}

.card-text {
  margin: 0 0 16px;
  color: #64748b;
  line-height: 1.6;
  flex: 1;
}

.card-link {
  display: inline-block;
  padding: 10px 20px;
  background: #2563eb;
  color: #fff;
  text-decoration: none;
  border-radius: 6px;
  font-weight: 600;
  transition: background 0.2s;
  align-self: flex-start;
}

.card-link:hover {
  background: #1d4ed8;
}

Método 4: CSS Grid

Para cards con layouts internos complejos.

CSS Grid puede parecer overkill para una card simple, pero brilla cuando necesitas layouts más complejos: imagen al lado del contenido, múltiples columnas internas, o áreas específicas.

Con grid-template-rows: auto 1fr auto, defines que la imagen y el botón ocupen su tamaño natural, mientras el contenido se expande.

Este método es el más poderoso para cards avanzadas con elementos posicionados de forma no lineal.

  • display: grid para control bidimensional del layout.
  • grid-template-rows para definir el alto de cada sección.
  • grid-template-areas para layouts con nombres semánticos (avanzado).
  • place-items para centrar elementos dentro de celdas.
  • gap para separación entre elementos sin usar margin.
Card con CSS Grid
.card {
  display: grid;
  grid-template-rows: auto 1fr auto;
  max-width: 320px;
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}

.card-image {
  width: 100%;
  height: 200px;
  object-fit: cover;
}

.card-content {
  padding: 24px;
  display: grid;
  gap: 12px;
}

.card-title {
  margin: 0;
  font-size: 20px;
  font-weight: 700;
  color: #0f172a;
}

.card-text {
  margin: 0;
  color: #64748b;
  line-height: 1.6;
}

.card-link {
  justify-self: start;
  padding: 10px 20px;
  background: #2563eb;
  color: #fff;
  text-decoration: none;
  border-radius: 6px;
  font-weight: 600;
  transition: background 0.2s;
}

.card-link:hover {
  background: #1d4ed8;
}

¿Cuándo usar cada método?

Guía de decisión según tu proyecto.

1

Usa Tailwind si...

Tienes un design system definido, quieres desarrollo rápido, no te importa el HTML verboso, y valoras la consistencia sobre la personalización extrema.

2

Usa Bootstrap si...

Necesitas un MVP rápido, no tienes diseñador, quieres componentes accesibles out-of-the-box, o trabajas en equipo con juniors que conocen Bootstrap.

3

Usa Flexbox si...

Quieres control total, tu card tiene layout vertical u horizontal simple, prefieres CSS semántico, o estás aprendiendo CSS sin frameworks.

4

Usa Grid si...

Tu card tiene layout complejo (imagen al lado, múltiples columnas), necesitas posicionamiento bidimensional, o construyes componentes muy customizados.

5

Combina métodos

No es todo o nada: puedes usar Grid para el layout general de la card y Flexbox para el interior del .card-content. Lo importante es usar la herramienta correcta para cada parte.

Tips profesionales

Detalles que marcan la diferencia.

  • object-fit: cover en imágenes para evitar deformaciones, siempre con alto fijo.
  • aspect-ratio: 16 / 9 para mantener proporciones sin alto fijo (soporte moderno).
  • overflow: hidden en el contenedor para que border-radius afecte a la imagen.
  • transition en hover para cards que parecen 'levantarse' con transform: translateY(-4px).
  • max-width en la card para que no se estire demasiado en pantallas grandes.
  • line-clamp: 3 para truncar texto largo con elipsis (con -webkit-line-clamp).
  • loading='lazy' en imágenes para mejorar el rendimiento.
  • aria-label descriptivo en enlaces del tipo 'Ver más' para accesibilidad.

🧪 Aprende probando

Ejemplo Card con Tailwind CSS (completa) Versión interactiva con hover y responsive.
Ejemplo Card con Bootstrap 5 (completa) Con badges, iconos y footer.
Ejemplo Card con Flexbox (completa) CSS vanilla con hover y animaciones.
Ejemplo Card con CSS Grid (layout horizontal) Card horizontal con Grid para demostrar su poder.

🏁 Retos

Reto Reto: Card básica con Flexbox Crea una card vertical usando solo Flexbox.
Reto Reto: Añade efectos hover Mejora la card con animaciones al pasar el mouse.
Reto Reto: Card horizontal con Grid Convierte una card vertical en horizontal usando Grid.

🧰 Recursos

CodePen: UI cards con hover y layout
Abrir en CodePen

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .