Couleur du texte en fonction d'une variable

Résolu/Fermé
Romain42mc Messages postés 5 Date d'inscription samedi 27 avril 2013 Statut Membre Dernière intervention 1 septembre 2013 - 31 août 2013 à 18:32
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 1 sept. 2013 à 19:13
Salut à tous ;)
Alors voilà j'ai une question à propos de PHP (peut être aussi de HTML/CSS), elle est un peu compliquée à comprendre j'imagine ^^

Imaginons que sur un site, je dois afficher une valeur en chiffres (avec un echo), qui varie selon divers paramètres. Cette valeur peut se situer entre 0 et 100 (par exemple)
Ce que je cherche à faire, c'est faire en sorte que la couleur de la valeur affichée sur la page change en fonction de la variable elle-même. Par exemple :

- si la variable est "0", elle devra s'afficher en rouge
- si la variable est "50", elle devra s'afficher en jaune
- si la variable est "65", elle devra s'afficher en vert-jaune
- si la variable est "100", elle devra s'afficher en vert

Mais il faudrait que ce soit pareil pour chaque valeur, qu'il y ait un "dégradé" selon la valeur en fait (je sais, c'est peut-être pas très clair...)
Une image peut être mieux j'imagine : http://image.noelshack.com/fichiers/2013/35/1377966593-valeur.png
Il faudrait peut être créer une condition pour chacune des 100 valeurs possibles (de 0 à 100), mais ce serait fastidieux... et imaginez qu'il y ait 10000 cas possibles... :o

Ce que j'ai pensé à faire, c'est charger une image d'un dégradé en CSS (comme ci-dessus), prendre une couleur à un certain endroit sur la barre (à l'aide de la valeur, qui pourrait se convertir en % ou en px), et ensuite la récupérer pour la mettre sur le texte. Mais je ne vois pas trop comment mettre en oeuvre ça...

Voilà, donc si vous avez un truc, je vous remercie d'avance :)
A voir également:

2 réponses

Romain42mc Messages postés 5 Date d'inscription samedi 27 avril 2013 Statut Membre Dernière intervention 1 septembre 2013 1
1 sept. 2013 à 17:24
Oui je savais pour les couleurs en HTML mais je ne voyais pas trop comment faire ce genre de truc.
C'est précisément ce que je cherchais, merci :D
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
1 sept. 2013 à 19:13
Alors, tu peux cocher le sujet comme "Résolu" :o)
Bye.
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
Modifié par heliconius le 1/09/2013 à 00:27
Bonsoir,

Les couleurs utilisables en HTML sont au format #RRVVBB (rouge, vert, bleu ; valeurs exprimées en hexadécimal)
#FF0000 = rouge
#00FF00 = vert
#0000FF = bleu
#FFFF00 = jaune (rouge + vert)

Pour l'instant, ignorons le bleu qui ne nous sert pas.
Pour passer du rouge au vert en passant par le jaune, ce serait :

Format     :  RRVV      RRVV      RRVV
Valeurs hex:  FF00  ->  FFFF  ->  00FF
               0%        50%      100%
Couleurs   :  Rouge     Jaune     Vert

- pour une valeur comprise entre 0 et 50% la couleur verte doit croître de 00 à FF (0 à 255) soit sur une plage de 255. 1% = 255/50
- pour une valeur comprise entre 50 et 100% la couleur rouge doit décroître de FF à 00 (255 à 0) soit une plage de 255. 1% = 255/50

<html>
<head>
<title>Couleurs</title>
</head>
<body bgcolor="#000000">
<?php
function couleur($valeur) {
	$point = floor(255/50);
	// Si hors limites, retour en bleu (pour tester)
	if($valeur<0 || $valeur>100) { return '#0000FF'; } 
	switch($valeur) {
		case 0  : return '#FF0000'; break; //   0 = rouge
		case 50 : return '#FFFF00'; break; //  50 = jaune
		case 100: return '#00FF00'; break; // 100 = vert
		default : if($valeur<50) { return '#FF'.str_pad(dechex($valeur*$point),2,'0',STR_PAD_LEFT).'00'; }
		          if($valeur>50) { return '#'.str_pad(dechex(255-floor(($valeur-50)*$point)),2,'0',STR_PAD_LEFT).'FF00'; }
	}
}

// Vérification de -2 à 102 inclus
for($n=-2; $n<=102; $n++) {
	$couleur = couleur($n);
	echo "<font color='$couleur'><b>Ceci est la ligne numéro $n (".strtoupper($couleur).")</b></font><br/>\n";
}
?>
</body>
</html>

ça te convient ?
-1