Qu'est-ce que le glassmorphism, et comment le faire en CSS ?

Le glassmorphism est un style de surfaces translucides, en verre dépoli, posées sur un fond coloré. En CSS, il combine un fond semi-transparent, backdrop-filter: blur() pour flouter ce qui se trouve derrière, une fine bordure claire et une ombre douce. Le neumorphism et les formes en superellipse (squircle), aussi présents sur cette page, en sont proches.

Comment choisir, performances et accessibilité
  • Il fonctionne très bien pour les cartes, barres de navigation, fenêtres et grilles tarifaires posées sur des images ou des dégradés, comme Glass Card, Frosted Panel ou Glass Navigation, et mal sur un fond blanc uni.
  • Vérifiez le contraste du texte sur la zone la plus claire derrière le verre, limitez le nombre de calques floutés sur mobile et prévoyez un fond plein là où backdrop-filter n'est pas disponible.
  • Glass Card, Frosted Panel, Neu Button, Squircle Cards, Beveled Control Panel et Liquid Glass sont gratuits avec leur code ; les autres sont inclus dans Premium.

Glass Card

Survol pour l'effet

Glass Card

Carte glassmorphism classique avec backdrop-filter, fond semi-transparent et bordure subtile. Des orbes colorées flottent en arrière-plan.

CSS Backdrop Hover
Voir le code source
HTML
<div class="demo-preview">
  <div class="glass-card-scene">
    <div class="glass-card-orb glass-card-orb--1"></div>
    <div class="glass-card-orb glass-card-orb--2"></div>
    <div class="glass-card-orb glass-card-orb--3"></div>
    <div class="glass-card-element">
      <h3>Glass Card</h3>
      <p>Survol pour l'effet</p>
    </div>
  </div>
</div>
CSS
.demo-preview,
.demo-preview *,
.demo-preview *::before,
.demo-preview *::after {
  box-sizing: border-box
}

.demo-preview {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 250px;
  overflow: hidden;
  position: relative;
  background: rgb(224, 229, 236);
  color: rgb(255, 255, 255);
  font-family: sans-serif;
}

.glass-card-scene {
  width: 320px;
  height: 220px;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}

.glass-card-orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(40px);
  animation: glassOrbFloat 6s ease-in-out infinite;
}

.glass-card-orb--1 {
  width: 120px;
  height: 120px;
  background: #8b5cf6;
  top: 10px;
  left: 20px;
  animation-delay: 0s;
}

.glass-card-orb--2 {
  width: 100px;
  height: 100px;
  background: #06b6d4;
  bottom: 10px;
  right: 20px;
  animation-delay: -2s;
}

.glass-card-orb--3 {
  width: 80px;
  height: 80px;
  background: #ec4899;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation-delay: -4s;
}

.glass-card-element {
  position: relative;
  z-index: 1;
  width: 260px;
  height: 160px;
  background: rgba(255, 255, 255, 0.07);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border-radius: 16px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  cursor: pointer;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.glass-card-element:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 40px rgba(139, 92, 246, 0.3);
}

.glass-card-element::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.12) 0%, transparent 50%);
  border-radius: inherit;
  pointer-events: none;
}

.glass-card-element h3 {
  font-size: 1.1rem;
  font-weight: 700;
  color: #fff;
  margin: 0;
}

.glass-card-element p {
  font-size: 0.8rem;
  color: rgba(255, 255, 255, 0.6);
  margin: 0;
}

@keyframes glassOrbFloat {

  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }

  33% {
    transform: translate(15px, -10px) scale(1.1);
  }

  66% {
    transform: translate(-10px, 15px) scale(0.9);
  }
}
JavaScript
/* CSS pur — aucun JavaScript requis */

Frosted Panel

Les blobs bougent derrière le verre givré

Frosted Panel

Panneau givré avec des blobs de gradient animés en arrière-plan, montrant l'effet de flou en temps réel.

CSS Animation Blur
Voir le code source
HTML
<div class="demo-preview">
  <div class="frosted-panel-scene">
    <div class="frosted-blob frosted-blob--1"></div>
    <div class="frosted-blob frosted-blob--2"></div>
    <div class="frosted-blob frosted-blob--3"></div>
    <div class="frosted-panel-element">
      <h3>Frosted Panel</h3>
      <p>Les blobs bougent derrière le verre givré</p>
      <div class="frosted-dots">
        <span class="frosted-dot"></span>
        <span class="frosted-dot"></span>
        <span class="frosted-dot"></span>
      </div>
    </div>
  </div>
</div>
CSS
.demo-preview,
.demo-preview *,
.demo-preview *::before,
.demo-preview *::after {
  box-sizing: border-box
}

.demo-preview {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 250px;
  overflow: hidden;
  position: relative;
  background: rgb(224, 229, 236);
  color: rgb(255, 255, 255);
  font-family: sans-serif;
}

.frosted-panel-scene {
  width: 340px;
  height: 230px;
  position: relative;
  overflow: hidden;
  border-radius: 16px;
  background: #080812;
}

.frosted-blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(30px);
}

.frosted-blob--1 {
  width: 160px;
  height: 160px;
  background: linear-gradient(135deg, #a855f7, #6366f1);
  top: -30px;
  left: -20px;
  animation: blobDrift1 8s ease-in-out infinite;
}

.frosted-blob--2 {
  width: 140px;
  height: 140px;
  background: linear-gradient(135deg, #06b6d4, #3b82f6);
  bottom: -40px;
  right: -20px;
  animation: blobDrift2 10s ease-in-out infinite;
}

.frosted-blob--3 {
  width: 100px;
  height: 100px;
  background: linear-gradient(135deg, #ec4899, #f43f5e);
  top: 50%;
  left: 60%;
  animation: blobDrift3 7s ease-in-out infinite;
}

.frosted-panel-element {
  position: absolute;
  inset: 30px;
  background: rgba(255, 255, 255, 0.05);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
  border-radius: 12px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  z-index: 1;
}

.frosted-panel-element h3 {
  font-size: 1.2rem;
  font-weight: 700;
  color: #fff;
  margin: 0;
}

.frosted-panel-element p {
  font-size: 0.75rem;
  color: rgba(255, 255, 255, 0.5);
  margin: 0;
  text-align: center;
  padding: 0 20px;
}

.frosted-panel-element .frosted-dots {
  display: flex;
  gap: 6px;
  margin-top: 4px;
}

.frosted-panel-element .frosted-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.3);
}

.frosted-panel-element .frosted-dot:nth-child(1) {
  background: #a855f7;
}

.frosted-panel-element .frosted-dot:nth-child(2) {
  background: #06b6d4;
}

.frosted-panel-element .frosted-dot:nth-child(3) {
  background: #ec4899;
}

@keyframes blobDrift1 {

  0%,
  100% {
    transform: translate(0, 0) rotate(0deg);
  }

  25% {
    transform: translate(40px, 20px) rotate(90deg);
  }

  50% {
    transform: translate(20px, 60px) rotate(180deg);
  }

  75% {
    transform: translate(-10px, 30px) rotate(270deg);
  }
}

@keyframes blobDrift2 {

  0%,
  100% {
    transform: translate(0, 0) rotate(0deg);
  }

  25% {
    transform: translate(-30px, -20px) rotate(-90deg);
  }

  50% {
    transform: translate(-50px, -40px) rotate(-180deg);
  }

  75% {
    transform: translate(-20px, -10px) rotate(-270deg);
  }
}

@keyframes blobDrift3 {

  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }

  50% {
    transform: translate(-40px, -30px) scale(1.3);
  }
}
JavaScript
/* CSS pur — aucun JavaScript requis */

Glass Navigation

Barre de navigation glassmorphique avec flou d'arrière-plan et effets de survol sur les liens.

CSS Nav Hover

Glass Morphing Button

Bouton en verre qui se transforme et s'agrandit au survol avec un effet de backdrop blur.

CSS Button Morph

Glass Pricing Card

Carte tarifaire en verre avec bordure dégradée, prix, liste de fonctionnalités et bouton d'action.

CSS Pricing Gradient

Frosted Modal

Fenêtre modale avec effet verre givré. L'arrière-plan contient des éléments colorés visibles à travers le flou.

CSS Modal Frosted

Glass Notification

Notifications toast en verre avec icône, texte et bouton de fermeture. Trois variantes : succès, info et avertissement.

CSS Toast UI

Layered Glass

Plusieurs panneaux de verre superposés à différents niveaux de flou, créant un effet de profondeur.

CSS Depth Layers

Glass Input

Champs de formulaire avec effet verre, flou d'arrière-plan et lueur violette au focus.

CSS Form Focus

Aurora Glass

Carte en verre avec des couleurs d'aurore boréale animées derrière la surface givrée.

CSS Aurora Animation

Neu Button

Boutons neumorphiques avec double ombre (claire et foncée). L'état pressé utilise des ombres internes pour simuler l'enfoncement.

CSS Neumorphism Hover
Voir le code source
HTML
<div class="demo-preview">
  <div class="neu-btn-scene">
    <button class="neu-btn">
      <svg viewBox="0 0 24 24"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
      Continuer
    </button>
    <button class="neu-btn neu-btn--pressed">
      <svg viewBox="0 0 24 24"><path d="M20 6L9 17l-5-5"/></svg>
      Validé
    </button>
  </div>
</div>
CSS
.demo-preview,
.demo-preview *,
.demo-preview *::before,
.demo-preview *::after {
  box-sizing: border-box
}

.demo-preview {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 250px;
  overflow: hidden;
  position: relative;
  background: rgb(224, 229, 236);
  color: rgb(255, 255, 255);
  font-family: sans-serif;
}

.neu-btn-scene {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
}

.neu-btn {
  width: 180px;
  height: 54px;
  border-radius: 16px;
  background: #e0e5ec;
  box-shadow: 8px 8px 16px #b8bec7, -8px -8px 16px #ffffff;
  border: none;
  font-family: 'Inter', sans-serif;
  font-size: 0.95rem;
  font-weight: 600;
  color: #6b7280;
  cursor: pointer;
  transition: all 0.2s ease;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}

.neu-btn:hover {
  box-shadow: 6px 6px 12px #b8bec7, -6px -6px 12px #ffffff;
  color: #8b5cf6;
}

.neu-btn:active,
.neu-btn--pressed {
  box-shadow: inset 4px 4px 8px #b8bec7, inset -4px -4px 8px #ffffff;
  color: #8b5cf6;
}

.neu-btn svg {
  width: 18px;
  height: 18px;
  stroke: currentColor;
  fill: none;
  stroke-width: 2;
}
JavaScript
/* CSS pur — aucun JavaScript requis */

Neu Card

Carte en relief avec avatar en creux (inset shadow), barre de progression colorée et ombres douces au survol.

CSS Card Neumorphism

Neu Toggle

Interrupteurs neumorphiques avec piste en creux et bouton en relief. Animation bounce au changement d'état.

CSS Toggle Interactive

Neu Input

Champs de saisie en creux avec ombre interne. Lueur violette subtile au focus et icône de recherche intégrée.

CSS Form Focus

Neu Slider

Curseurs avec piste en creux et poignée en relief. La barre de remplissage utilise un gradient violet.

CSS Slider UI

Neu Clock

Horloge analogique neumorphique avec cadran en creux, aiguilles animées en temps réel et repères des heures.

CSS JS Animation

Neu Music Player

Lecteur musical complet avec pochette rotative, barre de progression et boutons de contrôle en relief.

CSS JS Player

Neu Calculator

Calculatrice complète avec écran en creux, touches en relief et touche égal avec gradient violet.

CSS JS Interactive

Claymorphism Card

Variante colorée du neumorphisme avec effet argile : bords arrondis, ombres internes et fond pastel.

CSS Clay 3D

Neu Dashboard

Mini tableau de bord avec statistiques en relief, badge en creux et graphique à barres dans un cadre neumorphique.

CSS Dashboard UI

Liquid Glass Card

Carte translucide avec réfraction et highlights spéculaires via SVG feTurbulence et feSpecularLighting.

SVG Filter Backdrop Glass

Frosted Glass Navbar

Barre de navigation avec backdrop-filter blur multicouche qui s'intensifie au scroll.

Backdrop-filter Scroll Frosted

Glass Morphing Button

Bouton qui transite entre un état solide et un état verre liquide au survol avec displacement SVG.

SVG Hover Morph

Liquid Lens Magnifier

Lentille de verre survolable qui réfracte et amplifie le contenu sous-jacent avec distorsion de bord.

JS Mouse Lens

Glass Ripple Touch

Cliquez sur la surface en verre pour créer des ondulations concentriques qui se propagent.

JS Click Ripple

Iridescent Glass Panel

Panneau de verre avec reflets chromatiques arc-en-ciel qui réagissent à l'angle de la souris.

CSS Mouse Iridescent

Glass Depth Stack

Panneaux de verre empiles a différentes profondeurs avec blur parallaxe entre les couches.

CSS 3D Parallax

Liquid Glass Toggle

Toggle switch avec un bouton-bulle en verre liquide qui s'écrase et réfracte la lumière.

JS Animation Toggle

Rain on Glass

Gouttes d'eau animées glissant sur une surface en verre givrée avec traînée de réfraction.

JS Animation Rain

Glass Shatter & Reform

Cliquez pour briser le panneau de verre en fragments, puis reassemblez-le magnetiquement.

JS Click Shatter

Bubble Glass Grid

Grille de bulles en verre qui fusionnent et se séparent au survol avec des transitions fluides.

CSS Grid Hover

Glass Caustics

Motifs caustiques lumineux projetés sous une couche de verre, simulant la réfraction de la lumière.

Canvas Animation Caustics
⚙Settings
♥Health
★Photos

Squircle Cards

Cartes Apple-style avec coins superelliptiques lisses et ombres assorties via SVG clip-path.

SVG Clip-path Hover
Voir le code source
HTML
<div class="demo-preview">
  <style>
    .squircle-cards-wrap {
      display: flex;
      gap: 14px;
      align-items: center;
      justify-content: center;
      flex-wrap: wrap;
      padding: 10px;
    }
    .squircle-card {
      width: 110px;
      height: 110px;
      background: linear-gradient(135deg, #6366f1, #8b5cf6);
      clip-path: url(#squircle);
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      color: white;
      font-weight: 600;
      font-size: 0.75rem;
      transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), filter 0.3s ease;
      cursor: pointer;
      position: relative;
    }
    .squircle-card:nth-child(2) {
      background: linear-gradient(135deg, #ec4899, #f43f5e);
    }
    .squircle-card:nth-child(3) {
      background: linear-gradient(135deg, #06b6d4, #3b82f6);
    }
    .squircle-card .sq-icon {
      font-size: 1.8rem;
      margin-bottom: 4px;
    }
    .squircle-card:hover {
      transform: scale(1.08) translateY(-4px);
      filter: brightness(1.15);
    }
    .squircle-card-shadow {
      width: 110px;
      height: 110px;
      position: relative;
    }
    .squircle-card-shadow::after {
      content: '';
      position: absolute;
      bottom: -6px;
      left: 8px;
      right: 8px;
      height: 20px;
      background: inherit;
      clip-path: url(#squircle);
      filter: blur(12px);
      opacity: 0.4;
      z-index: -1;
    }
  </style>
  <div class="squircle-cards-wrap">
    <div class="squircle-card-shadow" style="background: linear-gradient(135deg, #6366f1, #8b5cf6);">
      <div class="squircle-card"><span class="sq-icon">&#9881;</span>Settings</div>
    </div>
    <div class="squircle-card-shadow" style="background: linear-gradient(135deg, #ec4899, #f43f5e);">
      <div class="squircle-card" style="background: linear-gradient(135deg, #ec4899, #f43f5e);"><span class="sq-icon">&#9829;</span>Health</div>
    </div>
    <div class="squircle-card-shadow" style="background: linear-gradient(135deg, #06b6d4, #3b82f6);">
      <div class="squircle-card" style="background: linear-gradient(135deg, #06b6d4, #3b82f6);"><span class="sq-icon">&#9733;</span>Photos</div>
    </div>
  </div>
</div>
CSS
.demo-preview,
.demo-preview *,
.demo-preview *::before,
.demo-preview *::after {
  box-sizing: border-box
}

.demo-preview {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 250px;
  overflow: hidden;
  position: relative;
  background: rgb(224, 229, 236);
  color: rgb(255, 255, 255);
  font-family: sans-serif;
}

.squircle-cards-wrap {
  display: flex;
  gap: 14px;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  padding: 10px;
}

.squircle-card {
  width: 110px;
  height: 110px;
  background: linear-gradient(135deg, #6366f1, #8b5cf6);
  clip-path: url(#squircle);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  color: white;
  font-weight: 600;
  font-size: 0.75rem;
  transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), filter 0.3s ease;
  cursor: pointer;
  position: relative;
}

.squircle-card:nth-child(2) {
  background: linear-gradient(135deg, #ec4899, #f43f5e);
}

.squircle-card:nth-child(3) {
  background: linear-gradient(135deg, #06b6d4, #3b82f6);
}

.squircle-card .sq-icon {
  font-size: 1.8rem;
  margin-bottom: 4px;
}

.squircle-card:hover {
  transform: scale(1.08) translateY(-4px);
  filter: brightness(1.15);
}

.squircle-card-shadow {
  width: 110px;
  height: 110px;
  position: relative;
}

.squircle-card-shadow::after {
  content: '';
  position: absolute;
  bottom: -6px;
  left: 8px;
  right: 8px;
  height: 20px;
  background: inherit;
  clip-path: url(#squircle);
  filter: blur(12px);
  opacity: 0.4;
  z-index: -1;
}
JavaScript
/* CSS pur — aucun JavaScript requis */
87% CPU Load
42°C Core Temp
3.2G Memory

Beveled Control Panel

Panneaux de dashboard avec coins biseautés créant une esthétique d'interface sci-fi.

SVG Clip-path Sci-Fi
Voir le code source
HTML
<div class="demo-preview">
  <style>
    .bevel-panel-wrap {
      display: flex;
      gap: 12px;
      align-items: center;
      justify-content: center;
      flex-wrap: wrap;
      padding: 10px;
    }
    .bevel-panel {
      clip-path: url(#bevel);
      background: linear-gradient(145deg, #1a1a3e, #0f0f2a);
      border: none;
      color: #00ffcc;
      width: 130px;
      height: 80px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      font-family: 'Courier New', monospace;
      font-size: 0.7rem;
      font-weight: 700;
      letter-spacing: 1px;
      text-transform: uppercase;
      cursor: pointer;
      position: relative;
      transition: all 0.3s ease;
    }
    .bevel-panel::before {
      content: '';
      position: absolute;
      inset: 0;
      clip-path: url(#bevel);
      background: linear-gradient(145deg, rgba(0,255,204,0.15), transparent);
      opacity: 0;
      transition: opacity 0.3s ease;
    }
    .bevel-panel:hover::before {
      opacity: 1;
    }
    .bevel-panel:hover {
      color: #00ffee;
      text-shadow: 0 0 8px rgba(0,255,204,0.8);
    }
    .bevel-panel .bp-val {
      font-size: 1.4rem;
      margin-bottom: 2px;
    }
    .bevel-panel .bp-label {
      opacity: 0.7;
      font-size: 0.55rem;
    }
    .bevel-panel:nth-child(2) {
      color: #ff6b9d;
    }
    .bevel-panel:nth-child(2):hover {
      color: #ff85b1;
      text-shadow: 0 0 8px rgba(255,107,157,0.8);
    }
    .bevel-panel:nth-child(2)::before {
      background: linear-gradient(145deg, rgba(255,107,157,0.15), transparent);
    }
  </style>
  <div class="bevel-panel-wrap">
    <div class="bevel-panel">
      <span class="bp-val">87%</span>
      <span class="bp-label">CPU Load</span>
    </div>
    <div class="bevel-panel">
      <span class="bp-val">42&deg;C</span>
      <span class="bp-label">Core Temp</span>
    </div>
    <div class="bevel-panel">
      <span class="bp-val">3.2G</span>
      <span class="bp-label">Memory</span>
    </div>
  </div>
</div>
CSS
.demo-preview,
.demo-preview *,
.demo-preview *::before,
.demo-preview *::after {
  box-sizing: border-box
}

.demo-preview {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 250px;
  overflow: hidden;
  position: relative;
  background: rgb(224, 229, 236);
  color: rgb(255, 255, 255);
  font-family: sans-serif;
}

.bevel-panel-wrap {
  display: flex;
  gap: 12px;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  padding: 10px;
}

.bevel-panel {
  clip-path: url(#bevel);
  background: linear-gradient(145deg, #1a1a3e, #0f0f2a);
  border: none;
  color: #00ffcc;
  width: 130px;
  height: 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-family: 'Courier New', monospace;
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  cursor: pointer;
  position: relative;
  transition: all 0.3s ease;
}

.bevel-panel::before {
  content: '';
  position: absolute;
  inset: 0;
  clip-path: url(#bevel);
  background: linear-gradient(145deg, rgba(0, 255, 204, 0.15), transparent);
  opacity: 0;
  transition: opacity 0.3s ease;
}

.bevel-panel:hover::before {
  opacity: 1;
}

.bevel-panel:hover {
  color: #00ffee;
  text-shadow: 0 0 8px rgba(0, 255, 204, 0.8);
}

.bevel-panel .bp-val {
  font-size: 1.4rem;
  margin-bottom: 2px;
}

.bevel-panel .bp-label {
  opacity: 0.7;
  font-size: 0.55rem;
}

.bevel-panel:nth-child(2) {
  color: #ff6b9d;
}

.bevel-panel:nth-child(2):hover {
  color: #ff85b1;
  text-shadow: 0 0 8px rgba(255, 107, 157, 0.8);
}

.bevel-panel:nth-child(2)::before {
  background: linear-gradient(145deg, rgba(255, 107, 157, 0.15), transparent);
}
JavaScript
/* CSS pur — aucun JavaScript requis */

Notched Badge System

Badges de notification avec coins à encoche pour un look technique et moderne.

SVG Clip-path Badge

Scooped Containers

Panneaux avec coins concaves creusés pour des mises en page organiques et fluides.

SVG Clip-path Organic

Morphing Corner Shapes

Éléments qui transitionnent entre squircle, bevel, notch et scoop au survol avec CSS transitions sur clip-path.

CSS Transition Clip-path

Superellipse Progress Ring

Indicateur de progression circulaire utilisant un tracé SVG superelliptique qui morphe entre cercle et carré.

SVG Animation Progress

Organic Button Set

Collection de boutons où chaque variante utilise différentes valeurs de courbure superelliptique.

CSS Clip-path Buttons

Sci-Fi Window Frames

Panneaux d'interface HUD-style avec coins notch+bevel combinés et bordures animées.

CSS Animation Sci-Fi

Squircle Image Masks

Avatars masqués par des superellipses animées qui morphent au survol avec anneau coloré.

SVG Clip-path Hover

Corner Shape Grid

Grille responsive où chaque élément adopte une forme de coin différente selon sa position (squircle, bevel, notch, scoop).

CSS Grid Clip-path Responsive

Liquid Glass

La lumière se réfracte à travers la surface. Bougez la souris.

Liquid Glass Refraction

Vitre liquide façon iOS 26 : réfraction réelle par displacement SVG, teintes OKLCH et reflet spéculaire qui suit le curseur. Lisibilité et fallbacks d'accessibilité intégrés.

💡 Idéal pour : widget média, barre de navigation, modale de connexion, carte de notification posée sur un visuel riche.

SVG Filter backdrop-filter OKLCH Premium
Voir le code source
HTML
<div class="demo-preview">
  <div class="lgr-scene" id="lgrScene">
    <div class="lgr-bg">
      <span class="lgr-blob lgr-blob--1"></span>
      <span class="lgr-blob lgr-blob--2"></span>
      <span class="lgr-blob lgr-blob--3"></span>
      <span class="lgr-blob lgr-blob--4"></span>
    </div>
    <div class="lgr-glass" id="lgrGlass">
      <h3>Liquid Glass</h3>
      <p>La lumière se réfracte à travers la surface. Bougez la souris.</p>
    </div>
  </div>
  <svg width="0" height="0" aria-hidden="true" style="position:absolute">
    <filter id="lgrRefract" x="-20%" y="-20%" width="140%" height="140%">
      <feTurbulence type="fractalNoise" baseFrequency="0.009 0.013" numOctaves="2" seed="7" result="noise">
        <animate attributeName="baseFrequency" dur="22s" values="0.009 0.013; 0.013 0.009; 0.009 0.013" repeatCount="indefinite"/>
      </feTurbulence>
      <feGaussianBlur in="noise" stdDeviation="1.4" result="sturb"/>
      <feDisplacementMap id="lgrDisp" in="SourceGraphic" in2="sturb" scale="26" xChannelSelector="R" yChannelSelector="G"/>
    </filter>
  </svg>
</div>
CSS
.demo-preview,
.demo-preview *,
.demo-preview *::before,
.demo-preview *::after {
  box-sizing: border-box
}

.demo-preview {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 250px;
  overflow: hidden;
  position: relative;
  background: rgb(224, 229, 236);
  color: rgb(255, 255, 255);
  font-family: sans-serif;
}

.lgr-scene {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 10;
  border-radius: 14px;
  overflow: hidden;
  isolation: isolate;
  display: grid;
  place-items: center;
  background: #0b1024;
}

.lgr-bg {
  position: absolute;
  inset: -10%;
  z-index: 0;
  filter: saturate(1.1);
}

.lgr-blob {
  position: absolute;
  width: 46%;
  aspect-ratio: 1;
  border-radius: 50%;
  filter: blur(28px);
  opacity: 0.95;
  animation: lgr-float 14s ease-in-out infinite;
}

.lgr-blob--1 {
  background: #ff5d8f;
  top: -6%;
  left: 4%;
}

.lgr-blob--2 {
  background: #5d9bff;
  bottom: -8%;
  right: 2%;
  animation-delay: -4s;
}

.lgr-blob--3 {
  background: #3ad6b3;
  top: 28%;
  left: 38%;
  animation-delay: -8s;
}

.lgr-blob--4 {
  background: #c77dff;
  bottom: 10%;
  left: 10%;
  animation-delay: -11s;
}

.lgr-glass {
  position: relative;
  z-index: 2;
  width: min(72%, 340px);
  padding: 30px 28px;
  border-radius: 26px;
  color: #fff;
  background: linear-gradient(135deg, oklch(0.98 0.02 255 / 0.20), oklch(0.94 0.04 300 / 0.07));
  border: 1px solid rgba(255, 255, 255, 0.28);
  box-shadow:
    0 10px 40px rgba(0, 0, 0, 0.28),
    inset 0 1px 1px rgba(255, 255, 255, 0.55),
    inset 0 -2px 6px rgba(255, 255, 255, 0.10);
  -webkit-backdrop-filter: blur(var(--lgr-blur, 8px)) saturate(180%) url(#lgrRefract);
  backdrop-filter: blur(var(--lgr-blur, 8px)) saturate(180%) url(#lgrRefract);
  overflow: hidden;
}

.lgr-glass::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  background: radial-gradient(120px 120px at var(--mx, 30%) var(--my, 20%), rgba(255, 255, 255, 0.45), transparent 60%);
  mix-blend-mode: screen;
  opacity: 0.8;
  transition: opacity .3s;
}

.lgr-glass h3 {
  margin: 0 0 6px;
  font-size: 19px;
  letter-spacing: -0.01em;
  text-shadow: 0 1px 8px rgba(0, 0, 0, 0.35);
}

.lgr-glass p {
  margin: 0;
  font-size: 13.5px;
  line-height: 1.55;
  color: rgba(255, 255, 255, 0.92);
  text-shadow: 0 1px 10px rgba(0, 0, 0, 0.55);
}

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .lgr-glass {
    background: rgba(20, 22, 40, 0.86);
    border-color: rgba(255, 255, 255, 0.35);
  }
}

@media (prefers-reduced-motion: reduce) {
  .lgr-blob {
    animation: none;
  }

  .lgr-glass::after {
    opacity: 0.5;
  }
}

@media (prefers-reduced-transparency: reduce) {
  .lgr-glass {
    background: #14162a;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    border-color: rgba(255, 255, 255, 0.4);
  }

  .lgr-glass::after {
    display: none;
  }
}

@keyframes lgr-float {

  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }

  33% {
    transform: translate(12%, 8%) scale(1.12);
  }

  66% {
    transform: translate(-8%, -10%) scale(0.94);
  }
}
JavaScript
(function() {
  /* ============================================================
     Sprint juillet 2026 — JS effets glassmorphism (5 IIFE scopées)
  ============================================================ */

  /* fx-0788 : Liquid Glass Refraction */
  (function() {
    var scene = document.getElementById('lgrScene');
    var glass = document.getElementById('lgrGlass');
    var disp = document.getElementById('lgrDisp');
    if (!scene || !glass) return;

    var reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;

    glass.addEventListener('pointermove', function(e) {
      if (reduceMotion) return;
      var r = glass.getBoundingClientRect();
      glass.style.setProperty('--mx', ((e.clientX - r.left) / r.width * 100) + '%');
      glass.style.setProperty('--my', ((e.clientY - r.top) / r.height * 100) + '%');
    });
    glass.addEventListener('pointerleave', function() {
      glass.style.setProperty('--mx', '30%');
      glass.style.setProperty('--my', '20%');
    });

    if (reduceMotion) {
      try {
        document.querySelector('svg').pauseAnimations();
      } catch (e) {}
    }
  })();
})();

Glass Depth Stack

Trois couches de verre à profondeurs distinctes qui réagissent en parallaxe au survol, pour une vraie profondeur spatiale. Flou et teinte croissants par couche, fallbacks d'accessibilité inclus.

💡 Idéal pour : pile de notifications, cartes de tarifs en avant-plan, onboarding multi-étapes, hero produit avec profondeur.

CSS 3D Parallax backdrop-filter Premium

Frosted Aurora

Aurore boréale animée en canvas, diffusée à travers un verre frosté. Fond atmosphérique premium, lumière douce en mouvement perpétuel.

💡 Idéal pour : écran de connexion, hero de landing, panneau de bienvenue, fond de modale premium.

Canvas backdrop-filter Aurora Premium

Glass Caustics (WebGL)

Caustiques lumineuses temps réel (fragment shader) diffusées sous une vitre. L'effet « piscine / verre épais » que le CSS seul ne peut pas rendre.

💡 Idéal pour : hero produit premium, carte d'abonnement « Pro », header SaaS haut de gamme, page de lancement.

WebGL Shader Caustics Premium

Glass Shatter Reveal

La vitre se brise en éclats 3D au clic et dévoile le contenu caché, puis se reforme. Interaction tactile/clavier, spectaculaire et réversible.

💡 Idéal pour : révéler un code promo, déverrouiller un contenu premium, easter-egg de landing, « gratter pour gagner ».

CSS 3D clip-path Interactive Premium

Questions fréquentes

Qu'est-ce que le glassmorphism en CSS ? +

Le glassmorphism est un style de design qui imite le verre dépoli. Il utilise backdrop-filter: blur() pour flouter l'arrière-plan visible à travers un élément semi-transparent. Combiné avec un fond rgba et une bordure subtile, il crée un effet de profondeur élégante.

Comment créer un effet glassmorphism en CSS ? +

Appliquez background: rgba(255,255,255,0.1), backdrop-filter: blur(10px), border: 1px solid rgba(255,255,255,0.2), et border-radius. L'élément doit être au-dessus d'un contenu visible pour que le blur soit perceptible.

Le glassmorphism est-il compatible tous navigateurs ? +

Oui depuis 2022. backdrop-filter est supporte par Chrome, Firefox, Safari et Edge. Pour les anciens navigateurs, prévoyez un fallback avec un background opaque. Vérifiez avec @supports (backdrop-filter: blur(1px)).

Le glassmorphism impacte-t-il les performances ? +

backdrop-filter utilise le GPU et peut ralentir les pages avec beaucoup d'éléments frosted. Limitez l'effet à 3-5 éléments par page. Évitez de l'appliquer sur des éléments qui se déplacent (scroll) car chaque frame recalcule le blur.

Comment combiner glassmorphism et dark mode ? +

En dark mode, utilisez des fonds plus sombres (rgba(0,0,0,0.3)), des bordures plus subtiles (rgba(255,255,255,0.08)), et augmentez légèrement le blur (15-20px). Ajoutez un gradient subtil pour plus de profondeur.

Catégories similaires