Lecture Rapide

  • Les classes en block__element avec des modificateurs .-etat sont souvent des composants reutilisables.
  • Les classes typographiques comme .body-02 ou .heading-01 peuvent etre posees directement sur du texte.
  • Les utilities comme .d-flex, .mt-16, .px-md-24 ou .justify-content-between sont les plus safe a reutiliser.
  • Les composants comme .button et les icons demandent parfois une structure HTML precise.
  • Les classes applicatives comme .cartLine, .header, .woosmapContainer et .productCard sont reutilisables seulement avec leur markup complet et leur JS eventuel.

Focus Utilities

Cette partie regroupe les classes a usage unique : une classe = une intention CSS simple. Les variantes x/y, comme .mx-* ou .px-*, touchent deux proprietes mais gardent une seule intention : axe horizontal ou vertical.

PrefixeMedia queryExemple
AucunMobile first / tous formats.d-flex, .mt-16
sm@media (min-width: 600px).d-sm-flex, .mt-sm-24
md@media (min-width: 900px).d-md-none, .px-md-40
xl@media (min-width: 1200px).d-xl-grid, .gap-xl-32
xxl@media (min-width: 1800px).d-xxl-block, .p-xxl-64

Display Responsive

PatternValeurs / usage
.d-{value}inline, inline-block, block, grid, table, table-row, table-cell, flex, inline-flex, none
.d-{breakpoint}-{value}Memes valeurs avec sm, md, xl, xxl.
.showMobileVisible mobile/tablet, cache a partir de 900px.
.showDesktopCache sous 900px, visible desktop.
.showTabletDownVisible sous 1200px, cache au-dessus.
.hideMobileCache sous 900px.
.hideDesktopCache a partir de 900px.
.hideTabletDownCache sous 1200px.
<div class="d-none d-md-flex">Visible en flex a partir du desktop</div>
<div class="showMobile">Visible seulement mobile/tablet</div>
<div class="showDesktop">Visible seulement desktop</div>

Flex

PatternValeurs
.flex-{value}fill, row, column, row-reverse, column-reverse, grow-0, grow-1, shrink-0, shrink-1, wrap, nowrap, wrap-reverse
.justify-content-{value}start, end, center, between, around, evenly
.align-items-{value}start, end, center, baseline, stretch
.align-content-{value}start, end, center, between, around, stretch
.align-self-{value}auto, start, end, center, baseline, stretch
ResponsiveAjouter le breakpoint apres la famille : .justify-content-md-between, .flex-xl-row.
<div class="d-flex flex-column flex-md-row align-items-center justify-content-between gap-16">
  ...
</div>

Margin, Padding, Gap

Valeurs disponibles : 0, 2, 4, 6, 8, 10, 12, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 120, 160, 240, 320, 400.

FamillePatternExemple
Margin globale.m-{size}.m-16
Margin axe X/Y.mx-{size}, .my-{size}.mx-auto, .my-24
Margin cote.mt-*, .me-*, .mb-*, .ms-*.mt-16, .mb-40
Margin negative.m-n*, .mx-n*, .my-n*, .mt-n*, .me-n*, .mb-n*, .ms-n*.mt-n8
Padding global.p-{size}.p-24
Padding axe X/Y.px-{size}, .py-{size}.px-16, .py-24
Padding cote.pt-*, .pe-*, .pb-*, .ps-*.pb-32
Gap.gap-{size}.gap-16
ResponsiveInserer le breakpoint apres la famille.mt-md-32, .px-xl-40, .gap-sm-8
<section class="px-16 px-md-40 py-32">
  <div class="d-flex flex-column gap-16 gap-md-24">
    ...
  </div>
</section>

Typographie

FamilleClassesUsage
Body.body-01, .body-02, .body-03Texte courant, du plus petit au plus grand.
Body strong.body-strong-01, .body-strong-02, .body-strong-03Texte courant en medium.
Caption.caption-01, .caption-02Micro textes, labels, mentions courtes.
Caption strong.caption-strong-01, .caption-strong-02Micro textes accentues.
Link.link-01, .link-02Liens soulignes avec cursor pointer.
Title.title-01, .title-02, .title-03Titres de blocs ou de cartes.
Title strong.title-strong-01, .title-strong-02, .title-strong-03Titres en gras.
Title alt.title-alt-01, .title-alt-02, .title-alt-03Variante uppercase en fonte alternative.
Heading.heading-01, .heading-02, .heading-03Gros titres.
Heading alt.heading-alt-01, .heading-alt-02, .heading-alt-03Gros titres uppercase en fonte alternative.
Produit.product-01, .product-02, .product-03, .product-04Noms ou infos produit.
Collection.collection-01, .collection-02, .collection-03Libelles de collection/gamme.
Prix.price-01, .price-02, .price-03, .price-04Prix actifs.
Prix barre.price-slashed-01, .price-slashed-02, .price-slashed-03, .price-slashed-04Ancien prix, remise.
Navigation.navigation-01Entrees de navigation uppercase.
<h2 class="heading-01">Nouvelle collection</h2>
<p class="body-02">Une phrase courte de presentation.</p>
<span class="price-02">39,99 EUR</span>
<span class="price-slashed-02">49,99 EUR</span>

Ombres, Blur Et Tokens

Classe / tokenUsage
.shadow-01, .shadow-02, .shadow-03Ombres progressives.
.blur-01Blur de 4px.
var(--sfra-brand-01) a var(--sfra-brand-03)Couleurs de marque.
var(--sfra-grey-01) a var(--sfra-grey-05)Echelle de gris.
var(--sfra-sales-01), var(--sfra-sales-02)Promotion / sales.
var(--sfra-loyalty-*)Fidelite.
var(--sfra-success), --sfra-warning, --sfra-error, --sfra-informationEtats systeme.
var(--sfra-spacer-*)Espacements normalises.
var(--sfra-shadow-*)Ombres tokenisees.
var(--sfra-border-radius-*)Rayons de bordure.
--sfra-black
--sfra-white
--sfra-sales-01
--sfra-loyalty-01
--sfra-wecare-01
.my-card {
  padding: var(--sfra-spacer-16);
  color: var(--sfra-black);
  background: var(--sfra-white);
  box-shadow: var(--sfra-shadow-01);
}

Boutons

Base obligatoire : .button.

TypeClasses
Tailles.-small, .-medium, .-large
Largeur.-full
Variantes.-primary, .-secondary, .-conversion, .-transparent, .-loyalty
Couleurs.-black, .-white avec .-primary ou .-secondary
Etats.-active, .-selected, .-disabled, :disabled, .-hover
Icons.-iconOnly, .-iconLeft, .-iconRight
Animation desktop.-animated
<button class="button -primary -black -medium">Ajouter au panier</button>

<button class="button -secondary -black -small -iconLeft">
  <i class="icon-heart -small"></i>
  Wishlist
</button>

<button class="button -transparent -iconOnly -medium" aria-label="Fermer">
  <i class="icon-close -small"></i>
</button>

.-conversion sert plutot aux CTA transactionnels. .-transparent est pense pour les CTA poses sur visuel. Pour un bouton charge, utiliser .loading avec un enfant .loader-element.

Icons

Base icons : toute classe qui commence par .icon- herite d'une taille et d'un rendu commun. Les classes nommees qui pointaient vers des SVG absents ont ete retirees du SCSS ; pour reutiliser une icon nommee, il faut que son asset existe dans le dossier attendu.

TailleClasse
12px.-xsmall
16px.-small
20px.-smedium
24px.-medium
32px.-large
48px.-xlarge
56px.-xxlarge
  • Utiliser une classe .icon-* seulement si le masque/image correspondant existe.
  • Ajouter une taille avec .-small, .-medium, etc.
  • Dans un CTA, l'icon herite souvent sa couleur via background-color.
<i class="icon-search -medium" aria-hidden="true"></i>
<button class="button -primary -black -iconLeft">
  <i class="icon-plus -small" aria-hidden="true"></i>
  Ajouter
</button>

Tags

Base obligatoire : .tag.

VarianteUsage
.-defaultTag noir standard.
.-secondaryTag gris clair.
.-promotionPromo.
.-loyaltyFidelite.
.-bestsellerBestseller.
.-lowstockStock faible.
.-lookTag blanc sur contexte visuel.
.-wecareEngagement / WeCare.
.-periodunderwearFlux / culotte menstruelle.
.-success, .-error, .-expiredEtats systeme.
.-transparentTag contour discret.
.-selectedEtat selectionne.
<span class="tag -promotion caption-strong-02">-30%</span>
<span class="tag -wecare"><i class="icon-wecare"></i><p>WeCare</p></span>

Size Buttons

Composant pour selectionner une taille ou une option courte.

ClasseUsage
.sizeButton__containerBase.
.-default-classicBouton contour clair.
.-default-transparentVariante sur image/fond sombre.
.-selectedTaille selectionnee.
.-outOfStockTaille indisponible.
.-hideNotAvailableCache une option indisponible.
.-disabledEtat non interactif.
.-lowStock faible, souvent avec icon.
.loadingEtat chargement.
.sizeButtonList__containerGrille responsive de boutons taille.
<div class="sizeButtonList__container">
  <button class="sizeButton__container -default-classic">XS</button>
  <button class="sizeButton__container -default-classic -selected">S</button>
  <button class="sizeButton__container -outOfStock">M</button>
</div>

Messages De Tag

ClasseUsage
.tagMessage__containerLigne de message avec texte/icon/tooltip.
.-promotionMessage promo.
.-loyaltyMessage fidelite.
.-SVariante compacte.
.tagMessage__textTexte du message.
.tagMessage__iconIcon liee au message.
<div class="tagMessage__container -promotion">
  <i class="icon-promo -small tagMessage__icon"></i>
  <span class="tagMessage__text">Offre speciale</span>
</div>

Badges

ClasseUsage
.badgesBase.
.notificationPastille 20x20, souvent compteur.
.black, .whiteVariante couleur pour notification.
.strokeAjoute une bordure contrastante.
.onlinePastille de statut 8x8.
.on, .offEtat online/offline.
.goldentipIcon Golden Tip.
.animated, .-reversedEtat anime dans certains onglets.
<span class="badges notification black caption-strong-01">2</span>
<span class="badges online on" aria-hidden="true"></span>

Tabs

Structure attendue : .tabs contient des .tab et une .tabUnderline.

ClasseUsage
.tabsConteneur horizontal.
.tabItem d'onglet.
.-activeOnglet actif.
.tabUnderlineLigne active, generalement deplacee en JS.
<div class="tabs">
  <button class="tab -active">Details</button>
  <button class="tab">Livraison</button>
  <span class="tabUnderline"></span>
</div>

Color Bubbles

ClasseUsage
.colorBubblePastille couleur.
.colorBubble__borderElement interne qui porte la couleur.
--colorBubbleBackgroundVariable CSS a definir inline ou via classe.
.-LGrande taille.
.-lightCouleur claire avec bordure visible.
.-darkCouleur foncee.
.-selectedSelection.
.-disabledBarre rouge d'indisponibilite.
.colorBubbleContainerWrapper.
.colorBubbleContainer__wrapperListe flex.
.colorBubbleContainer.-gridListe en grille/wrap.
.colorBubbleContainer.-SNavigation compacte.
<div class="colorBubbleContainer -grid">
  <div class="colorBubbleContainer__wrapper">
    <button class="colorBubble -selected" style="--colorBubbleBackground:#0b1215">
      <span class="colorBubble__border"></span>
    </button>
    <button class="colorBubble -light" style="--colorBubbleBackground:#fdfdfd">
      <span class="colorBubble__border"></span>
    </button>
  </div>
</div>

Visual Indicator

ClasseUsage
.visualIndicator__containerConteneur des indicateurs.
.-verticalOrientation verticale.
.-thumbnailVariante thumbnail desktop.
.-productImageThumbnailVariante thumbnails produit.
.visualIndicator__itemContainerItem.
.-SPetit indicateur.
.-activeIndicateur actif.
.visualIndicator__itemContainerIconIcon centree dans un item.
<div class="visualIndicator__container">
  <button class="visualIndicator__itemContainer -active"></button>
  <button class="visualIndicator__itemContainer"></button>
  <button class="visualIndicator__itemContainer"></button>
</div>

Visual Slider

Composant plus structurel, souvent pilote par JS.

ClasseUsage
.visualSliderRoot.
.visualSlider__containerRail scrollable.
.-horizontal, .-verticalDirection.
.-activeDesactive le snap pendant interaction.
.-hover-fade-modeMode fade au hover.
.visualSlider__itemSlide.
.visualSlider__indicatorZone d'indicateurs.
.visualSlider__navigationBoutons de navigation.
.-picture, .-thumbnailType de navigation.
.-prev, .-next, .-disabledDirection/etat.
.visualSlider__navigationPrev, .visualSlider__navigationNextIcon/bouton interne.
<div class="visualSlider">
  <div class="visualSlider__container -horizontal">
    <div class="visualSlider__item"><img src="image-1.jpg" alt=""></div>
    <div class="visualSlider__item"><img src="image-2.jpg" alt=""></div>
  </div>
  <div class="visualSlider__indicator -horizontal">
    <div class="visualIndicator__container">
      <button class="visualIndicator__itemContainer -active"></button>
      <button class="visualIndicator__itemContainer"></button>
    </div>
  </div>
</div>

Overlays Produit

Ces classes sont reutilisables surtout dans une card produit.

ClasseUsage
.quickAddToCartOverlayOverlay d'ajout rapide.
[minSize="1"]Mode compact avec bouton "show more".
.quickAddToCartOverlay__wrapperPadding interne.
.quickAddToCartOverlay__containerLigne taille + action.
.quickAddToCartOverlay__titleTitre.
.quickAddToCartOverlay__showMoreElement visible en mode compact.
.comingSoonOverlayOverlay coming soon desktop.
.backInStockOverlayOverlay retour en stock desktop.

Loading Et Helpers D'etat

ClasseUsage
.loadingEtat chargement de base.
.loader-elementElement visuel du loader.
.loader-element.blackVariante noire.
.loading.position-fixedOverlay fixed.
.loading.iconOnlyReserve une hauteur minimale.
.loading.marginAjoute une marge au loader.
.loading.buttonLoader dans un bouton.
.loading.panel, .loading.offcanvas, .loading.toastLoader centre dans un panneau.
.loading.pageLoader page complete.
.loaderContainerCentre le loader en inline/block.
.loadBlockVoile fixed anime.
.isEmptydisplay: none.
.hasContentdisplay: block.
.-hideEtamCache avec !important.
.aspect-ratioRatio image produit 0.666..., avec fallback CSS.
.badge, .badge.-promoPetit label promo legacy, a ne pas confondre avec .badges.
<div class="loading loaderContainer">
  <span class="loader-element"></span>
</div>

<div class="aspect-ratio">
  <img src="product.jpg" alt="">
</div>

<span class="badge -promo">Promo</span>

Blocs A Reutiliser Avec Prudence

Ces familles existent dans Global.scss, mais elles semblent plus applicatives que Storybook autonome.

FamillePourquoi etre prudent
.productCard*Dependance forte au markup produit, aux sliders, aux overlays et aux classes de grille.
.cart*, .cartLine*, .miniCart*Lie au panier et au checkout.
.header*, .headerMenu*, .subMenu*Lie au header site et aux etats JS.
.woosmapContainer*, .woosmapStore*Lie a l'integration store locator.
.newsletterPushPanel*, .contactForm*, .smartTribuneWidget*Lie a des integrations/formulaires specifiques.
.ghost*Skeletons applicatifs, a reprendre seulement dans le contexte correspondant.

Recettes Courantes

CTA noir standard

<button class="button -primary -black -medium -animated">
  Voir la selection
</button>

CTA secondaire sur fond clair

<a class="button -secondary -black -small" href="#">
  Decouvrir
</a>

CTA sur image

<button class="button -transparent -iconRight -medium">
  Ajouter
  <i class="icon-plus -small"></i>
</button>

Etiquette produit promo

<span class="tag -promotion caption-strong-02">
  Offre speciale
</span>

Ligne de prix

<p>
  <span class="price-02">29,99 EUR</span>
  <span class="price-slashed-02">39,99 EUR</span>
</p>

Choix de couleur

<button class="colorBubble -L -selected" style="--colorBubbleBackground:#8f1d2c">
  <span class="colorBubble__border"></span>
</button>

A Verifier Avant Reutilisation

  • Le composant a-t-il besoin de JS ? C'est probable pour .tabs, .visualSlider, .quickAddToCartOverlay et .productCard.
  • Le composant a-t-il besoin d'un enfant precis ? Exemple : .colorBubble attend .colorBubble__border.
  • Le composant depend-il d'une classe contexte ? Exemple : plusieurs regles produit dependent de .product-grid.
  • Le visuel depend-il d'une image locale ? Les icons/illustrations pointent vers ../images/pictos/....
  • Le style est-il un helper ou un vrai composant ? .body-02 est safe partout, .cartLine__itemPrice ne l'est pas.