Hover✨ Premium

Border Gradient

Une bordure dégradée indigo-violet de 2 px apparaît en fondu au survol via deux pseudo-éléments empilés — aucun transform, pure CSS.

CSSBorder

Mis à jour le

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

3 exemples d'usage

Carte de tarif d'un logiciel de facturation — landing page pour artisans — Border Gradient exemple 1

① Carte de tarif d'un logiciel de facturation — landing page pour artisans

QuandTrois colonnes de tarifs (Starter, Pro, Équipe) sur fond sombre ; au survol la carte la plus regardée s'entoure d'une bordure dégradée indigo-violet.
PourquoiUne bordure lumineuse souligne le plan sans en modifier la mise en page (pas de box-shadow qui déborde), ce qui est difficile en CSS sans cette technique.
RéglagesCartes 280×360 px sur fond sombre ; hauteur de survol couvrant l'ellipse de capture ; texte de tarif et bouton CTA dans chaque carte.
Fiche de compétence d'un CV interactif — outil de création de CV en ligne — Border Gradient exemple 2

② Fiche de compétence d'un CV interactif — outil de création de CV en ligne

QuandGrille de compétences (Python, Figma, SQL…) sous forme de petites cartes 120×80 px ; au survol une bordure dégradée souligne la compétence.
PourquoiUne bordure dégradée sur fond sombre ressemble à un badge technique ; elle n'alourdit pas la carte contrairement à un box-shadow coloré.
RéglagesDix cartes en grille serrée ; bordure 2 px, coins arrondis de 8 px ; cibles sur l'ellipse de capture.
Vignette d'une collection de bijoux — boutique d'une créatrice de bijoux artisanaux — Border Gradient exemple 3

③ Vignette d'une collection de bijoux — boutique d'une créatrice de bijoux artisanaux

QuandGrille de photos de bijoux sur fond quasi-noir ; au survol la photo s'entoure d'un liseré doré (couleurs personnalisées : or → rose).
PourquoiUn cadre doré autour d'une pièce de joaillerie est un code visuel de luxe reconnaissable, sans text-decoration ni transform.
RéglagesPhotos 300×300 px ; dégradé remplacé par linear-gradient(135deg, #d4af37, #f7c6a8) ; inset élargi à -3px pour un liseré plus généreux.

Comment ça marche

La racine .fx-0345-root centre un bouton de 200 px. La technique repose sur deux pseudo-éléments : ::before place un fond dégradé (135°, indigo → violet) en négatif (inset: -2px) derrière l'élément, soit une couche qui déborde de 2 px sur tout le pourtour ; ::after place un fond uni de la couleur de la carte en positif (inset: 2px), masquant l'intérieur. Au repos, ::before est à opacity: 0. Au survol, il passe à 1 en 0,3 s. L'illusion d'une bordure dégradée tient au fait que seul le pourtour de 2 px est visible entre les deux pseudo-éléments.

L'élément lui-même porte border: 2px solid transparent pour maintenir l'espace sans bordure native visible. z-index: -1 sur les deux pseudo-éléments les place derrière le contenu. :focus-visible déclenche la même opacité de ::before qu'au survol, avec un contour indigo en plus. Pure CSS, aucun JavaScript. Sous mouvement réduit, la transition est supprimée mais la bordure apparaît instantanément.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, la transition opacity est désactivée. La bordure dégradée apparaît instantanément au survol et au focus — retour d'état garanti.
  • Clavier : l'élément est un <button> nativement focusable. :focus-visible déclenche la bordure et ajoute un contour de 2 px décalé de 4 px, cumulant deux signaux visuels pour le focus clavier.
  • Toucher : le tap active l'état hover sur la plupart des navigateurs mobiles. La bordure reste visible jusqu'au prochain changement de focus.
  • Rendu de la bordure : sur fond blanc, la bordure dégradée peut manquer de contraste selon les couleurs choisies. Augmentez l'épaisseur (inset: -3px) ou ajustez les teintes pour maintenir un ratio WCAG ≥ 3:1 contre le fond.

Compatibilité navigateur

Pure CSS. Propriétés : ::before/::after, inset, opacity, transition, z-index négatif, :focus-visible. Vérifié dans Chromium et Firefox : bordure visible, deux copies indépendantes, 0 erreur. inset (raccourci) nécessite Chrome 87+, Firefox 87+, Safari 14.1+.

Chrome 87+✓ Complet (mesuré)
Firefox 87+✓ Complet (mesuré)
Safari 14.1+✓ Complet (inset)
Edge 87+✓ Complet (moteur Chromium)
Mobile iOS 14.5+✓ Complet
Android Chrome 87+✓ Complet (mesuré)

Sans inset (browsers avant 2021), utilisez top: -2px; right: -2px; bottom: -2px; left: -2px. Sans :focus-visible, le focus clavier ne déclenche pas la bordure.

Le code

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

index.html — structure
<div class="fx-0345-root">
  <button class="gbd-box gbd-border" type="button">
    <span>Votre texte</span>
  </button>
</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
Couleurs de la bordure (CSS — linear-gradient(135deg, #6366f1, #d946ef)) indigo → violet Remplacez les deux couleurs pour adapter à votre charte. Ajoutez des stops intermédiaires pour un arc-en-ciel.
Épaisseur de la bordure (CSS — inset: -2px et inset: 2px) 2 px Passer à -3px et 3px épaissit la bordure à 3 px. Les deux valeurs doivent être égales en valeur absolue.
Durée (CSS — 0.3s) 0,3 s 0,15 s est plus vif ; 0,5 s plus doux.
Angle du dégradé (CSS — 135deg) 135° (diagonale) 90deg donne un dégradé horizontal ; to right ou to bottom sont lisibles et équivalents.
Rayon des coins du pseudo-élément (CSS — calc(var(--radius-xl) + 2px)) radius de la carte + 2 px Adaptez automatiquement avec calc() si vous changez le radius de la carte.

FAQ

CSS ne permet pas border-image avec border-radius : les coins arrondis et les bordures dégradées natives sont incompatibles. Les deux pseudo-éléments empilés contournent cette limitation.
Le z-index: -1 sur les pseudo-éléments les place derrière le fond de la carte. Si votre carte a un z-index explicite positif, ajoutez isolation: isolate sur la carte pour créer un nouveau contexte d'empilement.
Oui, en remplaçant la transition opacity par un @keyframes qui anime background-position sur un dégradé plus large (conic-gradient ou grand gradient linéaire). La technique sort du périmètre de cet effet, qui reste au survol.