Glassmorphism✨ Premium

Glass Shatter Reveal

Une vitre dépolie en six éclats triangulaires (clip-path) qui, au clic, au toucher, à Entrée ou à Espace, s'envolent en 3D — perspective de 800 px, jusqu'à 86 px de côté et 70 px vers l'écran, rotation de 18 à 26° — et s'effacent en 0,7 s pour révéler le contenu caché dessous ; un second geste reforme la vitre. 0,8 Ko de JavaScript.

CSS 3Dclip-pathInteractive

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

Bris de glace « en cas d'urgence » : le numéro d'assistance — appli d'assurance auto — Glass Shatter Reveal exemple 1

① Bris de glace « en cas d'urgence » : le numéro d'assistance — appli d'assurance auto

QuandÉcran d'urgence de l'appli : un boîtier rouge à vitre, que le conducteur brise pour afficher le numéro d'assistance, son numéro de contrat et les trois gestes à faire.
PourquoiLe geste reprend la vitre des boîtiers d'urgence, connu de tous ; la vitre se brise aussi à Entrée ou Espace, et se remet en place si on s'est trompé. Le numéro reste un texte lisible : sous la vitre intacte, il n'est qu'une tache jaune.
RéglagesVitre agrandie à 330 × 180 px dans un cadre rayé rouge ; contenu révélé jaune, numéro en 30 px à chiffres tabulaires, étapes en <ol> ; éclats un peu plus blancs (34 % → 10 %) ; pastille réécrite « Touchez ou appuyez sur Entrée ». Le numéro est du texte : pour un lien tel: cliquable après le bris, voir la FAQ.
Révéler le lauréat d'un prix littéraire — site d'un salon du livre — Glass Shatter Reveal exemple 2

② Révéler le lauréat d'un prix littéraire — site d'un salon du livre

QuandLe soir de la remise, sur la page du prix : la vitre cache la couverture et le nom de la lauréate, l'animateur la brise en direct, et on peut la reformer pour rejouer l'annonce.
PourquoiLa révélation devient un moment, et le flou de 9 px garde la surprise : on devine une couverture bleue, pas le titre. Le second clic qui reforme la vitre permet de rejouer l'annonce pendant la diffusion.
RéglagesVitre de 330 × 180 px sur velours vert ; couverture du livre en CSS (dos plus sombre, titre en serif) et nom de la lauréate en 20 px dans le contenu révélé ; pastille « Brisez la vitre ».
Dévoiler le maillot de la nouvelle saison — site d'un club de football — Glass Shatter Reveal exemple 3

③ Dévoiler le maillot de la nouvelle saison — site d'un club de football

QuandLes supporters brisent la vitre pour découvrir le nouveau maillot domicile, sous les projecteurs du stade, avant la présentation officielle.
PourquoiLe spectaculaire du bris crée l'évènement, et le contenu caché n'est qu'un bloc de HTML : le club remplace l'image du maillot et le texte sans toucher à l'effet.
RéglagesVitre de 330 × 180 px sur un fond de stade (pelouse rayée, projecteurs) ; maillot rayé dessiné en clip-path avec le numéro 9 ; fond doré en dégradé radial dans le contenu révélé.

Comment ça marche

Une scène en 16/10 (.gsr-scene, dégradé radial violet) porte une vitre de min(72%, 320px) au format 4/3 (.gsr-stage). Dessous, le contenu caché .gsr-reveal : coins de 20 px, dégradé violet → rose, titre et texte blancs. Dessus, .gsr-glass, un div en role="button", tabindex="0" et aria-pressed, qui contient six .gsr-shard plein cadre découpés par clip-path: polygon() en six triangles qui se rejoignent au centre — deux sur le bord haut, un à droite, deux en bas, un à gauche. Chaque éclat est en verre : dégradé blanc de 24 % à 6 %, liseré intérieur, backdrop-filter: blur(9px) saturate(160%). Vitre intacte, le contenu dessous n'est qu'une tache colorée floue ; une pastille « Cliquez pour briser » est posée en bas.

Le script, un écouteur par vitre de la page, bascule la classe .gsr-shattered au clic et sur Entrée ou Espace (preventDefault évite le défilement), et recopie l'état dans aria-pressed. La classe donne à chaque éclat sa trajectoire, perspective(800px) translate3d(x, y, z) rotate(a) : les deux éclats du haut partent à ±34 px et −72 px en montant de 70 px vers l'écran, ceux des côtés à ±86 px, ceux du bas à ±40 px et +74 px, avec des rotations de 18 à 26° en sens opposés ; et une opacité à 0. Transition de 0,7 s en cubic-bezier(.2, .7, .2, 1) : départ rapide, fin lente. Mesuré à 250 ms : éclats à environ 85 % de leur course et à 38-42 % d'opacité, dans Chromium, Firefox et WebKit ; à 1 s, tous à opacité 0, aria-pressed="true". Un second geste retire la classe et les éclats reviennent se souder sur le même chemin.

Pourquoi la profondeur passe par perspective(800px) dans le transform de chaque éclat, et pas par transform-style: preserve-3d sur leurs parents : dans Firefox, sous la perspective de la scène, un parent en preserve-3d annule le backdrop-filter des éclats (mesuré par capture d'écran réelle sur un fond rayé : contenu caché parfaitement lisible). Avec une perspective par éclat, le rendu est le même dans Chromium et le dépoli tient partout. En mouvement réduit, les éclats s'effacent sur place en 0,3 s au lieu d'être projetés. Le script ajoute .gsr-solid pour un utilisateur qui réduit la transparence ou un navigateur sans backdrop-filter, et le flou est doublé en -webkit-backdrop-filter pour Safari avant 18. Chaque .gsr-glass a son propre état : plusieurs vitres cohabitent dans une page (supprimez l'id gsrScene en dupliquant le bloc). Une variante plus ancienne de cette vitre brisée existe aussi dans la catégorie.

Accessibilité

  • Clavier : la vitre est atteignable au Tab (tabindex="0"), entourée d'un contour blanc de 2 px à 3 px d'écart au focus clavier, et réagit à Entrée et à Espace — mesuré dans Firefox et WebKit : Tab donne le focus, Entrée brise, Espace reforme. aria-pressed annonce l'état. Le libellé aria-label (« Briser la vitre pour révéler ») et la pastille sont en français dans le code : traduisez-les avec votre page. Avec plusieurs vitres, donnez à chacune un aria-label qui dit ce qu'elle cache.
  • Contenu révélé non cliquable : une fois brisée, la vitre reste au-dessus, invisible — mesuré, le point central de la scène renvoie toujours .gsr-glass. Un lien ou un bouton placé dans le contenu révélé ne reçoit pas le clic, qui reforme la vitre. Pour un contenu à cliquer, voir la FAQ. Pour un lecteur d'écran, le contenu caché est lu même vitre intacte : il n'est masqué qu'à l'œil. Si la révélation doit rester une surprise, ajoutez aria-hidden="true" au contenu et retirez-le au bris.
  • Mouvement réduit : sous prefers-reduced-motion, les éclats ne bougent plus, ils s'effacent sur place en 0,3 s — mesuré, transform nul et opacité 0,02 à 250 ms, 0 à 1 s.
  • Transparence réduite et contraste : le script pose .gsr-solid quand prefers-reduced-transparency: reduce répond (Chromium seulement à ce jour) ou sans backdrop-filter : éclats pleins #14162a, le contenu est alors totalement caché jusqu'au bris. Le texte blanc du contenu révélé mesure 5,7:1 sur le violet de départ et 4,6:1 sur le rose d'arrivée du dégradé : il passe le seuil de 4,5:1 sur toute sa surface.

Compatibilité navigateur

CSS (clip-path: polygon(), perspective(), translate3d, backdrop-filter, transitions) + 0,8 Ko de JavaScript, aucune dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : mêmes trajectoires, même timing, mêmes touches. Le dépoli des éclats s'affiche dans les trois, sans preserve-3d (capture d'écran réelle pour Firefox et WebKit, dont les captures automatiques n'affichent jamais backdrop-filter). clip-path: polygon() existe sans préfixe depuis Chrome 55, Firefox 54 et Safari 13.1.

Chrome 76+✓ Complet
Firefox 103+✓ Complet
Safari 13.1+✓ Complet (préfixe -webkit-)
Edge 79+✓ Complet
Mobile iOS 13.4+✓ Complet (toucher)
Android Chrome 76+✓ Complet (toucher)

Sans backdrop-filter, le script pose .gsr-solid : éclats pleins bleu nuit qui cachent entièrement le contenu, bris et reformage intacts. Sans clip-path, les six éclats deviennent six rectangles superposés : la vitre cache toujours, mais se brise en six plaques entières. Sans JavaScript, la vitre reste intacte et le contenu dessous n'est jamais révélé — gardez l'information essentielle (un numéro d'urgence, par exemple) aussi ailleurs dans la page.

Le code

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

index.html — structure
<div class="demo-preview">
  <div class="gsr-scene">
    <div class="gsr-stage">
      <div class="gsr-reveal">…contenu caché…</div>
      <div class="gsr-glass" role="button" tabindex="0" aria-pressed="false" aria-label="…">
        <span class="gsr-shard"></span> … (6 éclats)
        <span class="gsr-hint">…</span>
      </div>
    </div>
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Glass Shatter Reveal, 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
Trajectoires (CSS — .gsr-glass.gsr-shattered .gsr-shard:nth-child(1) à (6)) perspective(800px) translate3d(±34 à ±86 px, −72 à +74 px, 50 à 70 px) rotate(±18 à ±26°) Doublez les distances pour une explosion qui sort de la scène ; un z plus grand (150 px) fait venir les éclats vers l'écran. Gardez perspective(800px) en tête de chaque transform : c'est lui qui donne la profondeur.
Durée et rythme (CSS — transition: transform .7s cubic-bezier(.2, .7, .2, 1), opacity .7s) 0,7 s, départ rapide 1,2 s pour une révélation solennelle, 0,4 s pour un bris sec. Décalez les éclats avec transition-delay sur chaque :nth-child (0, 40, 80 ms…) pour une cassure qui se propage.
Découpe (CSS — clip-path: polygon(…) sur chaque éclat) 6 triangles réunis au centre Déplacez le point commun (50% 50%) vers 38% 62% pour un impact excentré. Pour plus d'éclats, ajoutez des span avec leur polygone et leur trajectoire.
Dépoli (CSS — backdrop-filter: blur(9px) saturate(160%)) 9 px 16 px ou plus pour qu'aucune forme du contenu caché ne se devine ; 4 px pour un teasing. Modifiez la valeur avec et sans préfixe.
Pastille d'invitation (HTML — .gsr-hint) « Cliquez pour briser », s'efface au bris Réécrivez-la selon l'appareil (« Touchez ») et ajoutez white-space: nowrap si le texte s'allonge. Supprimez-la si un titre au-dessus de la vitre invite déjà au geste.
Contenu révélé (HTML + CSS — .gsr-reveal) dégradé violet → rose, titre et texte blancs N'importe quel HTML : image, prix, code promo. Le contenu prend toute la vitre ; ajustez son padding et sa mise en page (display: flex pour une image et un texte côte à côte).
Bris sans retour (JS — e.classList.toggle("gsr-shattered")) chaque geste bascule entre brisé et intact Remplacez toggle par add pour une vitre qui ne se reforme pas (code promo, déblocage).

FAQ

La vitre brisée reste au-dessus du contenu, invisible, et capte les clics — mesuré, le centre de la scène renvoie toujours .gsr-glass. Ajoutez .gsr-glass.gsr-shattered { pointer-events: none } : les clics traversent jusqu'au contenu, le lien tel: ou le bouton fonctionne. Mais la vitre ne peut plus être reformée au clic ; si vous voulez garder ce retour, ajoutez dans le contenu un bouton « Remettre la vitre » qui retire la classe gsr-shattered et remet aria-pressed à false.
Parce que dans Firefox il annulerait le dépoli : un éclat dont le parent est en preserve-3d, sous une perspective, n'applique plus son backdrop-filter — mesuré cas par cas sur un fond rayé, la vitre laisse alors lire le contenu caché. Les éclats ne se croisent pas en profondeur, ils n'ont donc pas besoin d'un espace 3D commun : perspective(800px) dans le transform de chacun donne le même rendu (même distance, même point de fuite au centre de la vitre) et le flou reste actif partout.
Glass Shatter & Reform brise un panneau de 200 × 150 px en onze éclats aux trajectoires tirées au hasard à chaque clic, puis le reforme en 0,8 s : c'est une animation à regarder, sur un div qui ne répond qu'au clic (ni Tab, ni état annoncé, ni réglage de mouvement réduit), sans rien derrière la vitre. Glass Shatter Reveal brise la sienne en six éclats aux trajectoires écrites dans le CSS pour révéler un contenu (.gsr-reveal), se manie au clavier (Tab, Entrée, Espace) avec aria-pressed, et respecte la réduction des animations et de la transparence. Pour cacher puis montrer une information, prenez Glass Shatter Reveal ; pour un simple jeu visuel au clic, l'autre suffit.