SVG✨ Premium

Blob Mask

Un bloc découpé en forme de galet organique par un masque SVG, qui se resserre et revient en douceur : dégradé, photo ou chiffre à l'intérieur.

CSSSVG MaskOrganic

Mis à jour le

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

3 exemples d'usage

Portrait en forme de galet sur la page « À propos » d'une naturopathe — Blob Mask exemple 1

① Portrait en forme de galet sur la page « À propos » d'une naturopathe

QuandLa page de présentation d'une naturopathe : à gauche son portrait dans un galet de 206 px qui respire lentement, à droite « Bonjour, je suis Aude », un paragraphe sur sa pratique, deux lignes de formation et le bouton « Prendre rendez-vous ».
PourquoiUne forme douce et irrégulière colle à un métier du bien-être mieux qu'un cercle ou un carré. La respiration lente, presque imperceptible, rend la photo vivante sans détourner de la lecture.
Réglages--blm-size:206px, --blm-speed:6s, --blm-min:92% (respiration plus discrète), --blm-page:transparent, --blm-height:0px ; une <img alt=""> remplace le libellé (portrait dessiné en SVG ici, photo en production).
Pastille organique derrière la note « 4,8 » d'un gîte — Blob Mask exemple 2

② Pastille organique derrière la note « 4,8 » d'un gîte

QuandLe bloc des avis d'un gîte : la note « 4,8 » en blanc dans un petit galet vert de 78 px, à côté de « Les hôtes adorent · 126 avis », du détail par critère (propreté, emplacement, accueil) et de deux extraits d'avis.
PourquoiLa note est l'information que l'on cherche en premier ; la pastille qui respire la signale sans étoile ni badge criard, et sa forme naturelle va avec un lieu de campagne.
Réglages--blm-size:78px, --blm-fill:linear-gradient(135deg,#84cc16,#15803d), --blm-speed:3.2s ; libellé « 4,8 » à 22 px en graisse 800 dans le CSS de la scène.
Grande forme en fond du haut de page d'une savonnerie artisanale — Blob Mask exemple 3

③ Grande forme en fond du haut de page d'une savonnerie artisanale

QuandLa page d'accueil d'une savonnerie : à gauche « Séchés six semaines, coupés main », le texte et le bouton « La boutique » ; à droite un grand galet pastel de 330 px qui déborde du bord de la page, avec la photo du savon posée dessus et son étiquette de prix.
PourquoiLa forme sert de socle au produit et donne du relief à un fond uni, sans photo d'ambiance. Elle déborde volontairement : le haut de page paraît plus large que l'écran.
Réglages--blm-size:330px, --blm-fill:linear-gradient(150deg,#f5d0e6,#d8c4f0 55%,#c4dcf0), --blm-speed:7s, --blm-min:90% ; libellé retiré, racine placée en position:absolute (right:-46px) par le CSS de la scène, savon en image par-dessus.

Comment ça marche

Le bloc .blm-blob est un carré (220 px par défaut, aspect-ratio:1) rempli d'un dégradé cyan → bleu → indigo. Son mask-image est une forme de blob dessinée en SVG et écrite directement dans le CSS (data URI) : seules les zones couvertes par la forme restent visibles. Le masque est centré, sans répétition, et prend toute la largeur du carré : la silhouette entière se voit, bords arrondis et creux compris.

L'animation blmBreathe fait passer la taille du masque de 100 % à 86 % puis la ramène, en 4 s (ease-in-out, en boucle). La forme se resserre vers son centre et revient, comme une respiration ; le contenu, lui, ne bouge pas. Amplitude et durée se règlent avec --blm-min, --blm-max et --blm-speed.

Tout ce qui est dans le bloc est découpé avec lui : le mot « BLOB » centré, ou une <img> qui remplit le carré (object-fit:cover). CSS seul, aucun JavaScript ; chaque déclaration de masque est doublée de sa version -webkit-.

Accessibilité

  • Mouvement réduit : avec prefers-reduced-motion: reduce, l'animation est retirée ; le blob reste à pleine taille, immobile.
  • Mouvement lent : un cycle dure 4 s et la forme ne varie que de 14 % : pas de clignotement ni de saut.
  • Contenu : le texte est un vrai <span> et une image garde son alt. Les bords du blob rognent une partie de l'image : cadrez le sujet au centre.
  • Pointeur : le blob est décoratif et ne réagit pas au clic et garde le curseur normal.

Compatibilité navigateur

mask-image SVG en data URI, mask-size animé (avec les versions -webkit- pour Chrome et Edge avant 120 et Safari avant 15.4), variables CSS dans @keyframes, aspect-ratio, inset. Mesuré dans Chromium, Firefox et WebKit (Playwright) : forme visible (retirer le masque change 8 à 10 % de l'image), respiration, deux copies, arrêt en mouvement réduit, 390 px.

Chrome 88+✓ Complet (mesuré)
Firefox 89+✓ Complet (mesuré)
Safari 15+✓ Complet (mesuré dans WebKit)
Edge 88+✓ Complet (moteur Chromium)
Safari iOS 15+✓ Moteur WebKit, non vérifié sur appareil réel
Chrome Android 88+✓ Complet (moteur Chromium)

Sans masque, le carré s'affiche entier, sans découpe. Sans aspect-ratio, donnez au bloc une hauteur égale à --blm-size.

Le code

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

index.html — structure
<div class="fx-0627-root">
  <div class="blm-blob">
    <span class="blm-label">BLOB</span>
  </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
Taille (CSS — --blm-size) 220px Côté du carré ; la forme suit. 100% pour remplir un parent.
Remplissage (CSS — --blm-fill) linear-gradient(135deg, #06b6d4, #3b82f6, #6366f1) Toute valeur de background. Une <img> placée dans le bloc le couvre.
Respiration (CSS — --blm-min, --blm-max) 86% / 100% Tailles extrêmes du masque. Restez à 100 % ou moins pour --blm-max : au-delà, la forme sort du carré et se fait rogner.
Durée d'un cycle (CSS — --blm-speed) 4s 6 à 8 s pour un fond calme, 3 s pour une pastille plus présente.
Fond et hauteur du bloc (CSS — --blm-page, --blm-height) #0a0a0f / 300px transparent et 0px pour poser le blob dans votre mise en page.
Forme (CSS — l'attribut d du chemin dans l'URL du masque) galet à 10 courbes Remplacez le chemin par un autre blob (générateur de blobs, Figma, Inkscape) dans un viewBox de 200 × 200 ; pensez à le changer dans mask-image et -webkit-mask-image.

FAQ

Le blob est dessiné dans un carré de 200 × 200 et le masque prend toute la largeur du bloc (mask-size de 100 % au plus). Sur un bloc carré, la silhouette entière se voit pendant toute la respiration. Sur un bloc plus large que haut, le masque garderait ses proportions et la forme serait coupée en haut et en bas : gardez aspect-ratio:1 et réglez seulement --blm-size.
Remplacez le <span class="blm-label"> par <img src="portrait.jpg" alt="…"> : l'image couvre le carré puis le masque la découpe. Un portrait cadré serré, visage au centre, donne le meilleur résultat.
Ce code fait varier la taille du masque, pas son dessin : un mask-image ne se transforme pas d'une forme à l'autre. Pour une forme qui se déforme, il faut animer le chemin d'un SVG (voir l'effet Morphing Shape de la même catégorie) ou un border-radius à huit valeurs.