Gradient Ring
Anneau de 50 px — dégradé conique transparent→#6366f1, centre masqué par un ::before à inset 5 px (fond fixe #0a0a0f) — 1 tour/s linéaire, zéro JS.
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. Chargement comprend 29 effets, dont 4 gratuits. Découvrir la catégorie →
3 exemples d'usage



Comment ça marche
Structure. Un seul div.loader-gradient-ring de 50 × 50 px, border-radius: 50%. Son fond : conic-gradient(transparent, #6366f1) — le dégradé conique balaie 360° à partir de 0° (haut, sens horaire), du transparent à l'indigo, peignant une couronne dont la teinte s'épaissit progressivement. Le pseudo-élément ::before (content: ""; position: absolute; inset: 5px; background: #0a0a0f; border-radius: 50%) pose un disque de 40 × 40 px qui masque le centre : il ne reste visible que les 5 px périphériques qui forment l'anneau. Aucun JavaScript, aucune dépendance.
Animation. @keyframes ringRotate { to { transform: rotate(360deg) } }, appliquée en animation: 1s linear 0s infinite. Le disque tourne à vitesse constante, un tour complet par seconde. Le dégradé conique tourne avec lui : la zone pleinement opaque mène, la zone transparente referme le cercle. Mesuré dans Chromium : la matrice de transformation confirme environ 90° de rotation en 250 ms — quart de tour par quart de seconde, boucle infinie sans dérive.
Contrainte d'intégration. Le fond du ::before est codé en dur à #0a0a0f, couleur du conteneur de démo .demo-preview. Hors de ce conteneur, sur tout fond différent, le masque central reste sombre et devient visible : l'anneau ressemble alors à un disque coloré sur fond sombre cerclé d'un arc, non à un anneau transparent. Pour corriger, remplacez background: #0a0a0f sur .loader-gradient-ring::before par la couleur exacte du fond porteur.
Accessibilité
- prefers-reduced-motion absent : aucune règle
@media (prefers-reduced-motion: reduce)dans le code vendu. Mesuré sous émulation réduite :playState: "running", la rotation continue. Ajoutez@media (prefers-reduced-motion: reduce) { .loader-gradient-ring { animation-duration: 10s } }pour ralentir fortement, ouanimation: nonepour l'arrêter. - role="status" absent : l'anneau est muet pour les lecteurs d'écran. Pour un indicateur de chargement, posez
role="status"(ourole="progressbar") sur l'élément avecaria-label="Chargement…", ou insérez un texte masqué visuellement en enfant (.sr-only). - aria-busy / aria-live absents : l'anneau n'annonce pas la fin du chargement. La pratique correcte est de poser
aria-busy="true"sur le conteneur qui se charge (pas sur l'anneau lui-même), et de le retirer une fois le contenu disponible. L'anneau reste alors un indicateur visuel seul. - Si l'anneau est utilisé en pur décor sans rôle sémantique, posez
aria-hidden="true"surdiv.loader-gradient-ringpour que les technologies d'assistance l'ignorent — et déléguez la notification de chargement à unaria-liveexistant dans la page.
Compatibilité navigateur
Deux propriétés fixent le plancher : conic-gradient (Chrome 69, Firefox 83, Safari 12.1) et le raccourci inset (Chrome 87, Firefox 87, Safari 14.1 — plus restrictif). Zéro JavaScript, zéro dépendance.
Sans conic-gradient (IE, navigateurs antérieurs à 2018) : fond transparent, anneau invisible. Sans inset (Chrome 69–86, Firefox 61–86) : le masque ::before ne se positionne pas, le dégradé conique apparaît comme un disque plein en rotation. Dans les deux cas, le repli naturel est un spinner border classique.
Le code
Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :
<div class="loader-gradient-ring"></div>
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éfaut | Effet |
|---|---|---|
Diamètre extérieur (CSS — width: 50px; height: 50px) |
50 px | Taille totale de l'anneau. Changez les deux valeurs ensemble. 20–24 px : tient dans un bouton ou une bulle. 60–80 px : indicateur de zone. |
Épaisseur de l'anneau (CSS — inset: 5px sur ::before) |
5 px (diamètre intérieur = 50 − 2×5 = 40 px) | Distance entre le bord extérieur et le masque central. 3px : anneau fin. 8px : anneau épais, plus lisible à petite taille. |
Fond du masque (CSS — background: #0a0a0f sur ::before) |
#0a0a0f | Doit correspondre exactement au fond du conteneur. Blanc : #ffffff. Variable CSS partagée : var(--surface). Toute valeur différente rend le masque visible comme un disque sombre. |
Couleur de l'arc (CSS — conic-gradient(transparent, #6366f1)) |
#6366f1 (indigo) | Remplacez #6366f1. Le départ reste transparent. Pour que l'arc commence déjà coloré (aucune zone invisible) : conic-gradient(#6366f199, #6366f1). |
Vitesse de rotation (CSS — première valeur de animation) |
1s | 0.6s : rotation vive. 2s : état de fond discret. La vitesse perçue dépend aussi de l'arc : un arc long paraît plus rapide. |
Timing (CSS — linear) |
linear | Standard pour un spinner. ease-in-out donne un léger relâchement à chaque tour — organique mais peu conventionnel pour un indicateur de chargement. |
Sens de rotation (CSS — animation-direction) |
normal (sens horaire) | animation-direction: reverse pour un sens anti-horaire. Certaines interfaces utilisent ce sens pour des spinners d'annulation ou de « déchargement ». |
FAQ
::before est codé en dur à #0a0a0f — couleur du conteneur de démo. Sur tout fond différent, le masque reste sombre et devient visible. Correctif : remplacez background: #0a0a0f sur .loader-gradient-ring::before par la couleur exacte de votre fond. Si l'anneau apparaît sur plusieurs surfaces différentes, une variable CSS partagée (--ring-bg: #votre-fond) évite de modifier plusieurs règles.conic-gradient(transparent, #6366f1)) fait un fondu sur les 360° complets : un quart de l'anneau environ est quasi invisible. Pour un arc opaque sur 270° suivi d'une queue transparente de 90°, utilisez conic-gradient(#6366f1 0deg 270deg, transparent 270deg 360deg). Pour des bords francs sans fondu : conic-gradient(#6366f1 270deg, transparent 270deg).border: 4px solid avec trois côtés en indigo et un côté transparent — anneau uniforme avec une échancrure franche et un seul élément HTML, aucun masque. fx-0435 peint le dégradé sur le fond du disque via conic-gradient et masque le centre avec ::before : la couleur varie continûment de transparent à plein, sans échancrure. La technique border ne permet pas de dégradé angulaire ; la technique conic-gradient permet n'importe quelle palette angulaire mais exige que le fond du masque corresponde au fond porteur.