Glassmorphism✨ Premium

Corner Shape Grid

Une grille de 4 × 3 cases de 73 px dont la découpe dépend de la place (superellipses aux angles, biseaux en haut et en bas, creux sur les côtés, encoches au centre), et où un clic tire pour la case une forme au hasard parmi sept clip-path: polygon() : un plan qui se lit par la forme.

CSS GridClip-pathResponsive

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

Plan des emplacements d'un marché de créateurs — site de l'organisateur — Corner Shape Grid exemple 1

① Plan des emplacements d'un marché de créateurs — site de l'organisateur

QuandMarché de Noël sous la halle, deux jours : les exposants voient les douze stands, leur tarif selon la place (angle, allée avant, mur latéral, îlot central) et ceux qui sont pris.
PourquoiLa forme qui dépend de la position dit où est le stand : un exposant qui veut un angle repère les quatre superellipses sans lire la légende. Le clic change la forme de la case choisie, ce qui marque la sélection sur le plan lui-même.
RéglagesGrille de 322 px à droite d'une colonne de légende ; fonds recolorés par famille de place (brun-rouge aux angles, ambre aux allées, framboise aux murs, vert au centre) ; numéro du stand et « libre » / « pris » en small. Le JS vendu ne visant que #cs-grid, le fichier de scènes applique la même règle à chaque grille.
Planche de patchwork — générateur d'une mercerie en ligne — Corner Shape Grid exemple 2

② Planche de patchwork — générateur d'une mercerie en ligne

QuandLa couturière compose un plaid de douze carrés de 20 cm dans quatre tissus et clique sur les carrés pour essayer d'autres découpes avant d'acheter le métrage.
PourquoiLa forme tirée au hasard au clic aide à essayer des assemblages sans les dessiner : la grille reste en place, seuls les bords changent, et le motif du tissu se lit à travers chaque découpe.
RéglagesGrille de 316 px, numéros masqués (color: transparent) ; quatre tissus dessinés en dégradés répétés (vichy rouge, pois sur bleu, rayure ambre, petites fleurs) par :nth-child(4n+1) à (4n) ; métrage total rappelé à côté.
Mur d'affiches d'un festival de courts-métrages — Corner Shape Grid exemple 3

③ Mur d'affiches d'un festival de courts-métrages

QuandLa page programme présente les douze films en compétition en grille, chaque affiche dans une découpe, avec le titre et la durée.
PourquoiLes formes qui varient selon la position font un mur d'affiches vivant sans image lourde ; sur téléphone, la grille repasse à trois colonnes grâce à la media query du code.
RéglagesGrille de 332 px ; chaque affiche porte son dégradé dans une variable (--fest-art) peinte par un ::before ; titre et durée centrés à 10 px pour rester dans la découpe. Note : à trois colonnes, les règles :nth-child ne suivent plus les angles (voir la FAQ).

Comment ça marche

La grille .cs-grid-wrap (4 colonnes, gap: 8px, marges de 12 px, 340 px au plus) aligne douze .cs-grid-item carrés (aspect-ratio: 1, 73 × 73 px mesurés), chacun avec son dégradé et son numéro en blanc de 13,6 px. Chaque case porte sept variables de forme en pourcentages : --csg-squircle (superellipse n = 4), --csg-squircle-tight (n = 5) et --csg-squircle-soft (n = 3), 64 points chacune ; --csg-bevel (biseau de 22 %) et --csg-bevel-sm (12 %) ; --csg-notch (encoche carrée de 16 %) ; --csg-scoop-concave (creux en quart de cercle de 22 %). Des règles :nth-child posent la forme selon la place : angles 1 et 12 en n = 4, angles 4 et 9 en n = 5, bords haut et bas (2, 3, 10, 11) en petit biseau, côtés (5, 8) en creux, centre (6, 7) en encoche.

Le JavaScript (une IIFE de 0,5 Ko) écoute les clics sur #cs-grid et, sur la case touchée, écrit style.clipPath = 'var(--csg-…)' avec une des sept formes tirée au hasard — mesuré dans Chromium 151, Firefox 153 et WebKit 26 : la variable écrite en ligne est résolue en polygon() et la case change de découpe. Une chance sur sept de retomber sur la même forme : le clic semble alors sans effet. Au survol, la case grossit de 10 % et s'éclaircit de 20 % en 0,4 s, passée au-dessus de ses voisines (z-index: 2). Sous 480 px de large, la grille passe à trois colonnes et 260 px.

Les sept formes sont des variables CSS posées sur chaque case (--csg-notch, --csg-bevel…), et le tableau du JavaScript contient leurs noms ('var(--csg-notch)'…) plutôt que des url(#…) vers des <clipPath> SVG. Ainsi le clic écrit une forme qui existe toujours : un url() vers un SVG absent de la page laisserait les douze cases carrées et le clic sans effet. Le code reste en un seul bloc, sans SVG ni id à fournir.

Accessibilité

  • Clic seulement : les cases sont des div sans rôle ni tabindex, l'écouteur ne réagit qu'au clic — ni Tab ni Entrée n'atteignent la grille (mesuré). Pour une grille de réservation, faites de chaque case un <button> : le clic au clavier déclenche le même événement, et le closest('.cs-grid-item') du script fonctionne toujours. clip-path rogne l'anneau de focus : marquez-le par filter: brightness(1.3) sur :focus-visible.
  • La forme ne dit rien seule : un lecteur d'écran ne voit pas qu'une case est un angle ou un centre, ni qu'elle vient de changer. Écrivez la place et l'état dans le texte ou un aria-label (« Stand 4, angle, libre »), et annoncez le changement (aria-pressed, ou une zone aria-live).
  • Contraste et mouvement : chiffres blancs de 13,6 px à 4,47:1 sur #6366f1 (juste sous le seuil de 4,5:1) et 5,7:1 sur #7c3aed, mais 2,4:1 sur #06b6d4, 2,5:1 sur #14b8a6 et #10b981 ; les deux cases ambre, en texte sombre, passent (7,9:1 et 5,3:1). Pas de prefers-reduced-motion : le grossissement de 10 % au survol reste actif (mesuré).

Compatibilité navigateur

CSS : grille, aspect-ratio, clip-path: polygon() en pourcentages, propriétés personnalisées, :nth-child, une media query à 480 px. JavaScript : une IIFE sans dépendance, un écouteur de clic. Zéro SVG. Formes et changement au clic mesurés dans Chromium 151, Firefox 153 et WebKit 26.

Chrome 88+✓ Complet
Firefox 89+✓ Complet
Safari 15+✓ Complet
Edge 88+✓ Complet
Mobile iOS 15+✓ Complet (trois colonnes sous 480 px)
Android Chrome 88+✓ Complet (trois colonnes sous 480 px)

Les versions minimales viennent d'aspect-ratio (Chrome 88, Firefox 89, Safari 15) : avant, les cases n'ont plus de hauteur propre et s'écrasent sur leur texte ; ajoutez height: 73px en secours. Sans clip-path, les cases restent carrées et le clic ne change rien de visible.

Le code

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

index.html — structure
<div class="demo-preview">
  <div class="cs-grid-wrap" id="cs-grid">
    <div class="cs-grid-item">1</div>
    <div class="cs-grid-item">2</div>
    …
    <div class="cs-grid-item">12</div>
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Corner Shape Grid, 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
Forme par place (CSS — règles .cs-grid-item:nth-child(n)) angles en superellipse, bords haut et bas en biseau de 12 %, côtés en creux, centre en encoche Chaque règle appelle une variable : clip-path: var(--csg-bevel) pour un grand biseau. Les sept formes sont disponibles sur toutes les cases.
Formes tirées au clic (JS — tableau r) les sept variables Retirez des noms pour limiter le tirage, ou remplacez le hasard par un cycle : t.dataset.i = (+(t.dataset.i || 0) + 1) % r.length; t.style.clipPath = r[t.dataset.i].
Colonnes (CSS — grid-template-columns et la media query à 480 px) 4 colonnes, 3 sous 480 px Les formes sont posées par numéro, pas par position réelle : si vous changez le nombre de colonnes, réécrivez les :nth-child pour retrouver angles, bords et centre.
Profondeur des formes (CSS — variables --csg-* sur .cs-grid-item) biseaux 22 et 12 %, encoche 16 %, creux 22 % Pour un biseau de b %, les huit points sont 0 b%, b% 0, (100−b)% 0, 100% b%…. Au-delà de 25 %, les côtés droits deviennent plus courts que les pans ; à 50 %, les découpes se rejoignent au milieu des côtés.
Survol (CSS — .cs-grid-item:hover) scale(1.1), brightness(1.2), z-index: 2 scale(1.05) pour une grille serrée où le grossissement couvre les voisines.

FAQ

Parce qu'aucune transition de clip-path n'est prévue, et que les sept formes n'ont pas le même nombre de points : 64 pour les superellipses, 8 pour les biseaux, 12 pour l'encoche, 28 pour le creux. Le navigateur n'interpole que des polygones de même nombre de points ; ajouter transition: clip-path .4s n'animerait que les passages d'une superellipse à une autre, ou d'un biseau à l'autre (8 points chacun). Pour un morphing entre toutes les formes, il faut les redessiner avec la même structure — c'est ce que fait Morphing Corner Shapes (fx-0337) : quatre formes de 68 points, qui passent de l'une à l'autre en transition animée au survol.
Pas avec le JS tel quel : il cible document.getElementById('cs-grid'), donc la première grille seulement, et deux éléments ne peuvent pas porter le même id. Remplacez la première ligne par une boucle : document.querySelectorAll('.cs-grid-wrap').forEach(function (e) { e.addEventListener('click', …) }) — c'est ce que fait le fichier de scènes de cette page pour ses trois grilles. Les formes, en CSS, n'ont pas ce problème.
Sous 480 px, la grille passe à trois colonnes, mais les formes restent attachées aux numéros 1 à 12 : la case 4, superellipse « haut droit », se retrouve au début de la deuxième ligne, et les encoches du « centre » (6 et 7) glissent sur les bords. Mesuré à 390 px : quatre rangées de trois. Si la forme doit dire la position sur mobile aussi, ajoutez dans la media query des :nth-child pour trois colonnes (angles 1, 3, 10, 12).