Générateur de dégradés
Deux couleurs, un angle, linéaire ou radial : le dégradé s'affiche en direct et le CSS est prêt à copier. Le bon exercice pour piloter du CSS depuis JavaScript.
- Lire un champ de type color
- Écrire un style en direct avec element.style
- Copier du texte avec l'API Clipboard
Pourquoi un générateur de dégradés ? Écrire linear-gradient à la main, c'est deviner l'angle, recharger, recommencer. Avec deux pastilles de couleur et un curseur, on voit le résultat tout de suite, et on copie la ligne exacte.
Le navigateur fournit déjà un sélecteur de couleur avec input type="color". On ajoute un champ texte pour coller un code hexadécimal, et on garde les deux synchronisés.
Le CSS généré commence par une couleur unie : c'est la solution de repli pour les vieux navigateurs.
Pourquoi en JavaScript simple ? Trois champs, une chaîne de caractères construite, et une ligne pour l'appliquer. Rien d'autre.
LE HTML
Le sélecteur natif et un champ texte pour coller un code.
<input type="color" id="c1" value="#c8f060"> <input id="t1" value="#c8f060"> <input type="color" id="c2" value="#13131c"> <input id="t2" value="#13131c"> <input type="range" id="angle" min="0" max="360" step="5" value="135"> <div id="apercu"></div> <pre id="css"></pre>
CONSTRUIRE LE DÉGRADÉ
const val = id => document.getElementById(id).value; const degrade = () => `linear-gradient(${val('angle')}deg, ${val('c1')}, ${val('c2')})`;APPLIQUER ET AFFICHER LE CODE
La première ligne est une couleur unie, au cas où le dégradé ne serait pas compris.
function maj() { document.getElementById('apercu').style.background = degrade(); document.getElementById('css').textContent = `background: ${val('c1')};\nbackground: ${degrade()};`; }GARDER LES DEUX CHAMPS D'ACCORD
On n'accepte le texte que s'il ressemble à #rrggbb.
const HEX = /^#[0-9a-f]{6}$/i; c1.addEventListener('input', () => { t1.value = c1.value; maj(); }); t1.addEventListener('input', () => { if (HEX.test(t1.value)) { c1.value = t1.value; maj(); } });COPIER
document.getElementById('copier').addEventListener('click', async () => { try { await navigator.clipboard.writeText(document.getElementById('css').textContent); } catch { /* copie refusée : l'utilisateur peut sélectionner le texte */ } });
PIÈGE 1 : Passer une couleur invalide à type="color"
Mauvais : c1.value = 'c8f060' ou '#abc'. Le sélecteur refuse et repasse en noir.
Correct : n'accepter que le format complet #rrggbb, en minuscules, et ajouter le # s'il manque.
PIÈGE 2 : Oublier la solution de repli
Mauvais : une seule ligne background avec le dégradé. Si le navigateur ne la comprend pas, le fond reste vide.
Correct : une couleur unie d'abord, puis le dégradé qui la remplace.
PIÈGE 3 : Croire que la copie marche partout
Mauvais : appeler navigator.clipboard sans précaution. Hors HTTPS ou dans un iframe isolé, la promesse est rejetée.
Correct : un try et catch, et un message qui propose de sélectionner le texte à la main.
- Plus de deux couleurs, avec la position de chaque arrêt en pourcentage.
- Un dégradé conique avec conic-gradient, pour des roues de couleur.
- Des préréglages tirés de la palette du site.
- Les dégradés entre deux couleurs très différentes passent par un gris terne : ajoutez in oklch dans la fonction pour des transitions plus vives.
- Mettez les valeurs dans l'URL pour partager un dégradé par lien.
Les deux couleurs, l'angle et le type vivent dans un useState objet.
Le style de l'aperçu se calcule au rendu : style={{ background: degrade }}.
Le bouton Copier affiche un état « copié » pendant deux secondes avec un setTimeout nettoyé au démontage.
Chargement des commentaires…