Saltar al contenido
EspañolEnglish
Todos los componentes (204)

Tarjeta de producto

Comercio · ProductCard · .amset-product

Qué es y cuándo usarlo

La ficha de un producto en una rejilla de tienda: la foto, el nombre, una línea de detalle, las estrellas, el precio y, abajo, sus acciones (añadir al carrito, elegir talla).

Cuándo usarlo

  • En el listado de una categoría, en los resultados de una búsqueda o en «También te puede gustar»: cada tarjeta lleva a la ficha de su producto.
  • priceBefore para una rebaja: el precio viejo sale tachado, con el ahorro, y el lector de pantalla oye «Antes».
  • soldOut cuando no quedan existencias: la foto se apaga y se escribe «Sin existencias» encima.
  • badge para una cinta corta en la esquina de la foto: «Nuevo», «Últimas unidades».

Cuándo no

  • Una tarjeta que no es un producto (una categoría, un artículo del blog): Card, que también estira su enlace por encima.
  • La línea de un carrito o de un pedido: OrderSummary.
  • Varias tarjetas en una fila que no cabe: dentro de un Carousel.

Teclado: Tab llega al nombre, que es el único enlace, e Intro abre la ficha. El siguiente Tab entra en las actions. El anillo de foco se pinta en la tarjeta entera, no solo en el nombre.

Accesibilidad: es un article que se llama como el producto. El enlace envuelve solo el nombre y se estira por encima de la tarjeta con un pseudoelemento, así que se pulsa en cualquier sitio y se puede abrir en otra pestaña; las actions van por encima y se pulsan sin abrir la ficha. Sin photoText la foto es decorativa (alt=""), porque el nombre ya está al lado. Las estrellas son de solo lectura y se llaman «Valoración de» y el nombre.

Contexto: va dentro de LocaleProvider (o de AmsetProvider), que decide cómo se escribe el precio.

Aspecto fino: variables CSS --amset-product-*: -detail, -gap, -inner-gap, -name, -padding, -photo-radius, -radius. El tamaño mueve el relleno, el radio, el hueco y los cuerpos de letra.

Cómo se ve

<ProductCard name="Camiseta tecnica" href="/p/camiseta" price={24.9} priceBefore={32} />

Props

Se importa con import { ProductCard } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
hrefobligatoriastring—
nameobligatoriastring—
priceobligatorianumber—
actionsReactNodeLo que va abajo: un boton de añadir al carrito, un selector de talla.
badgestringCinta de esquina: «Nuevo», «Últimas unidades».
classNamestringSe une a las clases de la biblioteca, no las sustituye.
currencystring—
detailstringSegunda linea bajo el nombre: la marca, la categoria.
photostring—
photoRatioPhotoRatio—
photoTextstringQue se ve en la foto. Sin esto la foto es decorativa: el nombre ya esta al lado.
priceBeforenumberPrecio anterior: sale tachado y con el ahorro.
ratingnumberNota media, de 0 a 5.
reviewCountnumber—
size"sm" | "md" | "lg"—
soldOutbooleanSin existencias: se apaga y se dice.

Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.

Mandos

Estas variables CSS son la forma de adaptarlo. Se declaran sobre el selector del componente, no en :root: la hoja las redeclara en la propia regla y una declaración en el mismo elemento gana siempre.

VariablePor defecto
--amset-product-gapvar(--amset-space-3)
--amset-product-inner-gapvar(--amset-space-2)
--amset-product-paddingvar(--amset-space-3)
--amset-product-radiusvar(--amset-radius-lg)
--amset-product-photo-radiusvar(--amset-radius)
--amset-product-namevar(--amset-text-base)
--amset-product-detailvar(--amset-text-sm)

Cómo se cambia

.amset-product {
  --amset-product-gap: ...;
  --amset-product-inner-gap: ...;
}

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: