Cartes✨ Premium

Animated Border

Bordure gradient en défilé continu sur une carte — deux pseudo-éléments CSS superposés et une animation background-position, zéro JavaScript.

CSSGradientLoop

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Cartes comprend 41 effets, dont 6 gratuits. Découvrir la catégorie →

3 exemples d'usage

Grille tarifaire — Plan recommandé mis en exergue — Animated Border exemple 1

① Grille tarifaire — Plan recommandé mis en exergue

QuandQuand une grille comparative affiche plusieurs niveaux d'abonnement et qu'un plan doit sortir du lot visuellement sans badge supplémentaire.
PourquoiLa bordure gradient animée crée un signal visuel passif qui attire l'œil sur la carte recommandée — plus subtil qu'un badge, plus accrocheur qu'un contour statique.
RéglagesDurée 3s pour plus de vivacité, couleurs brand (#6366f1, #8b5cf6, #d946ef, #6366f1), inset -2px.
Tableau de bord — Intégration ou fonctionnalité premium — Animated Border exemple 2

② Tableau de bord — Intégration ou fonctionnalité premium

QuandDans un dashboard SaaS ou une page d'intégrations, pour signaler qu'un bloc est réservé aux comptes premium ou mérite une attention particulière.
PourquoiL'animation discrète capte le regard sans bloquer l'interaction avec le reste de l'interface — plus élégant qu'un badge ou un surlignage de couleur unie.
RéglagesDurée 6s pour un effet ambiant, palette froide (#06b6d4, #3b82f6, #6366f1, #06b6d4), inset -3px.
Blog / Éditorial — Article à la une — Animated Border exemple 3

③ Blog / Éditorial — Article à la une

QuandSur une page d'accueil éditoriale ou un flux de contenu, pour distinguer visuellement la carte de l'article le plus récent ou le plus important.
PourquoiLa bordure animée différencie l'article vedette des cartes standard sans élément UI supplémentaire — elle s'intègre naturellement dans un design sombre.
RéglagesDurée 5s, gradient violet-rose (#7c3aed, #db2777, #e11d48, #7c3aed), --radius-xl: 12px.

Comment ça marche

La technique repose sur un sandwich de pseudo-éléments. Le ::before est positionné en inset: -2px — il déborde de 2 px de chaque côté de la carte — et reçoit le dégradé sur un canevas 3× plus large que l'élément (background-size: 300% 300%). Le ::after, positionné en inset: 2px, remplit l'intérieur avec la couleur de fond de la carte (var(--bg-elevated)). Les deux pseudo-éléments passent en z-index: -1 ; ::after étant postérieur dans le DOM, il s'affiche par-dessus ::before et masque le gradient à l'intérieur. L'anneau visible entre le bord extérieur de ::before et le bord extérieur de ::after constitue la bordure gradient.

L'animation @keyframes borderGradient fait glisser background-position de 0 50% à 300% 50% en 4 s, linéaire, infini — soit un balayage horizontal d'une pleine largeur du canevas. Le gradient linear-gradient(135deg, #6366f1, #d946ef, #06b6d4, #6366f1) répète la même couleur indigo en premier et en dernier stop : la transition de fin vers début est imperceptible, la boucle est visuellement sans couture.

Les rayons de coin sont compensés symétriquement : ::before reçoit border-radius: calc(var(--radius-xl) + 2px) et ::after reçoit border-radius: calc(var(--radius-xl) - 2px). Ce ±2 px garantit que les courbes intérieure et extérieure de la bordure restent parfaitement concentriques quelle que soit la valeur de --radius-xl.

Accessibilité

  • prefers-reduced-motion absent : aucune media query ne stoppe l'animation. Pour les UIs fonctionnelles, ajoutez manuellement @media (prefers-reduced-motion: reduce) { .card-border-gradient::before { animation: none; } } — la bordure reste visible, statique.
  • Les pseudo-éléments CSS (::before, ::after) sont invisibles aux technologies d'assistance — aucun attribut ARIA n'est nécessaire sur ces couches décoratives.
  • L'élément hôte conserve sa sémantique native : l'effet est purement visuel et ne modifie ni rôle ni ordre de tabulation.
  • Le contraste texte/fond dépend intégralement du contenu placé à l'intérieur de la carte ; la bordure animée est décorative et n'affecte pas le ratio WCAG.
  • Aucune interaction clavier ou pointeur dans l'effet lui-même — l'élément hôte reste focusable selon son type HTML natif.

Compatibilité navigateur

Nécessite les animations CSS et la propriété raccourcie inset — supportés dans tous les navigateurs modernes depuis 2021.

Chrome 87+✓ Complet
Firefox 87+✓ Complet
Safari 14.1+✓ Complet
Edge 87+✓ Complet
Mobile iOS 14.5+✓ Complet
Android Chrome 87+✓ Complet

Sans animations CSS (navigateurs anciens), la bordure reste visible mais statique — le premier frame du gradient (background-position: 0 50%) est affiché. Sans inset (IE), les pseudo-éléments ne sont pas positionnés et la carte s'affiche sans bordure.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="card-border-gradient">
  <!-- Votre contenu de carte -->
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

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

Option / propriétéDéfautEffet
--bg-elevated #1a1a24 Couleur de fond de la carte et du masque intérieur (::after) — modifier les deux simultanément pour que la bordure reste visible.
--radius-xl 1rem Rayon des coins. Les ::before et ::after sont recalculés automatiquement via calc(± 2px).
Couleurs gradient (::before) #6366f1, #d946ef, #06b6d4 Stops dans linear-gradient(135deg, …). Répétez la première couleur en dernier pour une boucle sans saut.
Épaisseur de bordure 2px Modifiez inset: -2px (::before) et inset: 2px (::after) avec la même valeur absolue. 1px = très fin, 4px = marqué.
Durée d'animation 4s Valeur dans la propriété animation du ::before. 2s = vif, 8s = ambiant et discret.
background-size 300% 300% Surface du dégradé. 200% = balayage plus court et contrasté ; 400% = défilé plus lent. Ajustez aussi la valeur finale dans @keyframes.
Angle du gradient 135deg Direction dans linear-gradient. 90deg = balayage horizontal pur, 45deg = diagonale montante.

FAQ

Non, l'effet est 100 % CSS — aucun script, aucune dépendance npm. Ajoutez simplement la classe card-border-gradient à votre carte et l'animation démarre automatiquement. Compatible avec n'importe quel framework (React, Vue, Angular, Svelte) sans adaptation.
Modifiez les stops dans linear-gradient(135deg, …) du ::before. Pour une boucle visuellement continue, répétez la première couleur en dernier stop — par exemple linear-gradient(135deg, #f59e0b, #ef4444, #8b5cf6, #f59e0b) pour une palette chaude.
L'effet de base ne contient pas de media query prefers-reduced-motion. Pour respecter la préférence système, ajoutez dans votre CSS : @media (prefers-reduced-motion: reduce) { .card-border-gradient::before { animation: none; } }. La bordure gradient reste alors visible, statique.