Utilitaires✨ Premium

Dotted Constellation Border

Des points posés le long du bord d'une boîte flottent doucement ; au survol, au focus ou au doigt, ils s'éclairent et se relient en constellation.

SVGJSInteractive

Mis à jour le

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

3 exemples d'usage

Les douze signes d'un site d'horoscope — Dotted Constellation Border exemple 1

① Les douze signes d'un site d'horoscope

QuandSur la page de la semaine d'Astrévane, les douze signes forment une grille de cartes sur un ciel de nuit, chacune bordée de points. La carte que l'on survole relie ses points en constellation.
PourquoiLes points dessinent un ciel étoilé autour de chaque signe, en accord avec le sujet, et la constellation qui se forme indique la carte visée sans changer la grille.
RéglagesUne racine par signe, cst-box sur le <a> de la carte (76 px de haut), data-cst-seed de 1 à 12 pour que chaque carte ait son propre dessin ; --cst-color: #a09ef8, --cst-color-active: #eeebff. Le survol vient de la souris de la capture.
Encart des séances en haut de page d'un planétarium — Dotted Constellation Border exemple 2

② Encart des séances en haut de page d'un planétarium

QuandSous le menu du planétarium de Corvelune, un grand encart « Cette semaine sous la coupole » liste trois séances (ciel boréal, anneaux de Saturne, petits explorateurs) avec un bouton Réserver. Ses points flottent en permanence et se relient quand la souris entre dans l'encart.
PourquoiÀ grande échelle, le cadre devient le décor de la page : un ciel discret autour du texte important, qui s'anime quand on s'y intéresse.
Réglagescst-box de 380 × 250 px, contenu aligné à gauche, fond bleu nuit translucide ; data-cst-seed="21", --cst-color: #93a8ff, --cst-color-active: #e4ebff. Le bouton contenu forme aussi la constellation au focus clavier.
Badge de niveau débloqué dans une appli d'apprentissage — Dotted Constellation Border exemple 3

③ Badge de niveau débloqué dans une appli d'apprentissage

QuandSur le profil de Léonie dans l'appli Savellio, une rangée de badges résume ses leçons d'italien. Quand elle débloque le niveau 5 (passé composé), le badge se relie en constellation et une notification sombre apparaît dessous.
PourquoiLa constellation qui se forme marque l'événement sur un petit élément sans animation brusque, et les points restent autour du badge comme une trace du succès.
Réglagescst-box de 112 × 92 px (14 points), data-cst-seed="5", --cst-color: #7c6cf0. La scène pose la classe cst-on au déblocage et l'enlève pour recommencer. Sur une boîte aussi petite, des lignes traversent les coins de l'intérieur.

Comment ça marche

Au chargement, le script ajoute dans chaque .cst-box un SVG qui déborde de 10 px tout autour, puis y pose des points espacés d'environ 36 px sur le bord réel de la boîte : 20 pour la taille par défaut de 200 × 120 px, 29 pour 320 × 160. Chaque point s'écarte du bord de 2 px au plus, et ces écarts viennent d'un générateur pseudo-aléatoire réglé par data-cst-seed : la même graine donne toujours le même dessin, à chaque chargement et dans tous les navigateurs.

Chaque point (rayon 2,5 px, #6366f1) flotte de 2 px au plus dans une direction qui lui est propre, en 3 s aller-retour, avec un départ décalé de 0,15 s sur son voisin. Le script trace aussi une ligne entre tous les points distants de moins de 70 px, mais ces lignes restent invisibles au repos.

Au survol, au focus (:focus-within) ou à l'appui du doigt (classe cst-on), les lignes apparaissent en 0,3 s à 40 % d'opacité et les points passent en #a78bfa avec une lueur de 4 px : la constellation se forme. Si la boîte change de taille, un ResizeObserver refait le dessin pour que les points restent sur le bord.

Accessibilité

  • Décor muet : le SVG ajouté porte aria-hidden="true" et focusable="false" ; les lecteurs d'écran ne lisent que le contenu de la boîte.
  • Clavier : la boîte de la démo est une <div>. Donnez la classe cst-box à un lien ou un bouton, ou placez-en un dedans, et Tab forme la constellation (elle remplace le contour de focus de la boîte). Sur Safari macOS, Option+Tab atteint les liens si le réglage du système ne le permet pas avec Tab.
  • Toucher : un appui du doigt forme la constellation jusqu'au prochain appui ailleurs, y compris dans WebKit.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, les points ne flottent plus et les lignes apparaissent sans fondu ; le bord pointillé et la constellation restent.
  • Repère faible : des points de 2,5 px et des lignes à 40 % ne suffisent pas à montrer le focus sur un fond clair ; dans ce cas, rendez un contour au :focus-visible de votre lien.

Compatibilité navigateur

SVG créé en JavaScript (4,2 Ko), sélecteur :is() (Chrome 88, Firefox 78, Safari 14), ResizeObserver (Chrome 64, Firefox 69, Safari 13.1). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : deux copies dont la 2e survolée seule, script collé deux fois sans points en double, mêmes positions dans les trois navigateurs, boîte passée à 320 × 160 avec 29 points à 4 px au plus du bord, focus clavier, appui du doigt, 390 px sans débordement, mouvement réduit sans animation, 0 erreur.

Chrome 88+✓ Complet (mesuré)
Firefox 78+✓ Complet (mesuré)
Safari 14+✓ Complet (mesuré dans WebKit)
Edge 88+✓ Complet (moteur Chromium)
Mobile iOS 14+✓ Moteur WebKit, non vérifié sur appareil
Android Chrome 88+✓ Complet (moteur Chromium)

Sans JavaScript, aucun point : la boîte s'affiche seule avec son contenu. Sans ResizeObserver, les points gardent la taille du premier dessin.

Le code

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

index.html — structure
<div class="fx-0774-root">
  <div class="cst-box" data-cst-seed="7">
    …
    <!-- le script ajoute ici <svg class="cst-svg"> avec les .cst-link et les .cst-dot -->
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

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

Option / propriétéDéfautEffet
Graine (HTML — data-cst-seed sur .cst-box) 7 Nombre entier qui fixe les petits écarts des points et leur direction de flottement. Changez-la pour varier le dessin d'une boîte à l'autre.
Couleurs (CSS — --cst-color, --cst-color-active, --cst-glow) #6366f1, #a78bfa, rgba(99, 102, 241, .8) Points et lignes au repos, points à l'état actif, lueur des points.
Écart entre les points (JS — SPACING) 36 px Plus petit, plus de points ; huit points au minimum, quelle que soit la taille.
Longueur des liaisons (JS — LINK) 70 px Distance maximale entre deux points reliés. Gardez environ deux fois SPACING.
Taille de la boîte (CSS — width / min-height de .cst-box) 200 × 120 px au moins Les points suivent le bord à toutes les tailles et se replacent si elle change.
État actif forcé (HTML — classe cst-on) absente Garde la constellation formée, par exemple sur l'élément choisi. Le script ne retire que celle qu'il a posée au toucher.

FAQ

Avec Math.random(), le dessin changeait à chaque visite et une capture d'écran ne correspondait jamais à la page. La graine rend le rendu identique partout, tout en gardant un air irrégulier. Pour des dessins différents sur une même page, donnez une graine différente à chaque boîte.
Les liaisons vont jusqu'à 70 px. Près des coins d'une boîte de moins de 150 px environ, des points de deux côtés voisins sont assez proches pour être reliés en diagonale. Sur un badge ou une icône, baissez LINK vers 40 px pour ne garder que les liaisons le long du bord.
Donnez la classe cst-box au <a> de la carte et mettez votre contenu dedans ; le script ajoute son SVG à la fin. Le survol, Tab et l'appui du doigt forment la constellation, et la carte reste un lien ordinaire. Gardez une racine .fx-0774-root par carte : le script ne dessine que la première .cst-box de chaque racine.