Ir al contenido

Card

.card agrupa contenido relacionado. El contenido va en card__body; la imagen, la cabecera y el pie son opcionales. Las cards no fijan su ancho: ubícalas en una grilla.

<div class="card">
<div class="card__image">
<img src="/ejemplos/imagen-1.svg" alt="" width="800" height="500">
</div>
<div class="card__body">
<h3 class="card__title">Diseño web</h3>
<p class="card__description">Sitios rápidos, accesibles y fáciles de administrar.</p>
</div>
<div class="card__footer">
<a href="#" class="btn btn--primary btn--sm">Ver más</a>
</div>
</div>
<div class="card">
<div class="card__header">Destacado</div>
<div class="card__body">
<h3 class="card__title">Soporte mensual</h3>
<p class="card__description">Actualizaciones, respaldos y monitoreo de tu sitio.</p>
</div>
<div class="card__footer">
<a href="#" class="btn btn--outline-primary btn--sm">Cotizar</a>
</div>
</div>

card--elevated cambia el borde por una sombra. card__icon muestra un ícono destacado.

<div class="card card--elevated">
<div class="card__body">
<div class="card__icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 5h16v11H4zM8 20h8M12 16v4" /></svg>
</div>
<h3 class="card__title">Desarrollo a medida</h3>
<p class="card__description">Aplicaciones web conectadas a tus sistemas.</p>
</div>
</div>
<div class="card card--elevated">
<div class="card__body">
<div class="card__icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 8 4v5c0 5-3.5 8-8 9-4.5-1-8-4-8-9V7z" /></svg>
</div>
<h3 class="card__title">Hosting seguro</h3>
<p class="card__description">Certificado SSL, respaldos diarios y soporte local.</p>
</div>
</div>

Para que toda la card sea un enlace, usa <a class="card card--link">: en hover el título toma el color primary y la imagen se acerca. card--plain quita fondo y borde, y redondea la imagen (tarjetas de blog). Un badge dentro de card__image se ubica sobre la imagen.

<a href="#" class="card card--plain card--link">
<div class="card__image">
<span class="badge badge--primary badge--solid">Noticia</span>
<img src="/ejemplos/imagen-2.svg" alt="" width="800" height="500">
</div>
<div class="card__body">
<div class="card__meta">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="16" rx="2" /><path d="M16 3v4M8 3v4M3 10h18" /></svg>
<time datetime="2026-10-20">20 oct 2026</time>
<span aria-hidden="true">·</span>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9" /><path d="M12 7v5l3 2" /></svg>
4 min
</div>
<h3 class="card__title">Cómo elegir un buen hosting</h3>
<p class="card__description">Lo que conviene revisar antes de contratar.</p>
</div>
</a>
<a href="#" class="card card--plain card--link">
<div class="card__image">
<img src="/ejemplos/imagen-3.svg" alt="" width="800" height="500">
</div>
<div class="card__body">
<div class="card__meta">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="16" rx="2" /><path d="M16 3v4M8 3v4M3 10h18" /></svg>
<time datetime="2026-10-12">12 oct 2026</time>
</div>
<h3 class="card__title">Accesibilidad web en 5 pasos</h3>
<p class="card__description">Mejoras simples que ayudan a todas las personas.</p>
</div>
</a>

card--soft usa el fondo de información y ubica el ícono en la esquina. Sirve para preguntas frecuentes y destacados.

<div class="card card--soft">
<div class="card__icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9" /><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6V14M12 17h.01" /></svg>
</div>
<div class="card__body">
<h3 class="card__title">¿Qué incluye el plan?</h3>
<p class="card__description">Diseño, desarrollo, hosting por un año y capacitación.</p>
</div>
</div>
<div class="card card--soft">
<div class="card__icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9" /><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6V14M12 17h.01" /></svg>
</div>
<div class="card__body">
<h3 class="card__title">¿Cuánto demora?</h3>
<p class="card__description">Entre cuatro y seis semanas, según el alcance.</p>
</div>
</div>

card--pricing centra la cabecera y el pie. card__list separa las características y card__price destaca el valor.

<div class="card card--pricing">
<div class="card__header">
<h3 class="card__title">Plan Básico</h3>
<small>Para comenzar una web</small>
</div>
<ul class="card__list">
<li>Espacio web ilimitado</li>
<li>Cuentas de correo ilimitadas</li>
<li>Certificado SSL incluido</li>
</ul>
<div class="card__footer">
<p class="card__price">$10.000 / mes</p>
<a href="#" class="btn btn--outline-primary">Solicitar</a>
</div>
</div>
<div class="card card--pricing">
<div class="card__header">
<h3 class="card__title">Plan Pro</h3>
<small>Para sitios con más tráfico</small>
</div>
<ul class="card__list">
<li>30 GB en SSD</li>
<li>50 cuentas de correo</li>
<li>Respaldos diarios</li>
</ul>
<div class="card__footer">
<p class="card__price">$16.000 / mes</p>
<a href="#" class="btn btn--primary">Solicitar</a>
</div>
</div>
  • En card--link, todo el contenido es el texto del enlace: mantenlo breve y no pongas otros enlaces o botones dentro.
  • Las imágenes decorativas llevan alt=""; si aportan información, describe su contenido.
  • Mantén el orden de los títulos de la página (h2, h3…) aunque cambie el tamaño visual.
Clase Uso
card Base: fondo, borde y esquinas redondeadas.
card__header, card__body, card__footer Cabecera, contenido y pie. El pie queda abajo aunque las cards de una fila tengan distinto alto.
card__image Contenedor de la imagen.
card__icon Ícono destacado en un círculo.
card__meta Fecha, autor, tiempo de lectura.
card__title, card__description Título y texto.
card__list, card__price Lista de características y precio.
card--elevated Con sombra.
card--plain Sin fondo ni borde; imagen redondeada.
card--link Toda la card es un enlace.
card--soft Fondo suave e ícono en la esquina.
card--pricing Planes y precios.
VariableValor por defectoUso
--ds-card-bgvar(--ds-color-surface)Fondo.
--ds-card-colorinheritColor del texto.
--ds-card-border-colorvar(--ds-color-border)Color del borde.
--ds-card-border-width1pxGrosor del borde.
--ds-card-radiusvar(--ds-radius-lg)Radio de las esquinas.
--ds-card-shadownoneSombra.
--ds-card-paddingvar(--ds-space-4)Espacio interno de cuerpo, cabecera y pie.
--ds-card-gap0Separación entre las partes de la card.
--ds-card-cap-bgcolor-mix(in srgb, var(--ds-color-text) 6%, var(--ds-color-surface))Fondo de cabecera y pie.
--ds-card-image-heightautoAlto de la imagen (auto = proporción original).
--ds-card-image-radius0Radio de la imagen.
--ds-card-icon-size3.5remTamaño del ícono destacado.
--ds-card-icon-bgvar(--ds-color-primary)Fondo del ícono destacado.
--ds-card-icon-colorvar(--ds-color-primary-contrast)Color del ícono destacado.