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.
| Prefixe | Media query | Exemple |
| Aucun | Mobile 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
| Pattern | Valeurs / 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. |
.showMobile | Visible mobile/tablet, cache a partir de 900px. |
.showDesktop | Cache sous 900px, visible desktop. |
.showTabletDown | Visible sous 1200px, cache au-dessus. |
.hideMobile | Cache sous 900px. |
.hideDesktop | Cache a partir de 900px. |
.hideTabletDown | Cache 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
| Pattern | Valeurs |
.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 |
| Responsive | Ajouter 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.
| Famille | Pattern | Exemple |
| 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 |
| Responsive | Inserer 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
| Famille | Classes | Usage |
| Body | .body-01, .body-02, .body-03 | Texte courant, du plus petit au plus grand. |
| Body strong | .body-strong-01, .body-strong-02, .body-strong-03 | Texte courant en medium. |
| Caption | .caption-01, .caption-02 | Micro textes, labels, mentions courtes. |
| Caption strong | .caption-strong-01, .caption-strong-02 | Micro textes accentues. |
| Link | .link-01, .link-02 | Liens soulignes avec cursor pointer. |
| Title | .title-01, .title-02, .title-03 | Titres de blocs ou de cartes. |
| Title strong | .title-strong-01, .title-strong-02, .title-strong-03 | Titres en gras. |
| Title alt | .title-alt-01, .title-alt-02, .title-alt-03 | Variante uppercase en fonte alternative. |
| Heading | .heading-01, .heading-02, .heading-03 | Gros titres. |
| Heading alt | .heading-alt-01, .heading-alt-02, .heading-alt-03 | Gros titres uppercase en fonte alternative. |
| Produit | .product-01, .product-02, .product-03, .product-04 | Noms ou infos produit. |
| Collection | .collection-01, .collection-02, .collection-03 | Libelles de collection/gamme. |
| Prix | .price-01, .price-02, .price-03, .price-04 | Prix actifs. |
| Prix barre | .price-slashed-01, .price-slashed-02, .price-slashed-03, .price-slashed-04 | Ancien prix, remise. |
| Navigation | .navigation-01 | Entrees 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 / token | Usage |
.shadow-01, .shadow-02, .shadow-03 | Ombres progressives. |
.blur-01 | Blur 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-information | Etats systeme. |
var(--sfra-spacer-*) | Espacements normalises. |
var(--sfra-shadow-*) | Ombres tokenisees. |
var(--sfra-border-radius-*) | Rayons de bordure. |
.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.
| Type | Classes |
| 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.
| Taille | Classe |
| 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>
Messages De Tag
| Classe | Usage |
.tagMessage__container | Ligne de message avec texte/icon/tooltip. |
.-promotion | Message promo. |
.-loyalty | Message fidelite. |
.-S | Variante compacte. |
.tagMessage__text | Texte du message. |
.tagMessage__icon | Icon 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
| Classe | Usage |
.badges | Base. |
.notification | Pastille 20x20, souvent compteur. |
.black, .white | Variante couleur pour notification. |
.stroke | Ajoute une bordure contrastante. |
.online | Pastille de statut 8x8. |
.on, .off | Etat online/offline. |
.goldentip | Icon Golden Tip. |
.animated, .-reversed | Etat 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.
| Classe | Usage |
.tabs | Conteneur horizontal. |
.tab | Item d'onglet. |
.-active | Onglet actif. |
.tabUnderline | Ligne 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
| Classe | Usage |
.colorBubble | Pastille couleur. |
.colorBubble__border | Element interne qui porte la couleur. |
--colorBubbleBackground | Variable CSS a definir inline ou via classe. |
.-L | Grande taille. |
.-light | Couleur claire avec bordure visible. |
.-dark | Couleur foncee. |
.-selected | Selection. |
.-disabled | Barre rouge d'indisponibilite. |
.colorBubbleContainer | Wrapper. |
.colorBubbleContainer__wrapper | Liste flex. |
.colorBubbleContainer.-grid | Liste en grille/wrap. |
.colorBubbleContainer.-S | Navigation 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
| Classe | Usage |
.visualIndicator__container | Conteneur des indicateurs. |
.-vertical | Orientation verticale. |
.-thumbnail | Variante thumbnail desktop. |
.-productImageThumbnail | Variante thumbnails produit. |
.visualIndicator__itemContainer | Item. |
.-S | Petit indicateur. |
.-active | Indicateur actif. |
.visualIndicator__itemContainerIcon | Icon 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.
| Classe | Usage |
.visualSlider | Root. |
.visualSlider__container | Rail scrollable. |
.-horizontal, .-vertical | Direction. |
.-active | Desactive le snap pendant interaction. |
.-hover-fade-mode | Mode fade au hover. |
.visualSlider__item | Slide. |
.visualSlider__indicator | Zone d'indicateurs. |
.visualSlider__navigation | Boutons de navigation. |
.-picture, .-thumbnail | Type de navigation. |
.-prev, .-next, .-disabled | Direction/etat. |
.visualSlider__navigationPrev, .visualSlider__navigationNext | Icon/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.
| Classe | Usage |
.quickAddToCartOverlay | Overlay d'ajout rapide. |
[minSize="1"] | Mode compact avec bouton "show more". |
.quickAddToCartOverlay__wrapper | Padding interne. |
.quickAddToCartOverlay__container | Ligne taille + action. |
.quickAddToCartOverlay__title | Titre. |
.quickAddToCartOverlay__showMore | Element visible en mode compact. |
.comingSoonOverlay | Overlay coming soon desktop. |
.backInStockOverlay | Overlay retour en stock desktop. |
Loading Et Helpers D'etat
| Classe | Usage |
.loading | Etat chargement de base. |
.loader-element | Element visuel du loader. |
.loader-element.black | Variante noire. |
.loading.position-fixed | Overlay fixed. |
.loading.iconOnly | Reserve une hauteur minimale. |
.loading.margin | Ajoute une marge au loader. |
.loading.button | Loader dans un bouton. |
.loading.panel, .loading.offcanvas, .loading.toast | Loader centre dans un panneau. |
.loading.page | Loader page complete. |
.loaderContainer | Centre le loader en inline/block. |
.loadBlock | Voile fixed anime. |
.isEmpty | display: none. |
.hasContent | display: block. |
.-hideEtam | Cache avec !important. |
.aspect-ratio | Ratio image produit 0.666..., avec fallback CSS. |
.badge, .badge.-promo | Petit 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.
| Famille | Pourquoi 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.