Boutons✨ Premium

RGB Split

Au survol, deux fantômes du libellé — rouge décalé de 2 px à gauche, cyan de 2 px à droite — apparaissent d'un coup et échangent leurs côtés une fois en 300 ms, puis restent en place — CSS seul, sur un bouton bleu nuit.

CSSHoverRGB

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. Boutons comprend 27 effets, dont 2 gratuits. Découvrir la catégorie →

3 exemples d'usage

Écouter l'album — sortie d'un label de musique électronique — RGB Split exemple 1

① Écouter l'album — sortie d'un label de musique électronique

QuandHero sombre d'une sortie musicale : pochette, titre, date, un bouton d'écoute.
PourquoiLe dédoublement rouge/cyan est le vocabulaire des pochettes et des visuels de musique électronique depuis les années 2010 ; l'effet reste sobre au repos et ne se révèle qu'à l'intention d'écouter.
RéglagesDécalage porté à ±3px, texte 16 px en capitales espacées, animation .4s, bordure rgba(255,255,255,.35) pour le repérage.
Jouer — carte de jeu rétro ou d'arcade — RGB Split exemple 2

② Jouer — carte de jeu rétro ou d'arcade

QuandCarte d'un jeu dans une bibliothèque : visuel pixelisé, titre, année, un bouton de lancement.
PourquoiL'aberration chromatique imite les écrans cathodiques : en 300 ms, le texte semble se resynchroniser comme une image de tube qui se stabilise. Un seul survol suffit à raconter l'époque.
RéglagesPolice monospace, border-radius: 6px, décalage ±2px conservé, fond #12122a pour se détacher de la carte.
Réessayer — page d'erreur serveur — RGB Split exemple 3

③ Réessayer — page d'erreur serveur

QuandPage 500 ou écran hors ligne : code d'erreur, une phrase, un bouton pour recharger.
PourquoiLe signal qui se dédouble raconte la panne sans image ; l'échange unique des couleurs au survol donne au bouton un côté « circuit qui se rallume » approprié à une reprise.
RéglagesDécalage ±2px, animation .3s, couleurs #f43f5e et #22d3ee (moins saturées que red/#0ff), bordure .35.

Comment ça marche

Au repos, .btn-rgb-split est un bouton sobre : fond #1a1a2e (bleu nuit), texte blanc, border: 1px solid rgba(255,255,255,.2), aucune ombre. Aucune transition n'est déclarée : tout ce qui suit apparaît et disparaît instantanément.

Au :hover, text-shadow: -2px 0 red, 2px 0 #0ff pose deux copies du texte derrière les glyphes : une rouge (#ff0000) décalée de 2 px vers la gauche, une cyan décalée de 2 px vers la droite. Blanc au centre, rouge à gauche, cyan à droite : c'est le décalage des canaux d'une image mal calée — l'« aberration chromatique » du nom.

En même temps démarre rgbShift, .3s ease, une seule itération : à 0 % et 100 % les fantômes sont à leur place (-2px / 2px), à 50 % ils ont échangé leurs côtés (2px / -2px). Mesuré dans Chromium : à 80 ms le rouge est déjà passé à droite (+1,4 px), à 150 ms il est à +1,9 px, à 220 ms il revient (−1,4 px). Les fantômes traversent donc le texte une fois, en 300 ms, puis la déclaration statique du :hover les maintient à ±2 px tant que la souris reste.

À la sortie du survol, les deux ombres disparaissent sans fondu, faute de transition. L'animation ne rejoue qu'à un nouveau survol. Rien ne bouge au repos, rien au clic (:active n'est pas défini) : c'est un effet strictement de survol, léger — deux ombres de texte sans flou, aucune propriété de mise en page.

Accessibilité

  • Contraste du texte : blanc sur #1a1a2e = 17,1:1, niveau AAA. Les fantômes s'ajoutent derrière les glyphes sans les recouvrir ; à 2 px, le rouge (4,3:1 sur le fond) et le cyan (13,6:1) épaississent visuellement les lettres plus qu'ils ne les brouillent — acceptable pour un libellé court en graisse 600, à éviter sous 14 px.
  • Repérage du bouton (WCAG 1.4.11, seuil 3:1 pour le contour d'un composant) : la face #1a1a2e sur le fond #0a0a0f du catalogue ne contraste qu'à 1,16:1, et la bordure rgba(255,255,255,.2) (soit #484859 une fois composée) à 2,2:1. Une personne malvoyante distingue mal où finit le bouton. Montez la bordure à rgba(255,255,255,.35) (3,7:1) ou éclaircissez la face.
  • prefers-reduced-motion absent du code : le seul mouvement est l'échange de 300 ms, une fois par survol. Ajoutez @media (prefers-reduced-motion: reduce) { .btn-rgb-split:hover { animation: none } } — les fantômes statiques restent, sans traversée.
  • Clavier : pas de :hover à la navigation Tab. Dupliquez la règle sous .btn-rgb-split:focus-visible (ombres et animation) ; l'outline natif est conservé et se lit bien sur le bleu nuit.
  • Tactile : effet exclusivement souris ; sur iOS les fantômes restent affichés après un tap jusqu'au toucher suivant (@media (hover: hover)). Cible ≈ 52 px de haut, au-dessus du minimum de 44 px.

Compatibilité navigateur

Requiert text-shadow à ombres multiples et les animations CSS sans préfixe — tous les navigateurs depuis 2015. Aucun JavaScript, zéro dépendance.

Chrome 43+✓ Complet
Firefox 16+✓ Complet
Safari 9+✓ Complet
Edge 12+✓ Complet
Mobile iOS✓ Statique (pas de survol)
Android Chrome✓ Statique (pas de survol)

Sans animations CSS, les deux fantômes apparaissent au survol à leur position finale (rouge à gauche, cyan à droite) sans l'échange de 300 ms : l'aberration est là, immobile. Sans text-shadow, le bouton reste un bouton bleu nuit ordinaire.

Le code

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

index.html — structure
🔒 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
Décalage text-shadow (CSS — :hover et @keyframes rgbShift, 4 occurrences) −2px / 2px Amplitude de l'aberration. ±1px = frisson à peine visible ; ±4px = texte franchement triplé, lisible seulement sur un libellé court. Modifiez les quatre valeurs ensemble.
Couleurs des fantômes (CSS — red / #0ff) red / #0ff Rouge et cyan sont complémentaires : superposés au blanc ils redonnent du blanc, d'où l'effet « canaux ». #f0f / #0f0 (magenta/vert) est l'autre paire classique.
animation-duration (CSS — :hover) .3s Durée de l'échange de côtés. .15s = claquement ; .6s = glissement visible des fantômes à travers le texte.
animation-iteration-count (CSS — :hover) 1 Nombre d'échanges par survol. infinite fait osciller les fantômes tant que la souris reste — plus « glitch », plus fatigant.
border (CSS — .btn-rgb-split) 1px solid rgba(255,255,255,.2) Contour du bouton, seul repère sur un fond sombre. .35 atteint 3:1 sur #0a0a0f ; .5 est net.
background (CSS — .btn-rgb-split) #1a1a2e Face bleu nuit. Toute couleur sombre convient ; les fantômes rouge et cyan perdent leur effet sur un fond clair (le cyan disparaît sur du blanc).
transition (CSS — à ajouter) aucune transition: text-shadow .2s fait apparaître et disparaître les fantômes en fondu au lieu d'un coup ; l'animation d'échange garde la main pendant ses 300 ms.

FAQ

Parce que le code ne déclare aucune transition : au survol, text-shadow passe de none à ses deux ombres instantanément, et l'animation prend le relais pour l'échange ; à la sortie, les ombres sont retirées de la même façon. Ajoutez transition: text-shadow .2s sur .btn-rgb-split : l'apparition et la disparition se fondent, et comme l'animation a priorité sur la transition pendant qu'elle tourne, l'échange de 300 ms reste intact.
Remplacez l'itération unique par infinite : .btn-rgb-split:hover { animation: rgbShift .3s ease infinite }. Les fantômes oscillent alors de −2 à +2 px trois fois par seconde. C'est nettement plus agressif : réservez-le à un libellé court, ralentissez à .6s, et gardez la règle prefers-reduced-motion qui coupe l'animation.
Oui : text-shadow et l'animation ne dépendent pas de la balise. Sur un texte plus grand, proportionnez le décalage à la taille de police — 0.06em à la place de 2px donne 2 px à 32 px et 4 px à 64 px — et déclenchez-le au survol du bloc parent ou en permanence. Sur un long paragraphe, l'aberration nuit à la lecture : gardez-la pour les titres et les libellés.