Utilitaires✨ Premium

Product Card

Fiche produit en trois tailles selon la place qu'on lui donne : compacte, avec description dès 220 px, puis en rangée avec un second bouton dès 300 px.

CSS@containerE-commerce

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Utilitaires comprend 43 effets, dont 3 gratuits. Découvrir la catégorie →

3 exemples d'usage

Céramiques Gresmoire — le bol en rangée dans la vitrine, le vase compact dans « Vus récemment » — Product Card exemple 1

① Céramiques Gresmoire — le bol en rangée dans la vitrine, le vase compact dans « Vus récemment »

QuandSur la page de collection, la fiche du bol occupe la colonne principale et se montre en entier (description, deux boutons). Dans la colonne « Vus récemment » de 172 px, la même fiche se réduit à visuel, nom, prix et « Acheter ».
PourquoiLa boutique pose un seul composant partout ; la petite colonne n'a jamais de texte tassé ni de bouton coupé, parce que ce qui ne tient pas n'est simplement pas affiché.
RéglagesDeux racines avec nom, prix, description et pictogramme remplacés ; visuels en style="background-image:…" sur .pdc-image. Colonne de droite de 172 px.
Constructeur de pages Quenvarre — le bloc produit qu'on élargit à côté d'un texte — Product Card exemple 2

② Constructeur de pages Quenvarre — le bloc produit qu'on élargit à côté d'un texte

QuandLe marchand fait glisser la poignée entre le bloc produit et le texte d'accompagnement (ou utilise les flèches du clavier) : la description apparaît à 220 px, puis la fiche passe en rangée et gagne « Détails » à 300 px. Au chargement, la largeur fait un aller-retour pour montrer les paliers.
PourquoiOn voit tout de suite quelle largeur de colonne donne la fiche complète, sans prévisualiser trois tailles d'écran.
RéglagesLa poignée règle la largeur du parent de la racine entre 160 et 315 px (câblage dans <script data-scenes>) ; la fiche, sombre, est posée sur la page claire du constructeur sans autre réglage.
Vente en direct Talvérine — la fiche de la théière se compacte quand on ouvre le chat — Product Card exemple 3

③ Vente en direct Talvérine — la fiche de la théière se compacte quand on ouvre le chat

QuandPendant le direct, la fiche du produit présenté est en rangée à côté de la vidéo verticale. Le spectateur touche « Chat » : la colonne des messages s'ouvre, le panneau produit tombe à environ 170 px et la fiche ne garde que l'essentiel pour acheter.
PourquoiLe bouton « Acheter » reste visible et entier pendant qu'on discute, sans deuxième version de la fiche à maintenir.
RéglagesLe bouton « Chat » (aria-expanded) ouvre une colonne de 148 px dans la grille de la scène ; la fiche réagit à sa nouvelle largeur par ses propres règles.

Comment ça marche

Le conteneur interrogé est la racine .fx-0749-root (container: pdc-card / inline-size, width: 100%). La carte .pdc-card démarre en colonne : visuel .pdc-image de 90 px de haut (dégradé indigo → violet, pictogramme d'étiquette), nom en h4, prix .pdc-price en violet clair, puis un seul bouton « Acheter ». La description .pdc-desc et le bouton « Détails » existent dans le HTML mais restent en display: none.

Premier palier, @container pdc-card (min-width: 220px) : la description apparaît sous le prix. Second palier, min-width: 300px : la carte se met en rangée, le visuel devient une colonne de 96 px (110 px de haut au minimum), les boutons descendent en bas de la carte (margin-top: auto) et « Détails » s'affiche à côté d'« Acheter ». Trois formes donc, mesurées à 170, 260 et 330 px de conteneur.

Les deux boutons sont de vrais <button type="button"> qui ne font rien par eux-mêmes : à vous de les relier à votre panier ou à votre page produit (ou de les remplacer par des liens <a>). Un bouton masqué par display: none sort aussi de l'ordre de tabulation, donc le clavier ne tombe jamais sur un bouton invisible.

Accessibilité

  • Vrais boutons : « Acheter » et « Détails » sont des <button>, atteignables à la touche Tab (sur Safari, selon le réglage du clavier macOS) et entourés d'un contour violet clair au :focus-visible.
  • Contraste : texte blanc sur le bouton #7c3aed et prix #a78bfa sur fond sombre, tous deux au-dessus de 4,5:1.
  • Contenu qui disparaît : à moins de 220 px, la description n'est pas affichée et n'est donc pas lue non plus. Si elle contient une information indispensable (taille, allergène…), gardez-la visible en retirant le display: none de .pdc-desc.
  • Pictogramme : le SVG porte aria-hidden="true" ; le nom du produit en h4 suffit à l'identifier.
  • Mouvement réduit : les transitions de la carte, du visuel et des boutons sont supprimées sous prefers-reduced-motion: reduce.

Compatibilité navigateur

Requêtes de conteneur et flexbox, rien d'autre. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : trois formes aux mêmes largeurs, pas de débordement à 390 px, une copie qui change de taille n'affecte pas l'autre.

Chrome 105+✓ Complet (mesuré)
Firefox 110+✓ Complet (mesuré)
Safari 16+✓ Complet (mesuré sous WebKit)
Edge 105+✓ Complet
Mobile iOS 16+✓ Complet
Android Chrome 105+✓ Complet

Sans requêtes de conteneur, la carte garde sa forme compacte (visuel, nom, prix, « Acheter ») : la description et « Détails » restent masqués.

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0749-root">
  <div class="pdc-card">
    <div class="pdc-image"><svg viewBox="0 0 24 24" aria-hidden="true">…</svg></div>
    <div class="pdc-info">
      <h4>Nom du produit</h4>
      <span class="pdc-price">29 €</span>
      <p class="pdc-desc">Description courte</p>
      <div class="pdc-actions">
        <button type="button" class="pdc-btn pdc-btn--primary">Acheter</button>
        <button type="button" class="pdc-btn pdc-btn--secondary">Détails</button>
      </div>
    </div>
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Paliers (CSS — @container pdc-card (min-width: 220px) et (min-width: 300px)) 220 px pour la description, 300 px pour la rangée Avec un nom de produit long, montez la rangée à 340 px ; avec une description d'une ligne, le premier palier peut descendre à 200 px.
Visuel (CSS ou HTML — .pdc-image) Dégradé #1e1b4b → #4c1d95 + pictogramme d'étiquette Mettez la photo du produit avec style="background-image:url(…)" et retirez le SVG ; le recadrage cover est déjà en place.
Couleur d'accent (CSS — .pdc-price et .pdc-btn--primary) #a78bfa / #7c3aed Remplacez les deux valeurs par la couleur de votre marque en gardant un contraste de 4,5:1 avec le texte du bouton.
Libellés et actions (HTML — .pdc-btn) « Acheter », « Détails », sans action Branchez un écouteur click, ou remplacez les balises par <a href="…"> en gardant les classes.
Largeur du visuel en rangée (CSS — .pdc-image { width } dans le palier 300 px) 96 px, 110 px de haut minimum 130 px pour un produit très visuel (vêtement, déco), 72 px pour un catalogue de pièces détachées.
Fond (CSS — .fx-0749-root et .pdc-card) #0a0a0f et voile blanc à 4 % Pour une boutique claire, fond blanc, titre sombre et description grise.

FAQ

Non, ce sont des boutons sans action : la carte ne gère que la mise en page. Reliez-les à votre code de panier (addEventListener('click', …)) ou transformez-les en liens vers votre page produit.
En dessous, deux boutons côte à côte deviendraient trop étroits pour leurs libellés. Le second bouton est masqué (et retiré de la tabulation) tant que la carte n'a pas la place de le montrer correctement.
Oui, chaque racine mesure sa propre case. Avec repeat(auto-fill, minmax(180px, 1fr)), les fiches passent d'elles-mêmes de la forme compacte à la forme complète quand la grille s'élargit.