Glassmorphism✨ Premium

Squircle Image Masks

Quatre portraits de 90 px masqués en superellipse n = 4 qui, au survol, se resserrent réellement vers n = 5 en 0,6 s (deux clip-path: polygon() de 64 points que le navigateur interpole), pendant qu'un anneau de couleur et le prénom apparaissent : une équipe présentée sans légende sous chaque visage.

SVGClip-pathHover

Mis à jour le

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

3 exemples d'usage

Équipe d'une maison de santé — page « Nos soignants » — Squircle Image Masks exemple 1

① Équipe d'une maison de santé — page « Nos soignants »

QuandLe patient cherche qui le suivra : il survole les quatre visages — médecin, infirmière, kinésithérapeute, sage-femme — et le prénom apparaît sous chacun.
PourquoiLa forme douce et le prénom qui apparaît rendent l'équipe accessible sans transformer la page en annuaire ; l'anneau, dans la couleur de la profession, se relit dans la légende du bas.
RéglagesMasques agrandis à 104 px ; prénom en #0f172a à 12 px (le gris du code est pensé pour un fond sombre) ; portraits dessinés en SVG avec un id de dégradé par scène (msp-g1 à msp-g4) ; légende des quatre couleurs de l'anneau.
Choisir son moniteur — école de surf — Squircle Image Masks exemple 2

② Choisir son moniteur — école de surf

QuandAvant de réserver un cours de deux heures, le client survole les moniteurs sur fond de houle : Maëlys, Tiago, Joseph, Inès.
PourquoiLe masque superelliptique unifie des photos prises dans des conditions très différentes — plage, eau, contre-jour — : même cadre, même coin, quel que soit le fond de la photo.
RéglagesMasques de 104 px, prénom blanc avec ombre portée pour se lire sur la mer ; fonds de portrait aux couleurs de combinaisons ; répartition débutants / confirmés rappelée en bas.
Auteurs d'un recueil de nouvelles — page d'une maison d'édition — Squircle Image Masks exemple 3

③ Auteurs d'un recueil de nouvelles — page d'une maison d'édition

QuandPage de parution d'un recueil à quatre voix : les lecteurs survolent les portraits des auteurs sous le titre.
PourquoiLa forme soignée convient à l'édition, et le prénom qui apparaît évite une légende sous chaque portrait ; le resserrement de n = 4 à n = 5 donne un mouvement discret, qui reste sobre sur une page de livre.
RéglagesMasques de 104 px sur papier sombre, nom complet en serif ivoire à 13 px ; portraits en tons sourds (pierre, ardoise, rouille) ; ids edit-g1 à edit-g4.

Comment ça marche

Chaque .sq-mask (90 × 90 px) contient une image .sq-mask__img — dans le code vendu, un portrait SVG de remplacement : fond en dégradé, tête et buste en blanc à 30 % —, un anneau .sq-mask__ring et un prénom .sq-mask__name. L'image est découpée par clip-path: var(--sqm-squircle), une superellipse n = 4 de 64 points en pourcentages. Au survol, elle passe à var(--sqm-squircle-tight), n = 5, avec transition: clip-path 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) : les deux polygones ont 64 points dans le même ordre, le navigateur les interpole. Au point à 45°, le bord se rapproche du coin de 7,2 à 5,8 px sur chaque axe : le masque se « tend » vers le carré. Mesuré pendant la transition, à 120 ms : 31,5 % pour un point qui va de 34,3 % à 30,3 %, dans Chromium 151, Firefox 153 et WebKit 26.

En même temps, en 0,5 s : le bloc grossit de 10 % (scale(1.1), avec rebond), l'anneau — 4 px autour de l'image, bordure de 2 px, border-radius: 28% — passe de l'opacité 0 et scale(0.9) à 1, dans la couleur de sa position (violet, rose, cyan, vert par :nth-child) ; le prénom (9,6 px, graisse 600, #a1a1aa) apparaît 18 px sous le portrait en 0,3 s. L'anneau n'est pas découpé : c'est un frère de l'image, il reste entier autour du masque. Aucun JavaScript.

Les deux masques, --sqm-squircle et --sqm-squircle-tight, sont des variables CSS de même structure, sans <clipPath> SVG : c'est ce qui permet au « resserrement » du survol d'exister. Deux url(#…) vers des SVG absents laisseraient des portraits carrés, et même présents ils ne s'interpoleraient pas l'un vers l'autre. Les dégradés des portraits de démonstration portent des identifiants préfixés, sqm-grad-1 à 4, pour ne pas croiser un id générique de votre page.

Accessibilité

  • Le prénom n'apparaît qu'au survol : au clavier, il ne se montre jamais — les .sq-mask sont des div sans tabindex (mesuré : Tab ne s'y arrête pas). Il reste dans le DOM avec opacity: 0, donc lu par les lecteurs d'écran. Si les portraits mènent à une fiche, faites de .sq-mask un lien et ajoutez .sq-mask:focus-visible .sq-mask__name { opacity: 1 } ainsi que la même règle pour l'anneau, qui sert alors d'indicateur de focus (il n'est pas rogné).
  • Images : remplacez les SVG de démonstration par <img class="sq-mask__img" src="…" alt="Dr Hélène Marchal, médecin généraliste"> — object-fit: cover est déjà dans le CSS et clip-path s'applique à l'image. Les SVG du code n'ont ni role ni titre : s'ils restent décoratifs, ajoutez aria-hidden="true".
  • Contraste du prénom : #a1a1aa à 9,6 px vaut 7,7:1 sur le fond sombre #0a0a0f, mais 2,6:1 sur une page blanche — et la taille est petite. Sur fond clair, passez .sq-mask__name à #334155 et 12 px. L'anneau, seul porteur de la couleur, ne doit pas être la seule façon de lire une profession : doublez-la d'un mot. Pas de prefers-reduced-motion : le grossissement de 10 % reste actif sous la préférence (mesuré).

Compatibilité navigateur

CSS seul : clip-path: polygon() sur un élément <svg> (ou <img>), transition de clip-path entre deux polygones de 64 points, propriétés personnalisées, transform, opacity. Zéro JavaScript, aucune image externe. Masque et resserrement mesurés dans Chromium 151, Firefox 153 et WebKit 26.

Chrome 55+✓ Complet
Firefox 54+✓ Complet
Safari 13.1+✓ Complet
Edge 79+✓ Complet
Mobile iOS 13.4+✓ Complet (un appui fait apparaître le prénom)
Android Chrome 55+✓ Complet (un appui fait apparaître le prénom)

Sans clip-path (Firefox avant 54, Safari avant 13.1 sans préfixe), les portraits sont carrés ; l'anneau, le grossissement et le prénom fonctionnent toujours.

Le code

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

index.html — structure
<div class="demo-preview">
  <div class="sq-masks-wrap">
    <div class="sq-mask">
      <svg class="sq-mask__img" viewBox="0 0 90 90">…</svg>
      <span class="sq-mask__ring"></span>
      <span class="sq-mask__name">…</span>
    </div>
    <div class="sq-mask">…</div>
    <div class="sq-mask">…</div>
    <div class="sq-mask">…</div>
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Squircle Image Masks, prêt à coller — et les 840 effets. Ou 299 € TTC une fois, accès à vie.

Personnaliser

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

Option / propriétéDéfautEffet
Formes de départ et de survol (CSS — --sqm-squircle, --sqm-squircle-tight) n = 4, puis n = 5 au survol Pour un resserrement plus visible, remplacez la forme de départ par une superellipse n = 3 (plus ronde) : recalculez ses 64 points en gardant le même ordre. Un polygone d'un autre nombre de points casserait l'animation.
Image (HTML — .sq-mask__img) portrait SVG de démonstration, dégradé sqm-grad-N Remplacez le <svg> par un <img> de la même classe, avec un alt. Si vous gardez des SVG et collez l'effet deux fois, renommez les ids de la seconde copie.
Taille (CSS — width / height de .sq-mask) 90 × 90 px Le masque est en pourcentages : il suit. Reculez .sq-mask__name (bottom: -22px) quand la taille augmente.
Anneau (CSS — .sq-mask__ring) 4 px autour, bordure 2 px, border-radius: 28% Couleurs par :nth-child(1) à (4). Pour un anneau superelliptique, remplacez la bordure par un fond et clip-path sur deux couches.
Durées (CSS — transition) masque 0,6 s, grossissement et anneau 0,5 s, prénom 0,3 s Gardez le masque plus long que le reste : c'est lui qui se voit le moins, il doit finir en dernier.

FAQ

Il est discret, et c'est voulu : de n = 4 à n = 5, le bord se rapproche du coin de 1,4 px sur chaque axe à 90 px, 1,6 px à 104 px. Ce qui se voit d'abord, c'est le grossissement de 10 % et l'anneau ; la forme qui se tend accompagne le mouvement. Il n'existe que parce que les deux formes sont des polygon() de 64 points : deux url(#…) vers des <clipPath> SVG ne s'interpoleraient pas.
Oui : <img class="sq-mask__img" src="portrait.jpg" alt="…"> à la place du <svg>. width: 100%, height: 100% et object-fit: cover sont déjà dans le CSS : la photo remplit le carré, puis le masque la découpe. Prévoyez des visages centrés, le haut des coins étant retiré.
Parce que clip-path est posé sur l'image seulement ; l'anneau est un élément frère, placé 4 px autour, avec un border-radius de 28 %. S'il était découpé par la même forme, sa bordure, qui déborde du masque, serait coupée.