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
Page de l’effet →
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;
  background: #080812;
  border-radius: 20px;
  overflow: hidden;
}

.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: calc(50% - 40px);
  left: calc(50% - 40px);
  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
Page de l’effet →
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
Page de l’effet →
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;
  background: #e0e5ec;
  padding: 32px;
  border-radius: 24px;
}

.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

Loupe en verre qui suit le pointeur et grossit deux fois le contenu dessous, avec un léger éclaircissement.

JS Mouse Lens

Glass Ripple Touch

Touchez ou cliquez la surface en verre : des ondes concentriques se propagent, une par doigt.

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 qui glissent sur une vitre givrée, comme une pluie derrière la fenêtre.

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 gonflent au survol et entraînent leurs voisines, 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 style Apple aux coins superelliptiques lisses et aux ombres assorties, via clip-path: polygon().

SVG Clip-path Hover
Page de l’effet →
Voir le code source
HTML
<div class="demo-preview">
  <div class="squircle-cards-wrap">
    <div class="squircle-card-shadow" style="--sqc-from: #6366f1; --sqc-to: #8b5cf6;">
      <div class="squircle-card"><span class="sq-icon">&#9881;</span>Settings</div>
    </div>
    <div class="squircle-card-shadow" style="--sqc-from: #ec4899; --sqc-to: #f43f5e;">
      <div class="squircle-card"><span class="sq-icon">&#9829;</span>Health</div>
    </div>
    <div class="squircle-card-shadow" style="--sqc-from: #06b6d4; --sqc-to: #3b82f6;">
      <div class="squircle-card"><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;
}

/* Formes en clip-path: polygon(), sans SVG ni id : Superellipse n = 4 (|x|^4 + |y|^4 = 1), 64 points en % de la carte. */
.squircle-card {
  --sqc-squircle: polygon(0% 50%, 0.1% 34.3%, 0.5% 27.9%, 1.1% 23.1%, 1.9% 19.1%, 3% 15.7%, 4.4% 12.7%, 6% 10.2%, 8% 8%, 10.2% 6%, 12.7% 4.4%, 15.7% 3%, 19.1% 1.9%, 23.1% 1.1%, 27.9% 0.5%, 34.3% 0.1%, 50% 0%, 65.7% 0.1%, 72.1% 0.5%, 76.9% 1.1%, 80.9% 1.9%, 84.3% 3%, 87.3% 4.4%, 89.8% 6%, 92% 8%, 94% 10.2%, 95.6% 12.7%, 97% 15.7%, 98.1% 19.1%, 98.9% 23.1%, 99.5% 27.9%, 99.9% 34.3%, 100% 50%, 99.9% 65.7%, 99.5% 72.1%, 98.9% 76.9%, 98.1% 80.9%, 97% 84.3%, 95.6% 87.3%, 94% 89.8%, 92% 92%, 89.8% 94%, 87.3% 95.6%, 84.3% 97%, 80.9% 98.1%, 76.9% 98.9%, 72.1% 99.5%, 65.7% 99.9%, 50% 100%, 34.3% 99.9%, 27.9% 99.5%, 23.1% 98.9%, 19.1% 98.1%, 15.7% 97%, 12.7% 95.6%, 10.2% 94%, 8% 92%, 6% 89.8%, 4.4% 87.3%, 3% 84.3%, 1.9% 80.9%, 1.1% 76.9%, 0.5% 72.1%, 0.1% 65.7%);
}

.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, var(--sqc-from, #6366f1), var(--sqc-to, #8b5cf6)) var(--sqc-from, #6366f1);
  clip-path: var(--sqc-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;
  isolation: isolate;
}

.squircle-card-shadow::after {
  content: '';
  position: absolute;
  bottom: -6px;
  left: 8px;
  right: 8px;
  height: 20px;
  background: linear-gradient(135deg, var(--sqc-from, #6366f1), var(--sqc-to, #8b5cf6));
  border-radius: 50%;
  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
Page de l’effet →
Voir le code source
HTML
<div class="demo-preview">
  <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;
}

/* Formes en clip-path: polygon(), sans SVG ni id : Pans coupés de 12 px à 45°, quelle que soit la taille du panneau. */
.bevel-panel {
  --bvp-bevel: polygon(0 12px, 12px 0, calc(100% - 12px) 0, 100% 12px, 100% calc(100% - 12px), calc(100% - 12px) 100%, 12px 100%, 0 calc(100% - 12px));
}

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

.bevel-panel {
  clip-path: var(--bvp-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: var(--bvp-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
Page de l’effet →
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;
  box-sizing: border-box;
  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);
}

/* Firefox et Safari ignorent TOUTE la liste backdrop-filter dès qu'elle contient url() (mesuré : ni flou ni
   saturation). Ces deux moteurs — repérés par une propriété qu'eux seuls connaissent — reçoivent le flou et la
   saturation sans la réfraction SVG, que seul Chromium applique. */
@supports (-moz-appearance: none) or (-webkit-backdrop-filter: blur(1px)) {
  .lgr-glass {
    -webkit-backdrop-filter: blur(var(--lgr-blur, 8px)) saturate(180%);
    backdrop-filter: blur(var(--lgr-blur, 8px)) saturate(180%);
  }
}

@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 {
        /* la <svg> du filtre, pas la première <svg> de la page */
        disp.ownerSVGElement.pauseAnimations();
      } catch (e) {}
    }
  })();
})();

Glass Depth Stack

Trois couches de verre à profondeurs distinctes qui réagissent en parallaxe au survol, pour une vraie profondeur spatiale. Replis inclus pour la transparence réduite et les navigateurs sans flou.

💡 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

Fog Glass Writing

Une vitre embuée, la nuit, devant une ville rendue en WebGL : à travers la buée, les fenêtres et les réverbères ne sont plus que des halos doux dans un voile laiteux piqueté de micro-gouttelettes. Passez le doigt ou la souris : la vitre redevient nette sous le tracé, les gouttes repoussées forment un liseré brillant au bord, et quelques coulures transparentes partent du bas des traits en serpentant. Puis la buée regagne lentement le terrain depuis les bords. Sans interaction, une main invisible écrit « 2027 » à vitesse humaine, le laisse lisible, et tout se ré-embue. Clavier et bouton « Écrire le message » ; avec prefers-reduced-motion, le message est écrit d'emblée, sans coulure ni regain ; sans WebGL, repli canvas 2D.

💡 Idéal pour : hero de vœux d'un hôtel, d'un bar ou d'un restaurant, page « Bonne année » d'une marque premium, teaser de lancement hivernal, écran d'attente d'un événement.

WebGL Buée Écriture au doigt 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